18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * ACPI support for int340x thermal drivers
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014, Intel Corporation
68c2ecf20Sopenharmony_ci * Authors: Zhang Rui <rui.zhang@intel.com>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/acpi.h>
108c2ecf20Sopenharmony_ci#include <linux/module.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include "../internal.h"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#define INT3401_DEVICE 0X01
158c2ecf20Sopenharmony_cistatic const struct acpi_device_id int340x_thermal_device_ids[] = {
168c2ecf20Sopenharmony_ci	{"INT3400"},
178c2ecf20Sopenharmony_ci	{"INT3401", INT3401_DEVICE},
188c2ecf20Sopenharmony_ci	{"INT3402"},
198c2ecf20Sopenharmony_ci	{"INT3403"},
208c2ecf20Sopenharmony_ci	{"INT3404"},
218c2ecf20Sopenharmony_ci	{"INT3406"},
228c2ecf20Sopenharmony_ci	{"INT3407"},
238c2ecf20Sopenharmony_ci	{"INT3408"},
248c2ecf20Sopenharmony_ci	{"INT3409"},
258c2ecf20Sopenharmony_ci	{"INT340A"},
268c2ecf20Sopenharmony_ci	{"INT340B"},
278c2ecf20Sopenharmony_ci	{"INTC1040"},
288c2ecf20Sopenharmony_ci	{"INTC1041"},
298c2ecf20Sopenharmony_ci	{"INTC1043"},
308c2ecf20Sopenharmony_ci	{"INTC1044"},
318c2ecf20Sopenharmony_ci	{"INTC1045"},
328c2ecf20Sopenharmony_ci	{"INTC1046"},
338c2ecf20Sopenharmony_ci	{"INTC1047"},
348c2ecf20Sopenharmony_ci	{"INTC1048"},
358c2ecf20Sopenharmony_ci	{"INTC1049"},
368c2ecf20Sopenharmony_ci	{"INTC1060"},
378c2ecf20Sopenharmony_ci	{"INTC1061"},
388c2ecf20Sopenharmony_ci	{""},
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cistatic int int340x_thermal_handler_attach(struct acpi_device *adev,
428c2ecf20Sopenharmony_ci					const struct acpi_device_id *id)
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	if (IS_ENABLED(CONFIG_INT340X_THERMAL))
458c2ecf20Sopenharmony_ci		acpi_create_platform_device(adev, NULL);
468c2ecf20Sopenharmony_ci	/* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */
478c2ecf20Sopenharmony_ci	else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) &&
488c2ecf20Sopenharmony_ci		 id->driver_data == INT3401_DEVICE)
498c2ecf20Sopenharmony_ci		acpi_create_platform_device(adev, NULL);
508c2ecf20Sopenharmony_ci	return 1;
518c2ecf20Sopenharmony_ci}
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_cistatic struct acpi_scan_handler int340x_thermal_handler = {
548c2ecf20Sopenharmony_ci	.ids = int340x_thermal_device_ids,
558c2ecf20Sopenharmony_ci	.attach = int340x_thermal_handler_attach,
568c2ecf20Sopenharmony_ci};
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_civoid __init acpi_int340x_thermal_init(void)
598c2ecf20Sopenharmony_ci{
608c2ecf20Sopenharmony_ci	acpi_scan_add_handler(&int340x_thermal_handler);
618c2ecf20Sopenharmony_ci}
62