From: Thomas Gleixner Enable platforms to set the irq-wake (power-management) properties of an IRQ. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar Signed-off-by: Andrew Morton --- include/linux/interrupt.h | 14 ++++++++++++++ kernel/irq/manage.c | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+) diff -puN include/linux/interrupt.h~genirq-add-irq-wake-power-management-support include/linux/interrupt.h --- devel/include/linux/interrupt.h~genirq-add-irq-wake-power-management-support 2006-05-29 16:21:38.000000000 -0700 +++ devel-akpm/include/linux/interrupt.h 2006-05-29 16:46:29.000000000 -0700 @@ -36,6 +36,20 @@ extern void free_irq(unsigned int, void extern void disable_irq_nosync(unsigned int irq); extern void disable_irq(unsigned int irq); extern void enable_irq(unsigned int irq); + +/* IRQ wakeup (PM) control: */ +extern int set_irq_wake(unsigned int irq, unsigned int on); + +static inline int enable_irq_wake(unsigned int irq) +{ + return set_irq_wake(irq, 1); +} + +static inline int disable_irq_wake(unsigned int irq) +{ + return set_irq_wake(irq, 0); +} + #endif #ifndef __ARCH_SET_SOFTIRQ_PENDING diff -puN kernel/irq/manage.c~genirq-add-irq-wake-power-management-support kernel/irq/manage.c --- devel/kernel/irq/manage.c~genirq-add-irq-wake-power-management-support 2006-05-29 16:21:38.000000000 -0700 +++ devel-akpm/kernel/irq/manage.c 2006-05-29 16:46:30.000000000 -0700 @@ -133,6 +133,27 @@ void enable_irq(unsigned int irq) } EXPORT_SYMBOL(enable_irq); +/** + * set_irq_wake - control irq power management wakeup + * @irq: interrupt to control + * @on: enable/disable power management wakeup + * + * Enable/disable power management wakeup mode + */ +int set_irq_wake(unsigned int irq, unsigned int on) +{ + struct irq_desc *desc = irq_desc + irq; + unsigned long flags; + int ret = -ENXIO; + + spin_lock_irqsave(&desc->lock, flags); + if (desc->chip->set_wake) + ret = desc->chip->set_wake(irq, on); + spin_unlock_irqrestore(&desc->lock, flags); + return ret; +} +EXPORT_SYMBOL(set_irq_wake); + /* * Internal function that tells the architecture code whether a * particular irq has been exclusively allocated or is available _