Hi, On 4/13/21 9:21 AM, Hans de Goede wrote: > On EC version 3, the first 2 temperature sensors are always CPU and GPU > add labels for these. > > This changes e.g. the "sensors" command output on a X1C8 from: > > thinkpad-isa-0000 > Adapter: ISA adapter > fan1: 2694 RPM > temp1: +42.0°C > temp2: N/A > temp3: +33.0°C > temp4: +0.0°C > temp5: +35.0°C > temp6: +42.0°C > temp7: +42.0°C > temp8: N/A > > into: > > thinkpad-isa-0000 > Adapter: ISA adapter > fan1: 2694 RPM > CPU: +42.0°C > GPU: N/A > temp3: +33.0°C > temp4: +0.0°C > temp5: +35.0°C > temp6: +42.0°C > temp7: +42.0°C > temp8: N/A > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Since there have been no remarks (other then Andy's ABI question) on this and a new-merge window is approaching I've merged this into for-next now. Regards, Hans > --- > drivers/platform/x86/thinkpad_acpi.c | 72 ++++++++++++++++++---------- > 1 file changed, 47 insertions(+), 25 deletions(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c > index ec98089d98c9..dd60c9397d35 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -6296,6 +6296,8 @@ struct ibm_thermal_sensors_struct { > }; > > static enum thermal_access_mode thermal_read_mode; > +static const struct attribute_group *thermal_attr_group; > +static bool thermal_use_labels; > > /* idx is zero-based */ > static int thermal_get_sensor(int idx, s32 *value) > @@ -6478,6 +6480,28 @@ static const struct attribute_group thermal_temp_input8_group = { > #undef THERMAL_SENSOR_ATTR_TEMP > #undef THERMAL_ATTRS > > +static ssize_t temp1_label_show(struct device *dev, struct device_attribute *attr, char *buf) > +{ > + return sysfs_emit(buf, "CPU\n"); > +} > +static DEVICE_ATTR_RO(temp1_label); > + > +static ssize_t temp2_label_show(struct device *dev, struct device_attribute *attr, char *buf) > +{ > + return sysfs_emit(buf, "GPU\n"); > +} > +static DEVICE_ATTR_RO(temp2_label); > + > +static struct attribute *temp_label_attributes[] = { > + &dev_attr_temp1_label.attr, > + &dev_attr_temp2_label.attr, > + NULL > +}; > + > +static const struct attribute_group temp_label_attr_group = { > + .attrs = temp_label_attributes, > +}; > + > /* --------------------------------------------------------------------- */ > > static int __init thermal_init(struct ibm_init_struct *iibm) > @@ -6533,12 +6557,14 @@ static int __init thermal_init(struct ibm_init_struct *iibm) > thermal_read_mode = TPACPI_THERMAL_NONE; > } > } else { > - if (ver >= 3) > + if (ver >= 3) { > thermal_read_mode = TPACPI_THERMAL_TPEC_8; > - else > + thermal_use_labels = true; > + } else { > thermal_read_mode = > (ta2 != 0) ? > TPACPI_THERMAL_TPEC_16 : TPACPI_THERMAL_TPEC_8; > + } > } > } else if (acpi_tmp7) { > if (tpacpi_is_ibm() && > @@ -6560,44 +6586,40 @@ static int __init thermal_init(struct ibm_init_struct *iibm) > > switch (thermal_read_mode) { > case TPACPI_THERMAL_TPEC_16: > - res = sysfs_create_group(&tpacpi_hwmon->kobj, > - &thermal_temp_input16_group); > - if (res) > - return res; > + thermal_attr_group = &thermal_temp_input16_group; > break; > case TPACPI_THERMAL_TPEC_8: > case TPACPI_THERMAL_ACPI_TMP07: > case TPACPI_THERMAL_ACPI_UPDT: > - res = sysfs_create_group(&tpacpi_hwmon->kobj, > - &thermal_temp_input8_group); > - if (res) > - return res; > + thermal_attr_group = &thermal_temp_input8_group; > break; > case TPACPI_THERMAL_NONE: > default: > return 1; > } > > + res = sysfs_create_group(&tpacpi_hwmon->kobj, thermal_attr_group); > + if (res) > + return res; > + > + if (thermal_use_labels) { > + res = sysfs_create_group(&tpacpi_hwmon->kobj, &temp_label_attr_group); > + if (res) { > + sysfs_remove_group(&tpacpi_hwmon->kobj, thermal_attr_group); > + return res; > + } > + } > + > return 0; > } > > static void thermal_exit(void) > { > - switch (thermal_read_mode) { > - case TPACPI_THERMAL_TPEC_16: > - 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_hwmon->kobj, > - &thermal_temp_input8_group); > - break; > - case TPACPI_THERMAL_NONE: > - default: > - break; > - } > + if (thermal_attr_group) > + sysfs_remove_group(&tpacpi_hwmon->kobj, thermal_attr_group); > + > + if (thermal_use_labels) > + sysfs_remove_group(&tpacpi_hwmon->kobj, &temp_label_attr_group); > } > > static int thermal_read(struct seq_file *m) > _______________________________________________ ibm-acpi-devel mailing list ibm-acpi-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel