提交 06e4479b 编写于 作者: M Mrten Wikstrm 提交者: Russell King

[ARM] 3347/1: Bugfix for ixp4xx_set_irq_type()

Patch from Mrten Wikstrm

This patch fixes a bug in ixp4xx_set_irq_type() which leads to
GPIO being incorrectly set to both edge triggered for raising
as well as falling edge interrupt types. See the previous
discussion on patch 3312/1.
Signed-off-by: NMrten Wikstrm <marten.wikstrom@passito.se>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 df666b9c
...@@ -111,24 +111,30 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) ...@@ -111,24 +111,30 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
if (line < 0) if (line < 0)
return -EINVAL; return -EINVAL;
if (type & IRQT_BOTHEDGE) { switch (type){
case IRQT_BOTHEDGE:
int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL; int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL;
irq_type = IXP4XX_IRQ_EDGE; irq_type = IXP4XX_IRQ_EDGE;
} else if (type & IRQT_RISING) { break;
case IRQT_RISING:
int_style = IXP4XX_GPIO_STYLE_RISING_EDGE; int_style = IXP4XX_GPIO_STYLE_RISING_EDGE;
irq_type = IXP4XX_IRQ_EDGE; irq_type = IXP4XX_IRQ_EDGE;
} else if (type & IRQT_FALLING) { break;
case IRQT_FALLING:
int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE; int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE;
irq_type = IXP4XX_IRQ_EDGE; irq_type = IXP4XX_IRQ_EDGE;
} else if (type & IRQT_HIGH) { break;
case IRQT_HIGH:
int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH;
irq_type = IXP4XX_IRQ_LEVEL; irq_type = IXP4XX_IRQ_LEVEL;
} else if (type & IRQT_LOW) { break;
case IRQT_LOW:
int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW;
irq_type = IXP4XX_IRQ_LEVEL; irq_type = IXP4XX_IRQ_LEVEL;
} else break;
default:
return -EINVAL; return -EINVAL;
}
ixp4xx_config_irq(irq, irq_type); ixp4xx_config_irq(irq, irq_type);
if (line >= 8) { /* pins 8-15 */ if (line >= 8) { /* pins 8-15 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册