mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-16 06:35:39 +08:00
platform/x86: thinkpad_acpi: Fix warning about deprecated hwmon_device_register
Use hwmon_device_register_with_groups instead of deprecated hwmon_device_register and fix a dmesg warning. This patch however changes the userspace API. hwmon_device_register_with_groups takes `hwmon' name as an argument and creates a name file in the `hwmon' device, not in the `platform_device'. This allows us to remove custom `name' device attribute, but in order to make lm-sensors happy we also have to move fans and thermal attributes to the `hwmon' device. Even though this patch changes userspace API, it's still compatible with the lm-sensors. Starting with lm-sensors 3.0 (circa 2007), it looks at both hwmon and the backing device for the name and other attributes. before: $ cat /sys/devices/platform/thinkpad_hwmon/{name,fan1_input} thinkpad 2007 $ cat /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/{name,fan1_input} cat: /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/name: No such file or directory cat: /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/fan1_input: No such file or directory $ cat /sys/class/hwmon/hwmon1/{name,fan1_input} cat: /sys/class/hwmon/hwmon1/name: No such file or directory cat: /sys/class/hwmon/hwmon1/fan1_input: No such file or directory $ sensors thinkpad-isa-0000 Adapter: ISA adapter fan1: 3533 RPM after: $ cat /sys/devices/platform/thinkpad_hwmon/{name,fan1_input} cat: /sys/devices/platform/thinkpad_hwmon/name: No such file or directory cat: /sys/devices/platform/thinkpad_hwmon/fan1_input: No such file or directory $ cat /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/{name,fan1_input} thinkpad 3478 $ cat /sys/class/hwmon/hwmon1/{name,fan1_input} thinkpad 3478 $ sensors thinkpad-isa-0000 Adapter: ISA adapter fan1: 3489 RPM $ sensors -v sensors version 3.4.0 with libsensors version 3.4.0 Signed-off-by: Stanislav Fomichev <kernel@fomichev.me> [dvhart: cleaned up commit log, bumped version to 4.14 in the doc change] Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
This commit is contained in:
parent
6afa1e2a32
commit
6b99e3569b
@ -121,8 +121,9 @@ space, for 2.6.23+ this is /sys/devices/platform/thinkpad_acpi/.
|
||||
Sysfs device attributes for the sensors and fan are on the
|
||||
thinkpad_hwmon device's sysfs attribute space, but you should locate it
|
||||
looking for a hwmon device with the name attribute of "thinkpad", or
|
||||
better yet, through libsensors.
|
||||
|
||||
better yet, through libsensors. For 4.14+ sysfs attributes were moved to the
|
||||
hwmon device (/sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon? or
|
||||
/sys/class/hwmon/hwmon?).
|
||||
|
||||
Driver version
|
||||
--------------
|
||||
@ -1478,3 +1479,7 @@ Sysfs interface changelog:
|
||||
0x020700: Support for mute-only mixers.
|
||||
Volume control in read-only mode by default.
|
||||
Marker for ALSA mixer support.
|
||||
|
||||
0x030000: Thermal and fan sysfs attributes were moved to the hwmon
|
||||
device instead of being attached to the backing platform
|
||||
device.
|
||||
|
@ -24,7 +24,7 @@
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#define TPACPI_VERSION "0.25"
|
||||
#define TPACPI_SYSFS_VERSION 0x020700
|
||||
#define TPACPI_SYSFS_VERSION 0x030000
|
||||
|
||||
/*
|
||||
* Changelog:
|
||||
@ -6342,7 +6342,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||
|
||||
switch (thermal_read_mode) {
|
||||
case TPACPI_THERMAL_TPEC_16:
|
||||
res = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
res = sysfs_create_group(&tpacpi_hwmon->kobj,
|
||||
&thermal_temp_input16_group);
|
||||
if (res)
|
||||
return res;
|
||||
@ -6350,7 +6350,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||
case TPACPI_THERMAL_TPEC_8:
|
||||
case TPACPI_THERMAL_ACPI_TMP07:
|
||||
case TPACPI_THERMAL_ACPI_UPDT:
|
||||
res = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
res = sysfs_create_group(&tpacpi_hwmon->kobj,
|
||||
&thermal_temp_input8_group);
|
||||
if (res)
|
||||
return res;
|
||||
@ -6367,13 +6367,13 @@ static void thermal_exit(void)
|
||||
{
|
||||
switch (thermal_read_mode) {
|
||||
case TPACPI_THERMAL_TPEC_16:
|
||||
sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
sysfs_remove_group(&tpacpi_hwmon->kobj,
|
||||
&thermal_temp_input16_group);
|
||||
break;
|
||||
case TPACPI_THERMAL_TPEC_8:
|
||||
case TPACPI_THERMAL_ACPI_TMP07:
|
||||
case TPACPI_THERMAL_ACPI_UPDT:
|
||||
sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
sysfs_remove_group(&tpacpi_hwmon->kobj,
|
||||
&thermal_temp_input8_group);
|
||||
break;
|
||||
case TPACPI_THERMAL_NONE:
|
||||
@ -8696,7 +8696,7 @@ static int __init fan_init(struct ibm_init_struct *iibm)
|
||||
fan_attributes[ARRAY_SIZE(fan_attributes)-2] =
|
||||
&dev_attr_fan2_input.attr;
|
||||
}
|
||||
rc = sysfs_create_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
rc = sysfs_create_group(&tpacpi_hwmon->kobj,
|
||||
&fan_attr_group);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
@ -8704,7 +8704,7 @@ static int __init fan_init(struct ibm_init_struct *iibm)
|
||||
rc = driver_create_file(&tpacpi_hwmon_pdriver.driver,
|
||||
&driver_attr_fan_watchdog);
|
||||
if (rc < 0) {
|
||||
sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj,
|
||||
sysfs_remove_group(&tpacpi_hwmon->kobj,
|
||||
&fan_attr_group);
|
||||
return rc;
|
||||
}
|
||||
@ -8719,7 +8719,7 @@ static void fan_exit(void)
|
||||
"cancelling any pending fan watchdog tasks\n");
|
||||
|
||||
/* FIXME: can we really do this unconditionally? */
|
||||
sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj, &fan_attr_group);
|
||||
sysfs_remove_group(&tpacpi_hwmon->kobj, &fan_attr_group);
|
||||
driver_remove_file(&tpacpi_hwmon_pdriver.driver,
|
||||
&driver_attr_fan_watchdog);
|
||||
|
||||
@ -9149,16 +9149,6 @@ static void hotkey_driver_event(const unsigned int scancode)
|
||||
tpacpi_driver_event(TP_HKEY_EV_HOTKEY_BASE + scancode);
|
||||
}
|
||||
|
||||
/* sysfs name ---------------------------------------------------------- */
|
||||
static ssize_t thinkpad_acpi_pdev_name_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%s\n", TPACPI_NAME);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(name, S_IRUGO, thinkpad_acpi_pdev_name_show, NULL);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/* /proc support */
|
||||
@ -9696,8 +9686,6 @@ static void thinkpad_acpi_module_exit(void)
|
||||
if (tpacpi_hwmon)
|
||||
hwmon_device_unregister(tpacpi_hwmon);
|
||||
|
||||
if (tp_features.sensors_pdev_attrs_registered)
|
||||
device_remove_file(&tpacpi_sensors_pdev->dev, &dev_attr_name);
|
||||
if (tpacpi_sensors_pdev)
|
||||
platform_device_unregister(tpacpi_sensors_pdev);
|
||||
if (tpacpi_pdev)
|
||||
@ -9818,14 +9806,10 @@ static int __init thinkpad_acpi_module_init(void)
|
||||
thinkpad_acpi_module_exit();
|
||||
return ret;
|
||||
}
|
||||
ret = device_create_file(&tpacpi_sensors_pdev->dev, &dev_attr_name);
|
||||
if (ret) {
|
||||
pr_err("unable to create sysfs hwmon device attributes\n");
|
||||
thinkpad_acpi_module_exit();
|
||||
return ret;
|
||||
}
|
||||
tp_features.sensors_pdev_attrs_registered = 1;
|
||||
tpacpi_hwmon = hwmon_device_register(&tpacpi_sensors_pdev->dev);
|
||||
tpacpi_hwmon = hwmon_device_register_with_groups(
|
||||
&tpacpi_sensors_pdev->dev, TPACPI_NAME, NULL, NULL);
|
||||
|
||||
if (IS_ERR(tpacpi_hwmon)) {
|
||||
ret = PTR_ERR(tpacpi_hwmon);
|
||||
tpacpi_hwmon = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user