diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2012-05-18 20:22:32 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2012-05-18 20:22:32 +0000 |
commit | 02c2f449d7fb61ba212fec12baec65197167e7bf (patch) | |
tree | 8afd63e4117c4991f1b1285f41550777f21cfa63 /target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch | |
parent | c2a2d59db5ef7b8b9c35d1756585d8b3c6f35543 (diff) | |
download | upstream-02c2f449d7fb61ba212fec12baec65197167e7bf.tar.gz upstream-02c2f449d7fb61ba212fec12baec65197167e7bf.tar.bz2 upstream-02c2f449d7fb61ba212fec12baec65197167e7bf.zip |
omap24xx: add support for 3.3
Compile tested only.
SVN-Revision: 31810
Diffstat (limited to 'target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch')
-rw-r--r-- | target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch b/target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch new file mode 100644 index 0000000000..86f2f770e9 --- /dev/null +++ b/target/linux/omap24xx/patches-3.3/252-cbus-retu-tahvo-ack-fix.patch @@ -0,0 +1,142 @@ +--- a/drivers/cbus/retu.c ++++ b/drivers/cbus/retu.c +@@ -53,9 +53,6 @@ struct retu { + + int irq; + +- int ack; +- bool ack_pending; +- + int mask; + bool mask_pending; + +@@ -191,9 +188,10 @@ static irqreturn_t retu_irq_handler(int + mutex_lock(&retu->mutex); + idr = __retu_read_reg(retu, RETU_REG_IDR); + imr = __retu_read_reg(retu, RETU_REG_IMR); ++ idr &= ~imr; ++ __retu_write_reg(retu, RETU_REG_IDR, idr); + mutex_unlock(&retu->mutex); + +- idr &= ~imr; + if (!idr) { + dev_vdbg(retu->dev, "No IRQ, spurious?\n"); + return IRQ_NONE; +@@ -232,15 +230,6 @@ static void retu_irq_unmask(struct irq_d + + } + +-static void retu_irq_ack(struct irq_data *data) +-{ +- struct retu *retu = irq_data_get_irq_chip_data(data); +- int irq = data->irq; +- +- retu->ack |= (1 << (irq - retu->irq_base)); +- retu->ack_pending = true; +-} +- + static void retu_bus_lock(struct irq_data *data) + { + struct retu *retu = irq_data_get_irq_chip_data(data); +@@ -257,11 +246,6 @@ static void retu_bus_sync_unlock(struct + retu->mask_pending = false; + } + +- if (retu->ack_pending) { +- __retu_write_reg(retu, RETU_REG_IDR, retu->ack); +- retu->ack_pending = false; +- } +- + mutex_unlock(&retu->mutex); + } + +@@ -271,7 +255,6 @@ static struct irq_chip retu_irq_chip = { + .irq_bus_sync_unlock = retu_bus_sync_unlock, + .irq_mask = retu_irq_mask, + .irq_unmask = retu_irq_unmask, +- .irq_ack = retu_irq_ack, + }; + + static inline void retu_irq_setup(int irq) +@@ -291,8 +274,7 @@ static void retu_irq_init(struct retu *r + + for (irq = base; irq < end; irq++) { + irq_set_chip_data(irq, retu); +- irq_set_chip_and_handler(irq, &retu_irq_chip, +- handle_simple_irq); ++ irq_set_chip(irq, &retu_irq_chip); + irq_set_nested_thread(irq, 1); + retu_irq_setup(irq); + } +--- a/drivers/cbus/tahvo.c ++++ b/drivers/cbus/tahvo.c +@@ -48,11 +48,9 @@ struct tahvo { + int irq_end; + int irq; + +- int ack; + int mask; + + unsigned int mask_pending:1; +- unsigned int ack_pending:1; + unsigned int is_betty:1; + }; + +@@ -138,9 +136,12 @@ static irqreturn_t tahvo_irq_handler(int + u16 id; + u16 im; + ++ mutex_lock(&tahvo->mutex); + id = __tahvo_read_reg(tahvo, TAHVO_REG_IDR); + im = __tahvo_read_reg(tahvo, TAHVO_REG_IMR); + id &= ~im; ++ __tahvo_write_reg(tahvo, TAHVO_REG_IDR, id); ++ mutex_unlock(&tahvo->mutex); + + if (!id) { + dev_vdbg(tahvo->dev, "No IRQ, spurious ?\n"); +@@ -177,11 +178,6 @@ static void tahvo_irq_bus_sync_unlock(st + tahvo->mask_pending = false; + } + +- if (tahvo->ack_pending) { +- __tahvo_write_reg(tahvo, TAHVO_REG_IDR, tahvo->ack); +- tahvo->ack_pending = false; +- } +- + mutex_unlock(&tahvo->mutex); + } + +@@ -203,22 +199,12 @@ static void tahvo_irq_unmask(struct irq_ + tahvo->mask_pending = true; + } + +-static void tahvo_irq_ack(struct irq_data *data) +-{ +- struct tahvo *tahvo = irq_data_get_irq_chip_data(data); +- int irq = data->irq; +- +- tahvo->ack |= (1 << (irq - tahvo->irq_base)); +- tahvo->ack_pending = true; +-} +- + static struct irq_chip tahvo_irq_chip = { + .name = "tahvo", + .irq_bus_lock = tahvo_irq_bus_lock, + .irq_bus_sync_unlock = tahvo_irq_bus_sync_unlock, + .irq_mask = tahvo_irq_mask, + .irq_unmask = tahvo_irq_unmask, +- .irq_ack = tahvo_irq_ack, + }; + + static inline void tahvo_irq_setup(int irq) +@@ -238,8 +224,7 @@ static void tahvo_irq_init(struct tahvo + + for (irq = base; irq < end; irq++) { + irq_set_chip_data(irq, tahvo); +- irq_set_chip_and_handler(irq, &tahvo_irq_chip, +- handle_simple_irq); ++ irq_set_chip(irq, &tahvo_irq_chip); + irq_set_nested_thread(irq, 1); + tahvo_irq_setup(irq); + } |