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

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

const char *nauhid[MAX_HID] = {"NVTN2010", "NVTN2012"};

static void nau8315_fill_ssdt(const struct device *dev)
{
	struct drivers_generic_nau8315_config *config = dev->chip_info;
	const char *path;
	struct acpi_dp *dp;

	if (!dev->enabled || !config)
		return;

	const char *scope = acpi_device_scope(dev);
	const char *name = acpi_device_name(dev);
	if (!scope || !name)
		return;

	/* Device */
	acpigen_write_scope(scope);
	acpigen_write_device(name);

	acpigen_write_name_string("_HID", nauhid[config->hid]);
	acpigen_write_name_integer("_UID", 0);
	acpigen_write_name_string("_DDN", dev->chip_ops->name);
	acpigen_write_STA(acpi_device_status(dev));

	/* Resources */
	acpigen_write_name("_CRS");
	acpigen_write_resourcetemplate_header();
	acpi_device_write_gpio(&config->enable_gpio);
	acpigen_write_resourcetemplate_footer();

	/* _DSD for devicetree properties */
	/* This points to the first pin in the first gpio entry in _CRS */
	path = acpi_device_path(dev);
	dp = acpi_dp_new_table("_DSD");
	acpi_dp_add_gpio(dp, "enable-gpios", path, 0, 0,
			 config->enable_gpio.active_low);
	acpi_dp_write(dp);

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

	printk(BIOS_INFO, "%s: %s\n", path, dev->chip_ops->name);
}

static const char *nau8315_acpi_name(const struct device *dev)
{
	return "NVTN";
}

static struct device_operations nau8315_ops = {
	.read_resources		= noop_read_resources,
	.set_resources		= noop_set_resources,
	.acpi_name		= nau8315_acpi_name,
	.acpi_fill_ssdt		= nau8315_fill_ssdt,
};

static void nau8315_enable(struct device *dev)
{
	dev->ops = &nau8315_ops;
}

struct chip_operations drivers_generic_nau8315_ops = {
	.name = "Nuvoton NAU8315 Amplifier",
	.enable_dev = nau8315_enable
};
