Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d61e2944 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Thomas Gleixner
Browse files

genirq: Add wakeup sysfs node to show IRQ wakeup state



Surprisingly there is no simple way to see if the IRQ line in question
is wakeup source or not.

Note that wakeup might be an OOB (out-of-band) source like GPIO line
which makes things slightly more complicated.

Add a sysfs node to cover this case.

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>
Link: https://lkml.kernel.org/r/20180226155043.67937-1-andriy.shevchenko@linux.intel.com
parent e69c61dd
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -51,3 +51,10 @@ Date: September 2016
KernelVersion:	4.9
Contact:	Craig Gallek <kraig@google.com>
Description:	The type of the interrupt.  Either the string 'level' or 'edge'.

What:		/sys/kernel/irq/<irq>/wakeup
Date:		March 2018
KernelVersion:	4.17
Contact:	Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Description:	The wakeup state of the interrupt. Either the string
		'enabled' or 'disabled'.
+17 −0
Original line number Diff line number Diff line
@@ -210,6 +210,22 @@ static ssize_t type_show(struct kobject *kobj,
}
IRQ_ATTR_RO(type);

static ssize_t wakeup_show(struct kobject *kobj,
			   struct kobj_attribute *attr, char *buf)
{
	struct irq_desc *desc = container_of(kobj, struct irq_desc, kobj);
	ssize_t ret = 0;

	raw_spin_lock_irq(&desc->lock);
	ret = sprintf(buf, "%s\n",
		      irqd_is_wakeup_set(&desc->irq_data) ? "enabled" : "disabled");
	raw_spin_unlock_irq(&desc->lock);

	return ret;

}
IRQ_ATTR_RO(wakeup);

static ssize_t name_show(struct kobject *kobj,
			 struct kobj_attribute *attr, char *buf)
{
@@ -253,6 +269,7 @@ static struct attribute *irq_attrs[] = {
	&chip_name_attr.attr,
	&hwirq_attr.attr,
	&type_attr.attr,
	&wakeup_attr.attr,
	&name_attr.attr,
	&actions_attr.attr,
	NULL