Skip to content

Commit 3230bbf

Browse files
committed
ACPI: introduce ACPI int340x thermal scan handler
Newer laptops and tablets that use ACPI may have thermal sensors and other devices with thermal control capabilities outside the core CPU/SOC, for thermal safety reasons. They are exposed for the OS to use via 1) INT3400 ACPI device object as the master. 2) INT3401 ~ INT340B ACPI device objects as the slaves. This patch introduces a scan handler to enumerate the INT3400 ACPI device object to platform bus, and prevent its slaves from being enumerated before the controller driver being probed. Signed-off-by: Zhang Rui <[email protected]>
1 parent 52addcf commit 3230bbf

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed

drivers/acpi/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ acpi-y += pci_root.o pci_link.o pci_irq.o
4343
acpi-y += acpi_lpss.o
4444
acpi-y += acpi_platform.o
4545
acpi-y += acpi_pnp.o
46+
acpi-y += int340x_thermal.o
4647
acpi-y += power.o
4748
acpi-y += event.o
4849
acpi-y += sysfs.o

drivers/acpi/int340x_thermal.c

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* ACPI support for int340x thermal drivers
3+
*
4+
* Copyright (C) 2014, Intel Corporation
5+
* Authors: Zhang Rui <[email protected]>
6+
*
7+
* This program is free software; you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License version 2 as
9+
* published by the Free Software Foundation.
10+
*/
11+
12+
#include <linux/acpi.h>
13+
#include <linux/module.h>
14+
15+
#include "internal.h"
16+
17+
#define DO_ENUMERATION 0x01
18+
static const struct acpi_device_id int340x_thermal_device_ids[] = {
19+
{"INT3400", DO_ENUMERATION },
20+
{"INT3401"},
21+
{"INT3402"},
22+
{"INT3403"},
23+
{"INT3404"},
24+
{"INT3406"},
25+
{"INT3407"},
26+
{"INT3408"},
27+
{"INT3409"},
28+
{"INT340A"},
29+
{"INT340B"},
30+
{""},
31+
};
32+
33+
static int int340x_thermal_handler_attach(struct acpi_device *adev,
34+
const struct acpi_device_id *id)
35+
{
36+
#ifdef CONFIG_INT340X_THERMAL
37+
if (id->driver_data == DO_ENUMERATION)
38+
acpi_create_platform_device(adev);
39+
#endif
40+
return 1;
41+
}
42+
43+
static struct acpi_scan_handler int340x_thermal_handler = {
44+
.ids = int340x_thermal_device_ids,
45+
.attach = int340x_thermal_handler_attach,
46+
};
47+
48+
void __init acpi_int340x_thermal_init(void)
49+
{
50+
acpi_scan_add_handler(&int340x_thermal_handler);
51+
}

drivers/acpi/internal.h

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ void acpi_pci_link_init(void);
3131
void acpi_processor_init(void);
3232
void acpi_platform_init(void);
3333
void acpi_pnp_init(void);
34+
void acpi_int340x_thermal_init(void);
3435
int acpi_sysfs_init(void);
3536
void acpi_container_init(void);
3637
void acpi_memory_hotplug_init(void);

drivers/acpi/scan.c

+1
Original file line numberDiff line numberDiff line change
@@ -2306,6 +2306,7 @@ int __init acpi_scan_init(void)
23062306
acpi_container_init();
23072307
acpi_memory_hotplug_init();
23082308
acpi_pnp_init();
2309+
acpi_int340x_thermal_init();
23092310

23102311
mutex_lock(&acpi_scan_lock);
23112312
/*

drivers/thermal/Kconfig

+17
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,23 @@ config INTEL_SOC_DTS_THERMAL
234234
notification methods.The other trip is a critical trip point, which
235235
was set by the driver based on the TJ MAX temperature.
236236

237+
config INT340X_THERMAL
238+
bool
239+
depends on X86 && ACPI
240+
help
241+
Newer laptops and tablets that use ACPI may have thermal sensors and
242+
other devices with thermal control capabilities outside the core
243+
CPU/SOC, for thermal safety reasons.
244+
They are exposed for the OS to use via the INT3400 ACPI device object
245+
as the master, and INT3401~INT340B ACPI device objects as the slaves.
246+
Enable this to expose the temperature information and cooling ability
247+
from these objects to userspace via the normal thermal framework.
248+
This means that a wide range of applications and GUI widgets can show
249+
the information to the user or use this information for making
250+
decisions. For example, the Intel Thermal Daemon can use this
251+
information to allow the user to select his laptop to run without
252+
turning on the fans.
253+
237254
menu "Texas Instruments thermal drivers"
238255
source "drivers/thermal/ti-soc-thermal/Kconfig"
239256
endmenu

0 commit comments

Comments
 (0)