Commit 6109c3e1 authored by Eddie James's avatar Eddie James Committed by Guenter Roeck

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: default avatarEddie James <eajames@linux.ibm.com>
Reviewed-by: default avatarJoel Stanley <joel@jms.id.au>
Link: https://lore.kernel.org/r/20220215151022.7498-2-eajames@linux.ibm.comSigned-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 567e77a2
...@@ -119,6 +119,7 @@ struct occ { ...@@ -119,6 +119,7 @@ struct occ {
u8 prev_stat; u8 prev_stat;
u8 prev_ext_stat; u8 prev_ext_stat;
u8 prev_occs_present; u8 prev_occs_present;
u8 prev_ips_status;
}; };
int occ_setup(struct occ *occ, const char *name); int occ_setup(struct occ *occ, const char *name);
......
...@@ -63,6 +63,9 @@ static ssize_t occ_sysfs_show(struct device *dev, ...@@ -63,6 +63,9 @@ static ssize_t occ_sysfs_show(struct device *dev,
else else
val = 1; val = 1;
break; break;
case 8:
val = header->ips_status;
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -88,6 +91,7 @@ static SENSOR_DEVICE_ATTR(occ_mem_throttle, 0444, occ_sysfs_show, NULL, 4); ...@@ -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_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(occ_state, 0444, occ_sysfs_show, NULL, 6);
static SENSOR_DEVICE_ATTR(occs_present, 0444, occ_sysfs_show, NULL, 7); 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 DEVICE_ATTR_RO(occ_error);
static struct attribute *occ_attributes[] = { static struct attribute *occ_attributes[] = {
...@@ -99,6 +103,7 @@ 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_quick_pwr_drop.dev_attr.attr,
&sensor_dev_attr_occ_state.dev_attr.attr, &sensor_dev_attr_occ_state.dev_attr.attr,
&sensor_dev_attr_occs_present.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, &dev_attr_occ_error.attr,
NULL NULL
}; };
...@@ -162,6 +167,11 @@ void occ_sysfs_poll_done(struct occ *occ) ...@@ -162,6 +167,11 @@ void occ_sysfs_poll_done(struct occ *occ)
sysfs_notify(&occ->bus_dev->kobj, NULL, name); 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) { if (occ->error && occ->error != occ->prev_error) {
name = dev_attr_occ_error.attr.name; name = dev_attr_occ_error.attr.name;
sysfs_notify(&occ->bus_dev->kobj, NULL, name); sysfs_notify(&occ->bus_dev->kobj, NULL, name);
...@@ -174,6 +184,7 @@ void occ_sysfs_poll_done(struct occ *occ) ...@@ -174,6 +184,7 @@ void occ_sysfs_poll_done(struct occ *occ)
occ->prev_stat = header->status; occ->prev_stat = header->status;
occ->prev_ext_stat = header->ext_status; occ->prev_ext_stat = header->ext_status;
occ->prev_occs_present = header->occs_present; occ->prev_occs_present = header->occs_present;
occ->prev_ips_status = header->ips_status;
} }
int occ_setup_sysfs(struct occ *occ) int occ_setup_sysfs(struct occ *occ)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment