@@ -217,6 +217,8 @@ struct irq_data {
217217 * from actual interrupt context.
218218 * IRQD_AFFINITY_ON_ACTIVATE - Affinity is set on activation. Don't call
219219 * irq_chip::irq_set_affinity() when deactivated.
220+ * IRQD_IRQ_ENABLED_ON_SUSPEND - Interrupt is enabled on suspend by irq pm if
221+ * irqchip have flag IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND set.
220222 */
221223enum {
222224 IRQD_TRIGGER_MASK = 0xf ,
@@ -242,6 +244,7 @@ enum {
242244 IRQD_MSI_NOMASK_QUIRK = (1 << 27 ),
243245 IRQD_HANDLE_ENFORCE_IRQCTX = (1 << 28 ),
244246 IRQD_AFFINITY_ON_ACTIVATE = (1 << 29 ),
247+ IRQD_IRQ_ENABLED_ON_SUSPEND = (1 << 30 ),
245248};
246249
247250#define __irqd_to_state (d ) ACCESS_PRIVATE((d)->common, state_use_accessors)
@@ -321,6 +324,11 @@ static inline bool irqd_is_handle_enforce_irqctx(struct irq_data *d)
321324 return __irqd_to_state (d ) & IRQD_HANDLE_ENFORCE_IRQCTX ;
322325}
323326
327+ static inline bool irqd_is_enabled_on_suspend (struct irq_data * d )
328+ {
329+ return __irqd_to_state (d ) & IRQD_IRQ_ENABLED_ON_SUSPEND ;
330+ }
331+
324332static inline bool irqd_is_wakeup_set (struct irq_data * d )
325333{
326334 return __irqd_to_state (d ) & IRQD_WAKEUP_STATE ;
@@ -547,27 +555,30 @@ struct irq_chip {
547555/*
548556 * irq_chip specific flags
549557 *
550- * IRQCHIP_SET_TYPE_MASKED: Mask before calling chip.irq_set_type()
551- * IRQCHIP_EOI_IF_HANDLED: Only issue irq_eoi() when irq was handled
552- * IRQCHIP_MASK_ON_SUSPEND: Mask non wake irqs in the suspend path
553- * IRQCHIP_ONOFFLINE_ENABLED: Only call irq_on/off_line callbacks
554- * when irq enabled
555- * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip
556- * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask
557- * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode
558- * IRQCHIP_SUPPORTS_LEVEL_MSI Chip can provide two doorbells for Level MSIs
559- * IRQCHIP_SUPPORTS_NMI: Chip can deliver NMIs, only for root irqchips
558+ * IRQCHIP_SET_TYPE_MASKED: Mask before calling chip.irq_set_type()
559+ * IRQCHIP_EOI_IF_HANDLED: Only issue irq_eoi() when irq was handled
560+ * IRQCHIP_MASK_ON_SUSPEND: Mask non wake irqs in the suspend path
561+ * IRQCHIP_ONOFFLINE_ENABLED: Only call irq_on/off_line callbacks
562+ * when irq enabled
563+ * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip
564+ * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask
565+ * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode
566+ * IRQCHIP_SUPPORTS_LEVEL_MSI: Chip can provide two doorbells for Level MSIs
567+ * IRQCHIP_SUPPORTS_NMI: Chip can deliver NMIs, only for root irqchips
568+ * IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND: Invokes __enable_irq()/__disable_irq() for wake irqs
569+ * in the suspend path if they are in disabled state
560570 */
561571enum {
562- IRQCHIP_SET_TYPE_MASKED = (1 << 0 ),
563- IRQCHIP_EOI_IF_HANDLED = (1 << 1 ),
564- IRQCHIP_MASK_ON_SUSPEND = (1 << 2 ),
565- IRQCHIP_ONOFFLINE_ENABLED = (1 << 3 ),
566- IRQCHIP_SKIP_SET_WAKE = (1 << 4 ),
567- IRQCHIP_ONESHOT_SAFE = (1 << 5 ),
568- IRQCHIP_EOI_THREADED = (1 << 6 ),
569- IRQCHIP_SUPPORTS_LEVEL_MSI = (1 << 7 ),
570- IRQCHIP_SUPPORTS_NMI = (1 << 8 ),
572+ IRQCHIP_SET_TYPE_MASKED = (1 << 0 ),
573+ IRQCHIP_EOI_IF_HANDLED = (1 << 1 ),
574+ IRQCHIP_MASK_ON_SUSPEND = (1 << 2 ),
575+ IRQCHIP_ONOFFLINE_ENABLED = (1 << 3 ),
576+ IRQCHIP_SKIP_SET_WAKE = (1 << 4 ),
577+ IRQCHIP_ONESHOT_SAFE = (1 << 5 ),
578+ IRQCHIP_EOI_THREADED = (1 << 6 ),
579+ IRQCHIP_SUPPORTS_LEVEL_MSI = (1 << 7 ),
580+ IRQCHIP_SUPPORTS_NMI = (1 << 8 ),
581+ IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = (1 << 9 ),
571582};
572583
573584#include <linux/irqdesc.h>
0 commit comments