1 --- a/drivers/cbus/retu.c
2 +++ b/drivers/cbus/retu.c
3 @@ -53,9 +53,6 @@ struct retu {
13 @@ -191,9 +188,10 @@ static irqreturn_t retu_irq_handler(int
14 mutex_lock(&retu->mutex);
15 idr = __retu_read_reg(retu, RETU_REG_IDR);
16 imr = __retu_read_reg(retu, RETU_REG_IMR);
18 + __retu_write_reg(retu, RETU_REG_IDR, idr);
19 mutex_unlock(&retu->mutex);
23 dev_vdbg(retu->dev, "No IRQ, spurious?\n");
25 @@ -232,15 +230,6 @@ static void retu_irq_unmask(struct irq_d
29 -static void retu_irq_ack(struct irq_data *data)
31 - struct retu *retu = irq_data_get_irq_chip_data(data);
32 - int irq = data->irq;
34 - retu->ack |= (1 << (irq - retu->irq_base));
35 - retu->ack_pending = true;
38 static void retu_bus_lock(struct irq_data *data)
40 struct retu *retu = irq_data_get_irq_chip_data(data);
41 @@ -257,11 +246,6 @@ static void retu_bus_sync_unlock(struct
42 retu->mask_pending = false;
45 - if (retu->ack_pending) {
46 - __retu_write_reg(retu, RETU_REG_IDR, retu->ack);
47 - retu->ack_pending = false;
50 mutex_unlock(&retu->mutex);
53 @@ -271,7 +255,6 @@ static struct irq_chip retu_irq_chip = {
54 .irq_bus_sync_unlock = retu_bus_sync_unlock,
55 .irq_mask = retu_irq_mask,
56 .irq_unmask = retu_irq_unmask,
57 - .irq_ack = retu_irq_ack,
60 static inline void retu_irq_setup(int irq)
61 @@ -291,8 +274,7 @@ static void retu_irq_init(struct retu *r
63 for (irq = base; irq < end; irq++) {
64 irq_set_chip_data(irq, retu);
65 - irq_set_chip_and_handler(irq, &retu_irq_chip,
67 + irq_set_chip(irq, &retu_irq_chip);
68 irq_set_nested_thread(irq, 1);
71 --- a/drivers/cbus/tahvo.c
72 +++ b/drivers/cbus/tahvo.c
73 @@ -48,11 +48,9 @@ struct tahvo {
80 unsigned int mask_pending:1;
81 - unsigned int ack_pending:1;
82 unsigned int is_betty:1;
85 @@ -138,9 +136,12 @@ static irqreturn_t tahvo_irq_handler(int
89 + mutex_lock(&tahvo->mutex);
90 id = __tahvo_read_reg(tahvo, TAHVO_REG_IDR);
91 im = __tahvo_read_reg(tahvo, TAHVO_REG_IMR);
93 + __tahvo_write_reg(tahvo, TAHVO_REG_IDR, id);
94 + mutex_unlock(&tahvo->mutex);
97 dev_vdbg(tahvo->dev, "No IRQ, spurious ?\n");
98 @@ -177,11 +178,6 @@ static void tahvo_irq_bus_sync_unlock(st
99 tahvo->mask_pending = false;
102 - if (tahvo->ack_pending) {
103 - __tahvo_write_reg(tahvo, TAHVO_REG_IDR, tahvo->ack);
104 - tahvo->ack_pending = false;
107 mutex_unlock(&tahvo->mutex);
110 @@ -203,22 +199,12 @@ static void tahvo_irq_unmask(struct irq_
111 tahvo->mask_pending = true;
114 -static void tahvo_irq_ack(struct irq_data *data)
116 - struct tahvo *tahvo = irq_data_get_irq_chip_data(data);
117 - int irq = data->irq;
119 - tahvo->ack |= (1 << (irq - tahvo->irq_base));
120 - tahvo->ack_pending = true;
123 static struct irq_chip tahvo_irq_chip = {
125 .irq_bus_lock = tahvo_irq_bus_lock,
126 .irq_bus_sync_unlock = tahvo_irq_bus_sync_unlock,
127 .irq_mask = tahvo_irq_mask,
128 .irq_unmask = tahvo_irq_unmask,
129 - .irq_ack = tahvo_irq_ack,
132 static inline void tahvo_irq_setup(int irq)
133 @@ -238,8 +224,7 @@ static void tahvo_irq_init(struct tahvo
135 for (irq = base; irq < end; irq++) {
136 irq_set_chip_data(irq, tahvo);
137 - irq_set_chip_and_handler(irq, &tahvo_irq_chip,
138 - handle_simple_irq);
139 + irq_set_chip(irq, &tahvo_irq_chip);
140 irq_set_nested_thread(irq, 1);
141 tahvo_irq_setup(irq);