diff options
Diffstat (limited to 'kernel/irq/pm.c')
| -rw-r--r-- | kernel/irq/pm.c | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index d6961d3c6f9e..8f557fa1f4fe 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -177,6 +177,26 @@ static void resume_irqs(bool want_early)  }  /** + * rearm_wake_irq - rearm a wakeup interrupt line after signaling wakeup + * @irq: Interrupt to rearm + */ +void rearm_wake_irq(unsigned int irq) +{ +	unsigned long flags; +	struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); + +	if (!desc || !(desc->istate & IRQS_SUSPENDED) || +	    !irqd_is_wakeup_set(&desc->irq_data)) +		return; + +	desc->istate &= ~IRQS_SUSPENDED; +	irqd_set(&desc->irq_data, IRQD_WAKEUP_ARMED); +	__enable_irq(desc); + +	irq_put_desc_busunlock(desc, flags); +} + +/**   * irq_pm_syscore_ops - enable interrupt lines early   *   * Enable all interrupt lines with %IRQF_EARLY_RESUME set.  |