1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * INT3401 processor thermal device |
4 | * Copyright (c) 2020, Intel Corporation. |
5 | */ |
6 | #include <linux/acpi.h> |
7 | #include <linux/kernel.h> |
8 | #include <linux/module.h> |
9 | #include <linux/platform_device.h> |
10 | #include <linux/thermal.h> |
11 | |
12 | #include "int340x_thermal_zone.h" |
13 | #include "processor_thermal_device.h" |
14 | |
15 | static const struct acpi_device_id int3401_device_ids[] = { |
16 | {"INT3401" , 0}, |
17 | {"" , 0}, |
18 | }; |
19 | MODULE_DEVICE_TABLE(acpi, int3401_device_ids); |
20 | |
21 | static int int3401_add(struct platform_device *pdev) |
22 | { |
23 | struct proc_thermal_device *proc_priv; |
24 | int ret; |
25 | |
26 | proc_priv = devm_kzalloc(dev: &pdev->dev, size: sizeof(*proc_priv), GFP_KERNEL); |
27 | if (!proc_priv) |
28 | return -ENOMEM; |
29 | |
30 | ret = proc_thermal_add(dev: &pdev->dev, priv: proc_priv); |
31 | if (ret) |
32 | return ret; |
33 | |
34 | platform_set_drvdata(pdev, data: proc_priv); |
35 | |
36 | return ret; |
37 | } |
38 | |
39 | static void int3401_remove(struct platform_device *pdev) |
40 | { |
41 | proc_thermal_remove(proc_priv: platform_get_drvdata(pdev)); |
42 | } |
43 | |
44 | #ifdef CONFIG_PM_SLEEP |
45 | static int int3401_thermal_suspend(struct device *dev) |
46 | { |
47 | return proc_thermal_suspend(dev); |
48 | } |
49 | static int int3401_thermal_resume(struct device *dev) |
50 | { |
51 | return proc_thermal_resume(dev); |
52 | } |
53 | #else |
54 | #define int3401_thermal_suspend NULL |
55 | #define int3401_thermal_resume NULL |
56 | #endif |
57 | |
58 | static SIMPLE_DEV_PM_OPS(int3401_proc_thermal_pm, int3401_thermal_suspend, |
59 | int3401_thermal_resume); |
60 | |
61 | static struct platform_driver int3401_driver = { |
62 | .probe = int3401_add, |
63 | .remove_new = int3401_remove, |
64 | .driver = { |
65 | .name = "int3401 thermal" , |
66 | .acpi_match_table = int3401_device_ids, |
67 | .pm = &int3401_proc_thermal_pm, |
68 | }, |
69 | }; |
70 | |
71 | module_platform_driver(int3401_driver); |
72 | |
73 | MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>" ); |
74 | MODULE_DESCRIPTION("Processor Thermal Reporting Device Driver" ); |
75 | MODULE_LICENSE("GPL v2" ); |
76 | |