Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e4f586f280bbfa05c68f99df2db981356ee30533
Commit:     e4f586f280bbfa05c68f99df2db981356ee30533
Parent:     e7ba176b47db2ed53f258a6b4fe9d9fc6fa437a9
Author:     David Brownell <[EMAIL PROTECTED]>
AuthorDate: Tue Dec 18 20:50:28 2007 -0800
Committer:  Haavard Skinnemoen <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 08:31:44 2008 +0100

    [AVR32] extint: change set_irq_type() handling
    
    Update the AVR32 EIC code to use the new __set_irq_handler_unlocked()
    call, getting rid of one more instance of this widespread problem.
    
    Signed-off-by: David Brownell <[EMAIL PROTECTED]>
    Signed-off-by: Haavard Skinnemoen <[EMAIL PROTECTED]>
---
 arch/avr32/mach-at32ap/extint.c |   18 +++++++-----------
 1 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/arch/avr32/mach-at32ap/extint.c b/arch/avr32/mach-at32ap/extint.c
index e108e7b..81a4a02 100644
--- a/arch/avr32/mach-at32ap/extint.c
+++ b/arch/avr32/mach-at32ap/extint.c
@@ -130,8 +130,11 @@ static int eic_set_irq_type(unsigned int irq, unsigned int 
flow_type)
                eic_writel(eic, EDGE, edge);
                eic_writel(eic, LEVEL, level);
 
-               if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
+               if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) {
                        flow_type |= IRQ_LEVEL;
+                       __set_irq_handler_unlocked(irq, handle_level_irq);
+               } else
+                       __set_irq_handler_unlocked(irq, handle_edge_irq);
                desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
                desc->status |= flow_type;
        }
@@ -151,9 +154,8 @@ static struct irq_chip eic_chip = {
 static void demux_eic_irq(unsigned int irq, struct irq_desc *desc)
 {
        struct eic *eic = desc->handler_data;
-       struct irq_desc *ext_desc;
        unsigned long status, pending;
-       unsigned int i, ext_irq;
+       unsigned int i;
 
        status = eic_readl(eic, ISR);
        pending = status & eic_readl(eic, IMR);
@@ -162,12 +164,7 @@ static void demux_eic_irq(unsigned int irq, struct 
irq_desc *desc)
                i = fls(pending) - 1;
                pending &= ~(1 << i);
 
-               ext_irq = i + eic->first_irq;
-               ext_desc = irq_desc + ext_irq;
-               if (ext_desc->status & IRQ_LEVEL)
-                       handle_level_irq(ext_irq, ext_desc);
-               else
-                       handle_edge_irq(ext_irq, ext_desc);
+               generic_handle_irq(i + eic->first_irq);
        }
 }
 
@@ -236,9 +233,8 @@ static int __init eic_probe(struct platform_device *pdev)
        eic->chip = &eic_chip;
 
        for (i = 0; i < nr_irqs; i++) {
-               /* NOTE the handler we set here is ignored by the demux */
                set_irq_chip_and_handler(eic->first_irq + i, &eic_chip,
-                                        handle_level_irq);
+                                        handle_edge_irq);
                set_irq_chip_data(eic->first_irq + i, eic);
        }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to