Commit 09146235 authored by Russell King's avatar Russell King

[ARM] Make IRQ probing more reliable; ensure that IRQ edge detection

is set correctly.  Remove couple of debugging printk()s.
parent 1d31c451
...@@ -633,6 +633,8 @@ unsigned long probe_irq_on(void) ...@@ -633,6 +633,8 @@ unsigned long probe_irq_on(void)
irq_desc[i].probing = 1; irq_desc[i].probing = 1;
irq_desc[i].triggered = 0; irq_desc[i].triggered = 0;
if (irq_desc[i].chip->type)
irq_desc[i].chip->type(i, IRQT_PROBE);
irq_desc[i].chip->unmask(i); irq_desc[i].chip->unmask(i);
irqs += 1; irqs += 1;
} }
......
...@@ -55,6 +55,12 @@ static int sa1100_gpio_type(unsigned int irq, unsigned int type) ...@@ -55,6 +55,12 @@ static int sa1100_gpio_type(unsigned int irq, unsigned int type)
else else
mask = GPIO11_27_MASK(irq); mask = GPIO11_27_MASK(irq);
if (type == IRQT_PROBE) {
if ((GPIO_IRQ_rising_edge | GPIO_IRQ_falling_edge) & mask)
return 0;
type == __IRQT_RISEDGE | __IRQT_FALEDGE;
}
if (type & __IRQT_RISEDGE) { if (type & __IRQT_RISEDGE) {
GPIO_IRQ_rising_edge |= mask; GPIO_IRQ_rising_edge |= mask;
} else } else
......
...@@ -117,11 +117,12 @@ static int sa1111_type_lowirq(unsigned int irq, unsigned int flags) ...@@ -117,11 +117,12 @@ static int sa1111_type_lowirq(unsigned int irq, unsigned int flags)
{ {
unsigned int mask = SA1111_IRQMASK_LO(irq); unsigned int mask = SA1111_IRQMASK_LO(irq);
if (flags == IRQT_PROBE)
return 0;
if ((!(flags & __IRQT_RISEDGE) ^ !(flags & __IRQT_FALEDGE)) == 0) if ((!(flags & __IRQT_RISEDGE) ^ !(flags & __IRQT_FALEDGE)) == 0)
return -EINVAL; return -EINVAL;
printk("IRQ%d: %s edge\n", irq, flags & __IRQT_RISEDGE ? "rising" : "falling");
if (flags & __IRQT_RISEDGE) if (flags & __IRQT_RISEDGE)
INTPOL0 &= ~mask; INTPOL0 &= ~mask;
else else
...@@ -181,11 +182,12 @@ static int sa1111_type_highirq(unsigned int irq, unsigned int flags) ...@@ -181,11 +182,12 @@ static int sa1111_type_highirq(unsigned int irq, unsigned int flags)
{ {
unsigned int mask = SA1111_IRQMASK_HI(irq); unsigned int mask = SA1111_IRQMASK_HI(irq);
if (flags == IRQT_PROBE)
return 0;
if ((!(flags & __IRQT_RISEDGE) ^ !(flags & __IRQT_FALEDGE)) == 0) if ((!(flags & __IRQT_RISEDGE) ^ !(flags & __IRQT_FALEDGE)) == 0)
return -EINVAL; return -EINVAL;
printk("IRQ%d: %s edge\n", irq, flags & __IRQT_RISEDGE ? "rising" : "falling");
if (flags & __IRQT_RISEDGE) if (flags & __IRQT_RISEDGE)
INTPOL1 &= ~mask; INTPOL1 &= ~mask;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment