diff options
author | Mark Rutland <mark.rutland@arm.com> | 2015-03-04 15:00:40 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-03-05 19:28:14 -0500 |
commit | 7438b633a6b073d66a3fa3678ec0dd5928caa4af (patch) | |
tree | 2320590721bb63a2aee321b9fc5531fb655effbd /Documentation/power | |
parent | 2c7af5ba65cfb0145ad8e11f856035c10ba0d22c (diff) |
genirq / PM: describe IRQF_COND_SUSPEND
With certain restrictions it is possible for a wakeup device to share
an IRQ with an IRQF_NO_SUSPEND user, and the warnings introduced by
commit cab303be91dc47942bc25de33dc1140123540800 are spurious. The new
IRQF_COND_SUSPEND flag allows drivers to tell the core when these
restrictions are met, allowing spurious warnings to be silenced.
This patch documents how IRQF_COND_SUSPEND is expected to be used,
updating some of the text now made invalid by its addition.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'Documentation/power')
-rw-r--r-- | Documentation/power/suspend-and-interrupts.txt | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Documentation/power/suspend-and-interrupts.txt b/Documentation/power/suspend-and-interrupts.txt index 50493c9284b4..8afb29a8604a 100644 --- a/Documentation/power/suspend-and-interrupts.txt +++ b/Documentation/power/suspend-and-interrupts.txt | |||
@@ -112,8 +112,9 @@ any special interrupt handling logic for it to work. | |||
112 | IRQF_NO_SUSPEND and enable_irq_wake() | 112 | IRQF_NO_SUSPEND and enable_irq_wake() |
113 | ------------------------------------- | 113 | ------------------------------------- |
114 | 114 | ||
115 | There are no valid reasons to use both enable_irq_wake() and the IRQF_NO_SUSPEND | 115 | There are very few valid reasons to use both enable_irq_wake() and the |
116 | flag on the same IRQ. | 116 | IRQF_NO_SUSPEND flag on the same IRQ, and it is never valid to use both for the |
117 | same device. | ||
117 | 118 | ||
118 | First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND | 119 | First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND |
119 | interrupts (interrupt handlers are invoked after suspend_device_irqs()) are | 120 | interrupts (interrupt handlers are invoked after suspend_device_irqs()) are |
@@ -122,4 +123,13 @@ handlers are not invoked after suspend_device_irqs()). | |||
122 | 123 | ||
123 | Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not | 124 | Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not |
124 | to individual interrupt handlers, so sharing an IRQ between a system wakeup | 125 | to individual interrupt handlers, so sharing an IRQ between a system wakeup |
125 | interrupt source and an IRQF_NO_SUSPEND interrupt source does not make sense. | 126 | interrupt source and an IRQF_NO_SUSPEND interrupt source does not generally |
127 | make sense. | ||
128 | |||
129 | In rare cases an IRQ can be shared between a wakeup device driver and an | ||
130 | IRQF_NO_SUSPEND user. In order for this to be safe, the wakeup device driver | ||
131 | must be able to discern spurious IRQs from genuine wakeup events (signalling | ||
132 | the latter to the core with pm_system_wakeup()), must use enable_irq_wake() to | ||
133 | ensure that the IRQ will function as a wakeup source, and must request the IRQ | ||
134 | with IRQF_COND_SUSPEND to tell the core that it meets these requirements. If | ||
135 | these requirements are not met, it is not valid to use IRQF_COND_SUSPEND. | ||