Messages in this thread Patch in this message | | | From | Ravi Chandra Sadineni <> | Subject | [PATCH 2/2 V2] power:sysfs: Expose device wakeup_event_count. | Date | Mon, 22 Jul 2019 15:33:37 -0700 |
| |
Device level event_count can help user level daemon to track if a praticular device has seen an wake interrupt during a suspend resume cycle. Thus expose it via sysfs.
Signed-off-by: Ravi Chandra Sadineni <ravisadineni@chromium.org> --- V2: Address comments from patchset 1.
Documentation/ABI/testing/sysfs-devices-power | 11 ++++++++++ drivers/base/power/sysfs.c | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-devices-power b/Documentation/ABI/testing/sysfs-devices-power index 1ca04b4f0489..abae0e8106d2 100644 --- a/Documentation/ABI/testing/sysfs-devices-power +++ b/Documentation/ABI/testing/sysfs-devices-power @@ -89,6 +89,17 @@ Description: attribute is not present. If the device is not enabled to wake up the system from sleep states, this attribute is empty. +What: /sys/devices/.../power/wakeup_event_count +Date: July 2019 +Contact: Ravi Chandra sadineni <ravisadineni@chromium.org> +Description: + The /sys/devices/.../wakeup_event_count attribute contains the + number of signaled wakeup events associated with the device. + This attribute is read-only. If the device is not capable to + wake up the system from sleep states, this attribute is not + present. If the device is not enabled to wake up the system + from sleep states, this attribute returns an empty line. + What: /sys/devices/.../power/wakeup_active_count Date: September 2010 Contact: Rafael J. Wysocki <rjw@rjwysocki.net> diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f42044d9711c..cbb9768b10e8 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c @@ -357,6 +357,26 @@ static ssize_t wakeup_count_show(struct device *dev, static DEVICE_ATTR_RO(wakeup_count); +static ssize_t wakeup_event_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned long count = 0; + bool enabled = false; + + spin_lock_irq(&dev->power.lock); + if (dev->power.wakeup) { + count = dev->power.wakeup->event_count; + enabled = true; + } + spin_unlock_irq(&dev->power.lock); + if (enabled) + return sprintf(buf, "%lu\n", count); + else + return sprintf(buf, "\n"); +} + +static DEVICE_ATTR_RO(wakeup_event_count); + static ssize_t wakeup_active_count_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -561,6 +581,7 @@ static struct attribute *wakeup_attrs[] = { #ifdef CONFIG_PM_SLEEP &dev_attr_wakeup.attr, &dev_attr_wakeup_count.attr, + &dev_attr_wakeup_event_count.attr, &dev_attr_wakeup_active_count.attr, &dev_attr_wakeup_expire_count.attr, &dev_attr_wakeup_active.attr, -- 2.20.1
| |