162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ACPI support for int340x thermal drivers
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2014, Intel Corporation
662306a36Sopenharmony_ci * Authors: Zhang Rui <rui.zhang@intel.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/acpi.h>
1062306a36Sopenharmony_ci#include <linux/module.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "../internal.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define INT3401_DEVICE 0X01
1562306a36Sopenharmony_cistatic const struct acpi_device_id int340x_thermal_device_ids[] = {
1662306a36Sopenharmony_ci	{"INT3400"},
1762306a36Sopenharmony_ci	{"INT3401", INT3401_DEVICE},
1862306a36Sopenharmony_ci	{"INT3402"},
1962306a36Sopenharmony_ci	{"INT3403"},
2062306a36Sopenharmony_ci	{"INT3404"},
2162306a36Sopenharmony_ci	{"INT3406"},
2262306a36Sopenharmony_ci	{"INT3407"},
2362306a36Sopenharmony_ci	{"INT3408"},
2462306a36Sopenharmony_ci	{"INT3409"},
2562306a36Sopenharmony_ci	{"INT340A"},
2662306a36Sopenharmony_ci	{"INT340B"},
2762306a36Sopenharmony_ci	{"INT3532"},
2862306a36Sopenharmony_ci	{"INTC1040"},
2962306a36Sopenharmony_ci	{"INTC1041"},
3062306a36Sopenharmony_ci	{"INTC1042"},
3162306a36Sopenharmony_ci	{"INTC1043"},
3262306a36Sopenharmony_ci	{"INTC1044"},
3362306a36Sopenharmony_ci	{"INTC1045"},
3462306a36Sopenharmony_ci	{"INTC1046"},
3562306a36Sopenharmony_ci	{"INTC1047"},
3662306a36Sopenharmony_ci	{"INTC1048"},
3762306a36Sopenharmony_ci	{"INTC1049"},
3862306a36Sopenharmony_ci	{"INTC1050"},
3962306a36Sopenharmony_ci	{"INTC1060"},
4062306a36Sopenharmony_ci	{"INTC1061"},
4162306a36Sopenharmony_ci	{"INTC1062"},
4262306a36Sopenharmony_ci	{"INTC1063"},
4362306a36Sopenharmony_ci	{"INTC1064"},
4462306a36Sopenharmony_ci	{"INTC1065"},
4562306a36Sopenharmony_ci	{"INTC1066"},
4662306a36Sopenharmony_ci	{"INTC10A0"},
4762306a36Sopenharmony_ci	{"INTC10A1"},
4862306a36Sopenharmony_ci	{"INTC10A2"},
4962306a36Sopenharmony_ci	{"INTC10A3"},
5062306a36Sopenharmony_ci	{"INTC10A4"},
5162306a36Sopenharmony_ci	{"INTC10A5"},
5262306a36Sopenharmony_ci	{""},
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistatic int int340x_thermal_handler_attach(struct acpi_device *adev,
5662306a36Sopenharmony_ci					const struct acpi_device_id *id)
5762306a36Sopenharmony_ci{
5862306a36Sopenharmony_ci	if (IS_ENABLED(CONFIG_INT340X_THERMAL))
5962306a36Sopenharmony_ci		acpi_create_platform_device(adev, NULL);
6062306a36Sopenharmony_ci	/* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */
6162306a36Sopenharmony_ci	else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) &&
6262306a36Sopenharmony_ci		 id->driver_data == INT3401_DEVICE)
6362306a36Sopenharmony_ci		acpi_create_platform_device(adev, NULL);
6462306a36Sopenharmony_ci	return 1;
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cistatic struct acpi_scan_handler int340x_thermal_handler = {
6862306a36Sopenharmony_ci	.ids = int340x_thermal_device_ids,
6962306a36Sopenharmony_ci	.attach = int340x_thermal_handler_attach,
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_civoid __init acpi_int340x_thermal_init(void)
7362306a36Sopenharmony_ci{
7462306a36Sopenharmony_ci	acpi_scan_add_handler(&int340x_thermal_handler);
7562306a36Sopenharmony_ci}
76