| 1 | // SPDX-License-Identifier: GPL-2.0-only | 
|---|
| 2 | /* | 
|---|
| 3 | * ACPI support for int340x thermal drivers | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright (C) 2014, Intel Corporation | 
|---|
| 6 | * Authors: Zhang Rui <rui.zhang@intel.com> | 
|---|
| 7 | */ | 
|---|
| 8 |  | 
|---|
| 9 | #include <linux/acpi.h> | 
|---|
| 10 | #include <linux/module.h> | 
|---|
| 11 |  | 
|---|
| 12 | #include "../internal.h" | 
|---|
| 13 |  | 
|---|
| 14 | #define INT3401_DEVICE 0X01 | 
|---|
| 15 | static const struct acpi_device_id int340x_thermal_device_ids[] = { | 
|---|
| 16 | { "INT3400"}, | 
|---|
| 17 | {.id: "INT3401", INT3401_DEVICE}, | 
|---|
| 18 | {.id: "INT3402"}, | 
|---|
| 19 | {.id: "INT3403"}, | 
|---|
| 20 | {.id: "INT3404"}, | 
|---|
| 21 | {.id: "INT3406"}, | 
|---|
| 22 | {.id: "INT3407"}, | 
|---|
| 23 | {.id: "INT3408"}, | 
|---|
| 24 | {.id: "INT3409"}, | 
|---|
| 25 | {.id: "INT340A"}, | 
|---|
| 26 | {.id: "INT340B"}, | 
|---|
| 27 | {.id: "INT3532"}, | 
|---|
| 28 | {.id: "INTC1040"}, | 
|---|
| 29 | {.id: "INTC1041"}, | 
|---|
| 30 | {.id: "INTC1042"}, | 
|---|
| 31 | {.id: "INTC1043"}, | 
|---|
| 32 | {.id: "INTC1044"}, | 
|---|
| 33 | {.id: "INTC1045"}, | 
|---|
| 34 | {.id: "INTC1046"}, | 
|---|
| 35 | {.id: "INTC1047"}, | 
|---|
| 36 | {.id: "INTC1048"}, | 
|---|
| 37 | {.id: "INTC1049"}, | 
|---|
| 38 | {.id: "INTC1050"}, | 
|---|
| 39 | {.id: "INTC1060"}, | 
|---|
| 40 | {.id: "INTC1061"}, | 
|---|
| 41 | {.id: "INTC1062"}, | 
|---|
| 42 | {.id: "INTC1063"}, | 
|---|
| 43 | {.id: "INTC1064"}, | 
|---|
| 44 | {.id: "INTC1065"}, | 
|---|
| 45 | {.id: "INTC1066"}, | 
|---|
| 46 | {.id: "INTC1068"}, | 
|---|
| 47 | {.id: "INTC1069"}, | 
|---|
| 48 | {.id: "INTC106A"}, | 
|---|
| 49 | {.id: "INTC106B"}, | 
|---|
| 50 | {.id: "INTC106C"}, | 
|---|
| 51 | {.id: "INTC106D"}, | 
|---|
| 52 | {.id: "INTC10A0"}, | 
|---|
| 53 | {.id: "INTC10A1"}, | 
|---|
| 54 | {.id: "INTC10A2"}, | 
|---|
| 55 | {.id: "INTC10A3"}, | 
|---|
| 56 | {.id: "INTC10A4"}, | 
|---|
| 57 | {.id: "INTC10A5"}, | 
|---|
| 58 | {.id: "INTC10D4"}, | 
|---|
| 59 | {.id: "INTC10D5"}, | 
|---|
| 60 | {.id: "INTC10D6"}, | 
|---|
| 61 | {.id: "INTC10D7"}, | 
|---|
| 62 | {.id: "INTC10D8"}, | 
|---|
| 63 | {.id: "INTC10D9"}, | 
|---|
| 64 | {.id: "INTC10FC"}, | 
|---|
| 65 | {.id: "INTC10FD"}, | 
|---|
| 66 | {.id: "INTC10FE"}, | 
|---|
| 67 | {.id: "INTC10FF"}, | 
|---|
| 68 | {.id: "INTC1100"}, | 
|---|
| 69 | {.id: "INTC1101"}, | 
|---|
| 70 | {.id: "INTC1102"}, | 
|---|
| 71 | {.id: ""}, | 
|---|
| 72 | }; | 
|---|
| 73 |  | 
|---|
| 74 | static int int340x_thermal_handler_attach(struct acpi_device *adev, | 
|---|
| 75 | const struct acpi_device_id *id) | 
|---|
| 76 | { | 
|---|
| 77 | if (IS_ENABLED(CONFIG_INT340X_THERMAL)) | 
|---|
| 78 | acpi_create_platform_device(adev, NULL); | 
|---|
| 79 | /* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */ | 
|---|
| 80 | else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) && | 
|---|
| 81 | id->driver_data == INT3401_DEVICE) | 
|---|
| 82 | acpi_create_platform_device(adev, NULL); | 
|---|
| 83 | return 1; | 
|---|
| 84 | } | 
|---|
| 85 |  | 
|---|
| 86 | static struct acpi_scan_handler int340x_thermal_handler = { | 
|---|
| 87 | .ids = int340x_thermal_device_ids, | 
|---|
| 88 | .attach = int340x_thermal_handler_attach, | 
|---|
| 89 | }; | 
|---|
| 90 |  | 
|---|
| 91 | void __init acpi_int340x_thermal_init(void) | 
|---|
| 92 | { | 
|---|
| 93 | acpi_scan_add_handler(handler: &int340x_thermal_handler); | 
|---|
| 94 | } | 
|---|
| 95 |  | 
|---|