// SPDX-License-Identifier: GPL-2.0-only /* * INT3401 processor thermal device * Copyright (c) 2020, Intel Corporation. */ #include #include #include #include #include #include "int340x_thermal_zone.h" #include "processor_thermal_device.h" static const struct acpi_device_id int3401_device_ids[] = { {"INT3401", 0}, {"", 0}, }; MODULE_DEVICE_TABLE(acpi, int3401_device_ids); static int int3401_add(struct platform_device *pdev) { struct proc_thermal_device *proc_priv; int ret; proc_priv = devm_kzalloc(&pdev->dev, sizeof(*proc_priv), GFP_KERNEL); if (!proc_priv) return -ENOMEM; ret = proc_thermal_add(&pdev->dev, proc_priv); if (ret) return ret; platform_set_drvdata(pdev, proc_priv); return ret; } static int int3401_remove(struct platform_device *pdev) { proc_thermal_remove(platform_get_drvdata(pdev)); return 0; } #ifdef CONFIG_PM_SLEEP static int int3401_thermal_resume(struct device *dev) { return proc_thermal_resume(dev); } #else #define int3401_thermal_resume NULL #endif static SIMPLE_DEV_PM_OPS(int3401_proc_thermal_pm, NULL, int3401_thermal_resume); static struct platform_driver int3401_driver = { .probe = int3401_add, .remove = int3401_remove, .driver = { .name = "int3401 thermal", .acpi_match_table = int3401_device_ids, .pm = &int3401_proc_thermal_pm, }, }; static int __init proc_thermal_init(void) { return platform_driver_register(&int3401_driver); } static void __exit proc_thermal_exit(void) { platform_driver_unregister(&int3401_driver); } module_init(proc_thermal_init); module_exit(proc_thermal_exit); MODULE_AUTHOR("Srinivas Pandruvada "); MODULE_DESCRIPTION("Processor Thermal Reporting Device Driver"); MODULE_LICENSE("GPL v2");