diff options
Diffstat (limited to 'kernel/irq/pm.c')
-rw-r--r-- | kernel/irq/pm.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 1329f0eff49e..f76fc00c9877 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c | |||
@@ -68,10 +68,24 @@ int check_wakeup_irqs(void) | |||
68 | struct irq_desc *desc; | 68 | struct irq_desc *desc; |
69 | int irq; | 69 | int irq; |
70 | 70 | ||
71 | for_each_irq_desc(irq, desc) | 71 | for_each_irq_desc(irq, desc) { |
72 | if (irqd_is_wakeup_set(&desc->irq_data) && | 72 | if (irqd_is_wakeup_set(&desc->irq_data)) { |
73 | (desc->istate & IRQS_PENDING)) | 73 | if (desc->istate & IRQS_PENDING) |
74 | return -EBUSY; | 74 | return -EBUSY; |
75 | continue; | ||
76 | } | ||
77 | /* | ||
78 | * Check the non wakeup interrupts whether they need | ||
79 | * to be masked before finally going into suspend | ||
80 | * state. That's for hardware which has no wakeup | ||
81 | * source configuration facility. The chip | ||
82 | * implementation indicates that with | ||
83 | * IRQCHIP_MASK_ON_SUSPEND. | ||
84 | */ | ||
85 | if (desc->istate & IRQS_SUSPENDED && | ||
86 | irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND) | ||
87 | mask_irq(desc); | ||
88 | } | ||
75 | 89 | ||
76 | return 0; | 90 | return 0; |
77 | } | 91 | } |