/* SPDX-License-Identifier: GPL-2.0-only */

#include <acpi/acpi_device.h>
#include <acpi/acpigen.h>
#include <console/console.h>
#include <device/i2c_simple.h>
#include <device/device.h>
#include "chip.h"

#define MAX98927_ACPI_NAME	"MAXI"
#define MAX98927_ACPI_HID	"MX98927"

static void max98927_fill_ssdt(const struct device *dev)
{
	struct drivers_i2c_max98927_config *config = dev->chip_info;
	const char *scope = acpi_device_scope(dev);
	struct acpi_i2c i2c = {
		.address = dev->path.i2c.device,
		.mode_10bit = dev->path.i2c.mode_10bit,
		.speed = config->bus_speed ? : I2C_SPEED_FAST,
		.resource = scope,
	};
	struct acpi_dp *dp;

	if (!scope)
		return;

	/* Device */
	acpigen_write_scope(scope);
	acpigen_write_device(acpi_device_name(dev));
	acpigen_write_name_string("_HID", MAX98927_ACPI_HID);
	acpigen_write_name_integer("_UID", config->uid);
	if (config->desc)
		acpigen_write_name_string("_DDN", config->desc);
	acpigen_write_STA(acpi_device_status(dev));

	/* Resources */
	acpigen_write_name("_CRS");
	acpigen_write_resourcetemplate_header();
	acpi_device_write_i2c(&i2c);
	acpigen_write_resourcetemplate_footer();

	/* Device Properties */
	dp = acpi_dp_new_table("_DSD");

	acpi_dp_add_integer(dp, "interleave_mode", config->interleave_mode);
	acpi_dp_add_integer(dp, "vmon-slot-no", config->vmon_slot_no);
	acpi_dp_add_integer(dp, "imon-slot-no", config->imon_slot_no);

	acpi_dp_write(dp);

	acpigen_pop_len(); /* Device */
	acpigen_pop_len(); /* Scope */

	printk(BIOS_INFO, "%s: %s address 0%xh\n", acpi_device_path(dev),
			dev->chip_ops->name, dev->path.i2c.device);
}

static const char *max98927_acpi_name(const struct device *dev)
{
	struct drivers_i2c_max98927_config *config = dev->chip_info;

	if (config->name)
		return config->name;

	return MAX98927_ACPI_NAME;
}

static struct device_operations max98927_ops = {
	.read_resources		= noop_read_resources,
	.set_resources		= noop_set_resources,
	.acpi_name		= max98927_acpi_name,
	.acpi_fill_ssdt		= max98927_fill_ssdt,
};

static void max98927_enable(struct device *dev)
{
	struct drivers_i2c_max98927_config *config = dev->chip_info;

	dev->ops = &max98927_ops;

	if (config && config->desc) {
		dev->name = config->desc;
	}
}

struct chip_operations drivers_i2c_max98927_ops = {
	.name = "Maxim MAX98927 Codec",
	.enable_dev = max98927_enable
};
