mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 23:42:43 +00:00
brcm63xx: fix external IRQs
External IRQs are currently broken, fix the BCM6345_EXT_IRQ driver. Since the adoption of the new driver irq-bcm6345-ext, in Chaos Calmer, external IRQs don't work. It seems there were some minor errors at the initial development of the driver. This patch fixes the ticket https://dev.openwrt.org/ticket/21613 Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
This commit is contained in:
parent
6b5f6d6601
commit
29444e4754
@ -148,7 +148,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
+
|
+
|
||||||
+ raw_spin_lock(&priv->lock);
|
+ raw_spin_lock(&priv->lock);
|
||||||
+ reg = __raw_readl(priv->reg);
|
+ reg = __raw_readl(priv->reg);
|
||||||
+ reg |= hwirq << (EXTIRQ_CFG_CLEAR * priv->shift);
|
+ reg |= 1 << (hwirq + EXTIRQ_CFG_CLEAR * priv->shift);
|
||||||
+ __raw_writel(reg, priv->reg);
|
+ __raw_writel(reg, priv->reg);
|
||||||
+ raw_spin_unlock(&priv->lock);
|
+ raw_spin_unlock(&priv->lock);
|
||||||
+}
|
+}
|
||||||
@ -161,7 +161,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
+
|
+
|
||||||
+ raw_spin_lock(&priv->lock);
|
+ raw_spin_lock(&priv->lock);
|
||||||
+ reg = __raw_readl(priv->reg);
|
+ reg = __raw_readl(priv->reg);
|
||||||
+ reg &= ~(hwirq << (EXTIRQ_CFG_MASK * priv->shift));
|
+ reg &= ~(1 << (hwirq + EXTIRQ_CFG_MASK * priv->shift));
|
||||||
+ __raw_writel(reg, priv->reg);
|
+ __raw_writel(reg, priv->reg);
|
||||||
+ raw_spin_unlock(&priv->lock);
|
+ raw_spin_unlock(&priv->lock);
|
||||||
+}
|
+}
|
||||||
@ -174,7 +174,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
+
|
+
|
||||||
+ raw_spin_lock(&priv->lock);
|
+ raw_spin_lock(&priv->lock);
|
||||||
+ reg = __raw_readl(priv->reg);
|
+ reg = __raw_readl(priv->reg);
|
||||||
+ reg |= hwirq << (EXTIRQ_CFG_MASK * priv->shift);
|
+ reg |= 1 << (hwirq + EXTIRQ_CFG_MASK * priv->shift);
|
||||||
+ __raw_writel(reg, priv->reg);
|
+ __raw_writel(reg, priv->reg);
|
||||||
+ raw_spin_unlock(&priv->lock);
|
+ raw_spin_unlock(&priv->lock);
|
||||||
+}
|
+}
|
||||||
@ -222,17 +222,17 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
+ reg = __raw_readl(priv->reg);
|
+ reg = __raw_readl(priv->reg);
|
||||||
+
|
+
|
||||||
+ if (levelsense)
|
+ if (levelsense)
|
||||||
+ reg |= hwirq << (EXTIRQ_CFG_LEVELSENSE * priv->shift);
|
+ reg |= 1 << (hwirq + EXTIRQ_CFG_LEVELSENSE * priv->shift);
|
||||||
+ else
|
+ else
|
||||||
+ reg &= ~(hwirq << (EXTIRQ_CFG_LEVELSENSE * priv->shift));
|
+ reg &= ~(1 << (hwirq + EXTIRQ_CFG_LEVELSENSE * priv->shift));
|
||||||
+ if (sense)
|
+ if (sense)
|
||||||
+ reg |= hwirq << (EXTIRQ_CFG_SENSE * priv->shift);
|
+ reg |= 1 << (hwirq + EXTIRQ_CFG_SENSE * priv->shift);
|
||||||
+ else
|
+ else
|
||||||
+ reg &= ~(hwirq << (EXTIRQ_CFG_SENSE * priv->shift));
|
+ reg &= ~(1 << (hwirq + EXTIRQ_CFG_SENSE * priv->shift));
|
||||||
+ if (bothedge)
|
+ if (bothedge)
|
||||||
+ reg |= hwirq << (EXTIRQ_CFG_BOTHEDGE * priv->shift);
|
+ reg |= 1 << (hwirq + EXTIRQ_CFG_BOTHEDGE * priv->shift);
|
||||||
+ else
|
+ else
|
||||||
+ reg &= ~(hwirq << (EXTIRQ_CFG_BOTHEDGE * priv->shift));
|
+ reg &= ~(1 << (hwirq + EXTIRQ_CFG_BOTHEDGE * priv->shift));
|
||||||
+
|
+
|
||||||
+ __raw_writel(reg, priv->reg);
|
+ __raw_writel(reg, priv->reg);
|
||||||
+ raw_spin_unlock(&priv->lock);
|
+ raw_spin_unlock(&priv->lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user