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. | ||
