Messages in this thread Patch in this message | | | Date | Wed, 17 May 2006 02:17:06 +0200 | From | Ingo Molnar <> | Subject | [patch 24/50] genirq: add SA_TRIGGER support |
| |
From: Thomas Gleixner <tglx@linutronix.de>
enable drivers to request an IRQ with a given irq-flow (trigger/polarity) setting.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- kernel/irq/manage.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
Index: linux-genirq.q/kernel/irq/manage.c =================================================================== --- linux-genirq.q.orig/kernel/irq/manage.c +++ linux-genirq.q/kernel/irq/manage.c @@ -214,8 +214,14 @@ int setup_irq(unsigned int irq, struct i p = &desc->action; old = *p; if (old) { - /* Can't share interrupts unless both agree to */ - if (!(old->flags & new->flags & SA_SHIRQ)) + /* + * Can't share interrupts unless both agree to and are + * the same type (level, edge, polarity). So both flag + * fields must have SA_SHIRQ set and the bits which + * set the trigger type must match. + */ + if (!((old->flags & new->flags) & SA_SHIRQ) || + ((old->flags ^ new->flags) & SA_TRIGGER_MASK)) goto mismatch; #if defined(CONFIG_IRQ_PER_CPU) && defined(SA_PERCPU_IRQ) @@ -238,6 +244,11 @@ int setup_irq(unsigned int irq, struct i desc->status |= IRQ_PER_CPU; #endif if (!shared) { + /* Setup the type (level, edge polarity) if configured: */ + if (new->flags & SA_TRIGGER_MASK && desc->handler->set_type) + desc->handler->set_type(irq, + new->flags & SA_TRIGGER_MASK); + desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |