hwmon: (occ) Add sysfs entry for IPS (Idle Power Saver) status
BMC control applications need to check the Idle Power Saver status byte returned by the OCC poll response, so export it in sysfs with the other OCC-specific data. Signed-off-by: Eddie James <eajames@linux.ibm.com> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/20220215151022.7498-2-eajames@linux.ibm.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Родитель
567e77a2c2
Коммит
6109c3e190
|
@ -119,6 +119,7 @@ struct occ {
|
|||
u8 prev_stat;
|
||||
u8 prev_ext_stat;
|
||||
u8 prev_occs_present;
|
||||
u8 prev_ips_status;
|
||||
};
|
||||
|
||||
int occ_setup(struct occ *occ, const char *name);
|
||||
|
|
|
@ -63,6 +63,9 @@ static ssize_t occ_sysfs_show(struct device *dev,
|
|||
else
|
||||
val = 1;
|
||||
break;
|
||||
case 8:
|
||||
val = header->ips_status;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -88,6 +91,7 @@ static SENSOR_DEVICE_ATTR(occ_mem_throttle, 0444, occ_sysfs_show, NULL, 4);
|
|||
static SENSOR_DEVICE_ATTR(occ_quick_pwr_drop, 0444, occ_sysfs_show, NULL, 5);
|
||||
static SENSOR_DEVICE_ATTR(occ_state, 0444, occ_sysfs_show, NULL, 6);
|
||||
static SENSOR_DEVICE_ATTR(occs_present, 0444, occ_sysfs_show, NULL, 7);
|
||||
static SENSOR_DEVICE_ATTR(occ_ips_status, 0444, occ_sysfs_show, NULL, 8);
|
||||
static DEVICE_ATTR_RO(occ_error);
|
||||
|
||||
static struct attribute *occ_attributes[] = {
|
||||
|
@ -99,6 +103,7 @@ static struct attribute *occ_attributes[] = {
|
|||
&sensor_dev_attr_occ_quick_pwr_drop.dev_attr.attr,
|
||||
&sensor_dev_attr_occ_state.dev_attr.attr,
|
||||
&sensor_dev_attr_occs_present.dev_attr.attr,
|
||||
&sensor_dev_attr_occ_ips_status.dev_attr.attr,
|
||||
&dev_attr_occ_error.attr,
|
||||
NULL
|
||||
};
|
||||
|
@ -162,6 +167,11 @@ void occ_sysfs_poll_done(struct occ *occ)
|
|||
sysfs_notify(&occ->bus_dev->kobj, NULL, name);
|
||||
}
|
||||
|
||||
if (header->ips_status != occ->prev_ips_status) {
|
||||
name = sensor_dev_attr_occ_ips_status.dev_attr.attr.name;
|
||||
sysfs_notify(&occ->bus_dev->kobj, NULL, name);
|
||||
}
|
||||
|
||||
if (occ->error && occ->error != occ->prev_error) {
|
||||
name = dev_attr_occ_error.attr.name;
|
||||
sysfs_notify(&occ->bus_dev->kobj, NULL, name);
|
||||
|
@ -174,6 +184,7 @@ done:
|
|||
occ->prev_stat = header->status;
|
||||
occ->prev_ext_stat = header->ext_status;
|
||||
occ->prev_occs_present = header->occs_present;
|
||||
occ->prev_ips_status = header->ips_status;
|
||||
}
|
||||
|
||||
int occ_setup_sysfs(struct occ *occ)
|
||||
|
|
Загрузка…
Ссылка в новой задаче