| From 50a1e187e9f7fda82dcdcc323fc794b6c233cea2 Mon Sep 17 00:00:00 2001 |
| From: Santosh Shilimkar <santosh.shilimkar@ti.com> |
| Date: Fri, 9 Sep 2011 13:59:35 +0530 |
| Subject: genirq: Add IRQCHIP_SKIP_SET_WAKE flag |
| |
| Some irq chips need the irq_set_wake() functionality, but do not |
| require a irq_set_wake() callback. Instead of forcing an empty |
| callback to be implemented add a flag which notes this fact. Check for |
| the flag in set_irq_wake_real() and return success when set. |
| |
| Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| (cherry picked from commit 60f96b41f71d2a13d1c0a457b8b77958f77142d1) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| include/linux/irq.h | 2 ++ |
| kernel/irq/manage.c | 3 +++ |
| 2 files changed, 5 insertions(+) |
| |
| diff --git a/include/linux/irq.h b/include/linux/irq.h |
| index baa397e..094c211 100644 |
| --- a/include/linux/irq.h |
| +++ b/include/linux/irq.h |
| @@ -334,12 +334,14 @@ struct irq_chip { |
| * IRQCHIP_MASK_ON_SUSPEND: Mask non wake irqs in the suspend path |
| * IRQCHIP_ONOFFLINE_ENABLED: Only call irq_on/off_line callbacks |
| * when irq enabled |
| + * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip |
| */ |
| enum { |
| IRQCHIP_SET_TYPE_MASKED = (1 << 0), |
| IRQCHIP_EOI_IF_HANDLED = (1 << 1), |
| IRQCHIP_MASK_ON_SUSPEND = (1 << 2), |
| IRQCHIP_ONOFFLINE_ENABLED = (1 << 3), |
| + IRQCHIP_SKIP_SET_WAKE = (1 << 4), |
| }; |
| |
| /* This include will go away once we isolated irq_desc usage to core code */ |
| diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c |
| index df8136f..bbc6a35 100644 |
| --- a/kernel/irq/manage.c |
| +++ b/kernel/irq/manage.c |
| @@ -467,6 +467,9 @@ static int set_irq_wake_real(unsigned int irq, unsigned int on) |
| struct irq_desc *desc = irq_to_desc(irq); |
| int ret = -ENXIO; |
| |
| + if (irq_desc_get_chip(desc)->flags & IRQCHIP_SKIP_SET_WAKE) |
| + return 0; |
| + |
| if (desc->irq_data.chip->irq_set_wake) |
| ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on); |
| |
| -- |
| 1.7.10 |
| |