aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-07-17 08:45:31 -0400
committerLinus Walleij <linus.walleij@linaro.org>2015-07-17 08:45:31 -0400
commitbcae888039d5f0b522e1588c54f95a7612d1723c (patch)
treed8039698a3b74223dc94798046049e9bfcf23fe7
parent3685bbce2ea6142e81c78e6f3d5b2a1cdc37660e (diff)
parentbdac2b6dc7392668a8530d67a5f762366f57f9b4 (diff)
Merge branch 'queue/irq/gpio' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into devel
-rw-r--r--drivers/gpio/gpio-bcm-kona.c2
-rw-r--r--drivers/gpio/gpio-davinci.c19
-rw-r--r--drivers/gpio/gpio-dwapb.c2
-rw-r--r--drivers/gpio/gpio-ep93xx.c6
-rw-r--r--drivers/gpio/gpio-mpc8xxx.c7
-rw-r--r--drivers/gpio/gpio-msm-v2.c22
-rw-r--r--drivers/gpio/gpio-mvebu.c8
-rw-r--r--drivers/gpio/gpio-mxc.c6
-rw-r--r--drivers/gpio/gpio-mxs.c2
-rw-r--r--drivers/gpio/gpio-omap.c6
-rw-r--r--drivers/gpio/gpio-pch.c4
-rw-r--r--drivers/gpio/gpio-sa1100.c4
-rw-r--r--drivers/gpio/gpio-tegra.c8
-rw-r--r--drivers/gpio/gpio-timberdale.c8
-rw-r--r--drivers/gpio/gpio-tz1090.c4
-rw-r--r--drivers/gpio/gpio-vf610.c2
-rw-r--r--drivers/gpio/gpio-zynq.c6
-rw-r--r--drivers/gpio/gpiolib.c4
18 files changed, 55 insertions, 65 deletions
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index 40343fa92c7b..109083f65248 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c
@@ -438,7 +438,7 @@ static void bcm_kona_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
438 void __iomem *reg_base; 438 void __iomem *reg_base;
439 int bit, bank_id; 439 int bit, bank_id;
440 unsigned long sta; 440 unsigned long sta;
441 struct bcm_kona_gpio_bank *bank = irq_get_handler_data(irq); 441 struct bcm_kona_gpio_bank *bank = irq_desc_get_handler_data(desc);
442 struct irq_chip *chip = irq_desc_get_chip(desc); 442 struct irq_chip *chip = irq_desc_get_chip(desc);
443 443
444 chained_irq_enter(chip, desc); 444 chained_irq_enter(chip, desc);
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 86cfe1892cae..7be269402baf 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -65,11 +65,11 @@ static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio)
65 return ptr; 65 return ptr;
66} 66}
67 67
68static inline struct davinci_gpio_regs __iomem *irq2regs(int irq) 68static inline struct davinci_gpio_regs __iomem *irq2regs(struct irq_data *d)
69{ 69{
70 struct davinci_gpio_regs __iomem *g; 70 struct davinci_gpio_regs __iomem *g;
71 71
72 g = (__force struct davinci_gpio_regs __iomem *)irq_get_chip_data(irq); 72 g = (__force struct davinci_gpio_regs __iomem *)irq_data_get_irq_chip_data(d);
73 73
74 return g; 74 return g;
75} 75}
@@ -287,7 +287,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
287 287
288static void gpio_irq_disable(struct irq_data *d) 288static void gpio_irq_disable(struct irq_data *d)
289{ 289{
290 struct davinci_gpio_regs __iomem *g = irq2regs(d->irq); 290 struct davinci_gpio_regs __iomem *g = irq2regs(d);
291 u32 mask = (u32) irq_data_get_irq_handler_data(d); 291 u32 mask = (u32) irq_data_get_irq_handler_data(d);
292 292
293 writel_relaxed(mask, &g->clr_falling); 293 writel_relaxed(mask, &g->clr_falling);
@@ -296,7 +296,7 @@ static void gpio_irq_disable(struct irq_data *d)
296 296
297static void gpio_irq_enable(struct irq_data *d) 297static void gpio_irq_enable(struct irq_data *d)
298{ 298{
299 struct davinci_gpio_regs __iomem *g = irq2regs(d->irq); 299 struct davinci_gpio_regs __iomem *g = irq2regs(d);
300 u32 mask = (u32) irq_data_get_irq_handler_data(d); 300 u32 mask = (u32) irq_data_get_irq_handler_data(d);
301 unsigned status = irqd_get_trigger_type(d); 301 unsigned status = irqd_get_trigger_type(d);
302 302
@@ -327,8 +327,9 @@ static struct irq_chip gpio_irqchip = {
327}; 327};
328 328
329static void 329static void
330gpio_irq_handler(unsigned irq, struct irq_desc *desc) 330gpio_irq_handler(unsigned __irq, struct irq_desc *desc)
331{ 331{
332 unsigned int irq = irq_desc_get_irq(desc);
332 struct davinci_gpio_regs __iomem *g; 333 struct davinci_gpio_regs __iomem *g;
333 u32 mask = 0xffff; 334 u32 mask = 0xffff;
334 struct davinci_gpio_controller *d; 335 struct davinci_gpio_controller *d;
@@ -396,7 +397,7 @@ static int gpio_irq_type_unbanked(struct irq_data *data, unsigned trigger)
396 struct davinci_gpio_regs __iomem *g; 397 struct davinci_gpio_regs __iomem *g;
397 u32 mask; 398 u32 mask;
398 399
399 d = (struct davinci_gpio_controller *)data->handler_data; 400 d = (struct davinci_gpio_controller *)irq_data_get_irq_handler_data(data);
400 g = (struct davinci_gpio_regs __iomem *)d->regs; 401 g = (struct davinci_gpio_regs __iomem *)d->regs;
401 mask = __gpio_mask(data->irq - d->gpio_irq); 402 mask = __gpio_mask(data->irq - d->gpio_irq);
402 403
@@ -578,15 +579,13 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
578 writel_relaxed(~0, &g->clr_falling); 579 writel_relaxed(~0, &g->clr_falling);
579 writel_relaxed(~0, &g->clr_rising); 580 writel_relaxed(~0, &g->clr_rising);
580 581
581 /* set up all irqs in this bank */
582 irq_set_chained_handler(bank_irq, gpio_irq_handler);
583
584 /* 582 /*
585 * Each chip handles 32 gpios, and each irq bank consists of 16 583 * Each chip handles 32 gpios, and each irq bank consists of 16
586 * gpio irqs. Pass the irq bank's corresponding controller to 584 * gpio irqs. Pass the irq bank's corresponding controller to
587 * the chained irq handler. 585 * the chained irq handler.
588 */ 586 */
589 irq_set_handler_data(bank_irq, &chips[gpio / 32]); 587 irq_set_chained_handler_and_data(bank_irq, gpio_irq_handler,
588 &chips[gpio / 32]);
590 589
591 binten |= BIT(bank); 590 binten |= BIT(bank);
592 } 591 }
diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
index 55fa9853a7f2..c5be4b9b8baf 100644
--- a/drivers/gpio/gpio-dwapb.c
+++ b/drivers/gpio/gpio-dwapb.c
@@ -149,7 +149,7 @@ static u32 dwapb_do_irq(struct dwapb_gpio *gpio)
149 149
150static void dwapb_irq_handler(u32 irq, struct irq_desc *desc) 150static void dwapb_irq_handler(u32 irq, struct irq_desc *desc)
151{ 151{
152 struct dwapb_gpio *gpio = irq_get_handler_data(irq); 152 struct dwapb_gpio *gpio = irq_desc_get_handler_data(desc);
153 struct irq_chip *chip = irq_desc_get_chip(desc); 153 struct irq_chip *chip = irq_desc_get_chip(desc);
154 154
155 dwapb_do_irq(gpio); 155 dwapb_do_irq(gpio);
diff --git a/drivers/gpio/gpio-ep93xx.c b/drivers/gpio/gpio-ep93xx.c
index 45684f36ddb1..dc0c40935940 100644
--- a/drivers/gpio/gpio-ep93xx.c
+++ b/drivers/gpio/gpio-ep93xx.c
@@ -100,13 +100,15 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)
100 } 100 }
101} 101}
102 102
103static void ep93xx_gpio_f_irq_handler(unsigned int irq, struct irq_desc *desc) 103static void ep93xx_gpio_f_irq_handler(unsigned int __irq,
104 struct irq_desc *desc)
104{ 105{
105 /* 106 /*
106 * map discontiguous hw irq range to continuous sw irq range: 107 * map discontiguous hw irq range to continuous sw irq range:
107 * 108 *
108 * IRQ_EP93XX_GPIO{0..7}MUX -> gpio_to_irq(EP93XX_GPIO_LINE_F({0..7}) 109 * IRQ_EP93XX_GPIO{0..7}MUX -> gpio_to_irq(EP93XX_GPIO_LINE_F({0..7})
109 */ 110 */
111 unsigned int irq = irq_desc_get_irq(desc);
110 int port_f_idx = ((irq + 1) & 7) ^ 4; /* {19..22,47..50} -> {0..7} */ 112 int port_f_idx = ((irq + 1) & 7) ^ 4; /* {19..22,47..50} -> {0..7} */
111 int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_F(0)) + port_f_idx; 113 int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_F(0)) + port_f_idx;
112 114
@@ -208,7 +210,7 @@ static int ep93xx_gpio_irq_type(struct irq_data *d, unsigned int type)
208 return -EINVAL; 210 return -EINVAL;
209 } 211 }
210 212
211 __irq_set_handler_locked(d->irq, handler); 213 irq_set_handler_locked(d, handler);
212 214
213 gpio_int_enabled[port] |= port_mask; 215 gpio_int_enabled[port] |= port_mask;
214 216
diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
index 20aa66f34f6e..da8e89205f37 100644
--- a/drivers/gpio/gpio-mpc8xxx.c
+++ b/drivers/gpio/gpio-mpc8xxx.c
@@ -396,8 +396,8 @@ static int mpc8xxx_probe(struct platform_device *pdev)
396 out_be32(mm_gc->regs + GPIO_IER, 0xffffffff); 396 out_be32(mm_gc->regs + GPIO_IER, 0xffffffff);
397 out_be32(mm_gc->regs + GPIO_IMR, 0); 397 out_be32(mm_gc->regs + GPIO_IMR, 0);
398 398
399 irq_set_handler_data(mpc8xxx_gc->irqn, mpc8xxx_gc); 399 irq_set_chained_handler_and_data(mpc8xxx_gc->irqn,
400 irq_set_chained_handler(mpc8xxx_gc->irqn, mpc8xxx_gpio_irq_cascade); 400 mpc8xxx_gpio_irq_cascade, mpc8xxx_gc);
401 401
402 return 0; 402 return 0;
403} 403}
@@ -407,8 +407,7 @@ static int mpc8xxx_remove(struct platform_device *pdev)
407 struct mpc8xxx_gpio_chip *mpc8xxx_gc = platform_get_drvdata(pdev); 407 struct mpc8xxx_gpio_chip *mpc8xxx_gc = platform_get_drvdata(pdev);
408 408
409 if (mpc8xxx_gc->irq) { 409 if (mpc8xxx_gc->irq) {
410 irq_set_handler_data(mpc8xxx_gc->irqn, NULL); 410 irq_set_chained_handler_and_data(mpc8xxx_gc->irqn, NULL, NULL);
411 irq_set_chained_handler(mpc8xxx_gc->irqn, NULL);
412 irq_domain_remove(mpc8xxx_gc->irq); 411 irq_domain_remove(mpc8xxx_gc->irq);
413 } 412 }
414 413
diff --git a/drivers/gpio/gpio-msm-v2.c b/drivers/gpio/gpio-msm-v2.c
index 52ff18229fdc..1f0fb19209bf 100644
--- a/drivers/gpio/gpio-msm-v2.c
+++ b/drivers/gpio/gpio-msm-v2.c
@@ -187,14 +187,6 @@ static int msm_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
187 return irq_create_mapping(domain, offset); 187 return irq_create_mapping(domain, offset);
188} 188}
189 189
190static inline int msm_irq_to_gpio(struct gpio_chip *chip, unsigned irq)
191{
192 struct irq_data *irq_data = irq_get_irq_data(irq);
193
194 return irq_data->hwirq;
195}
196
197
198/* For dual-edge interrupts in software, since the hardware has no 190/* For dual-edge interrupts in software, since the hardware has no
199 * such support: 191 * such support:
200 * 192 *
@@ -238,7 +230,7 @@ static void msm_gpio_update_dual_edge_pos(unsigned gpio)
238 230
239static void msm_gpio_irq_ack(struct irq_data *d) 231static void msm_gpio_irq_ack(struct irq_data *d)
240{ 232{
241 int gpio = msm_irq_to_gpio(&msm_gpio.gpio_chip, d->irq); 233 int gpio = d->hwirq;
242 234
243 writel(BIT(INTR_STATUS), GPIO_INTR_STATUS(gpio)); 235 writel(BIT(INTR_STATUS), GPIO_INTR_STATUS(gpio));
244 if (test_bit(gpio, msm_gpio.dual_edge_irqs)) 236 if (test_bit(gpio, msm_gpio.dual_edge_irqs))
@@ -247,8 +239,8 @@ static void msm_gpio_irq_ack(struct irq_data *d)
247 239
248static void msm_gpio_irq_mask(struct irq_data *d) 240static void msm_gpio_irq_mask(struct irq_data *d)
249{ 241{
250 int gpio = msm_irq_to_gpio(&msm_gpio.gpio_chip, d->irq);
251 unsigned long irq_flags; 242 unsigned long irq_flags;
243 int gpio = d->hwirq;
252 244
253 spin_lock_irqsave(&tlmm_lock, irq_flags); 245 spin_lock_irqsave(&tlmm_lock, irq_flags);
254 writel(TARGET_PROC_NONE, GPIO_INTR_CFG_SU(gpio)); 246 writel(TARGET_PROC_NONE, GPIO_INTR_CFG_SU(gpio));
@@ -259,8 +251,8 @@ static void msm_gpio_irq_mask(struct irq_data *d)
259 251
260static void msm_gpio_irq_unmask(struct irq_data *d) 252static void msm_gpio_irq_unmask(struct irq_data *d)
261{ 253{
262 int gpio = msm_irq_to_gpio(&msm_gpio.gpio_chip, d->irq);
263 unsigned long irq_flags; 254 unsigned long irq_flags;
255 int gpio = d->hwirq;
264 256
265 spin_lock_irqsave(&tlmm_lock, irq_flags); 257 spin_lock_irqsave(&tlmm_lock, irq_flags);
266 __set_bit(gpio, msm_gpio.enabled_irqs); 258 __set_bit(gpio, msm_gpio.enabled_irqs);
@@ -271,8 +263,8 @@ static void msm_gpio_irq_unmask(struct irq_data *d)
271 263
272static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type) 264static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type)
273{ 265{
274 int gpio = msm_irq_to_gpio(&msm_gpio.gpio_chip, d->irq);
275 unsigned long irq_flags; 266 unsigned long irq_flags;
267 int gpio = d->hwirq;
276 uint32_t bits; 268 uint32_t bits;
277 269
278 spin_lock_irqsave(&tlmm_lock, irq_flags); 270 spin_lock_irqsave(&tlmm_lock, irq_flags);
@@ -281,14 +273,14 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type)
281 273
282 if (flow_type & IRQ_TYPE_EDGE_BOTH) { 274 if (flow_type & IRQ_TYPE_EDGE_BOTH) {
283 bits |= BIT(INTR_DECT_CTL); 275 bits |= BIT(INTR_DECT_CTL);
284 __irq_set_handler_locked(d->irq, handle_edge_irq); 276 irq_set_handler_locked(d, handle_edge_irq);
285 if ((flow_type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) 277 if ((flow_type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH)
286 __set_bit(gpio, msm_gpio.dual_edge_irqs); 278 __set_bit(gpio, msm_gpio.dual_edge_irqs);
287 else 279 else
288 __clear_bit(gpio, msm_gpio.dual_edge_irqs); 280 __clear_bit(gpio, msm_gpio.dual_edge_irqs);
289 } else { 281 } else {
290 bits &= ~BIT(INTR_DECT_CTL); 282 bits &= ~BIT(INTR_DECT_CTL);
291 __irq_set_handler_locked(d->irq, handle_level_irq); 283 irq_set_handler_locked(d, handle_level_irq);
292 __clear_bit(gpio, msm_gpio.dual_edge_irqs); 284 __clear_bit(gpio, msm_gpio.dual_edge_irqs);
293 } 285 }
294 286
@@ -331,7 +323,7 @@ static void msm_summary_irq_handler(unsigned int irq, struct irq_desc *desc)
331 323
332static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on) 324static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
333{ 325{
334 int gpio = msm_irq_to_gpio(&msm_gpio.gpio_chip, d->irq); 326 int gpio = d->hwirq;
335 327
336 if (on) { 328 if (on) {
337 if (bitmap_empty(msm_gpio.wake_irqs, MAX_NR_GPIO)) 329 if (bitmap_empty(msm_gpio.wake_irqs, MAX_NR_GPIO))
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index 1a54205860f5..b396bf3bf294 100644
--- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c
@@ -458,9 +458,9 @@ static int mvebu_gpio_irq_set_type(struct irq_data *d, unsigned int type)
458 return 0; 458 return 0;
459} 459}
460 460
461static void mvebu_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) 461static void mvebu_gpio_irq_handler(unsigned int __irq, struct irq_desc *desc)
462{ 462{
463 struct mvebu_gpio_chip *mvchip = irq_get_handler_data(irq); 463 struct mvebu_gpio_chip *mvchip = irq_desc_get_handler_data(desc);
464 struct irq_chip *chip = irq_desc_get_chip(desc); 464 struct irq_chip *chip = irq_desc_get_chip(desc);
465 u32 cause, type; 465 u32 cause, type;
466 int i; 466 int i;
@@ -787,8 +787,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
787 787
788 if (irq < 0) 788 if (irq < 0)
789 continue; 789 continue;
790 irq_set_handler_data(irq, mvchip); 790 irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler,
791 irq_set_chained_handler(irq, mvebu_gpio_irq_handler); 791 mvchip);
792 } 792 }
793 793
794 mvchip->irqbase = irq_alloc_descs(-1, 0, ngpios, -1); 794 mvchip->irqbase = irq_alloc_descs(-1, 0, ngpios, -1);
diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
index ec1eb1b7250f..0f740276ed2b 100644
--- a/drivers/gpio/gpio-mxc.c
+++ b/drivers/gpio/gpio-mxc.c
@@ -275,8 +275,8 @@ static void mxc_gpio_irq_handler(struct mxc_gpio_port *port, u32 irq_stat)
275static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc) 275static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc)
276{ 276{
277 u32 irq_stat; 277 u32 irq_stat;
278 struct mxc_gpio_port *port = irq_get_handler_data(irq); 278 struct mxc_gpio_port *port = irq_desc_get_handler_data(desc);
279 struct irq_chip *chip = irq_get_chip(irq); 279 struct irq_chip *chip = irq_desc_get_chip(desc);
280 280
281 chained_irq_enter(chip, desc); 281 chained_irq_enter(chip, desc);
282 282
@@ -292,7 +292,7 @@ static void mx2_gpio_irq_handler(u32 irq, struct irq_desc *desc)
292{ 292{
293 u32 irq_msk, irq_stat; 293 u32 irq_msk, irq_stat;
294 struct mxc_gpio_port *port; 294 struct mxc_gpio_port *port;
295 struct irq_chip *chip = irq_get_chip(irq); 295 struct irq_chip *chip = irq_desc_get_chip(desc);
296 296
297 chained_irq_enter(chip, desc); 297 chained_irq_enter(chip, desc);
298 298
diff --git a/drivers/gpio/gpio-mxs.c b/drivers/gpio/gpio-mxs.c
index 551d15d7c369..b7f383eb18d9 100644
--- a/drivers/gpio/gpio-mxs.c
+++ b/drivers/gpio/gpio-mxs.c
@@ -157,7 +157,7 @@ static void mxs_flip_edge(struct mxs_gpio_port *port, u32 gpio)
157static void mxs_gpio_irq_handler(u32 irq, struct irq_desc *desc) 157static void mxs_gpio_irq_handler(u32 irq, struct irq_desc *desc)
158{ 158{
159 u32 irq_stat; 159 u32 irq_stat;
160 struct mxs_gpio_port *port = irq_get_handler_data(irq); 160 struct mxs_gpio_port *port = irq_desc_get_handler_data(desc);
161 161
162 desc->irq_data.chip->irq_ack(&desc->irq_data); 162 desc->irq_data.chip->irq_ack(&desc->irq_data);
163 163
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index b0c57d505be7..04ea23ba37cc 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -511,9 +511,9 @@ static int omap_gpio_irq_type(struct irq_data *d, unsigned type)
511 spin_unlock_irqrestore(&bank->lock, flags); 511 spin_unlock_irqrestore(&bank->lock, flags);
512 512
513 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) 513 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
514 __irq_set_handler_locked(d->irq, handle_level_irq); 514 irq_set_handler_locked(d, handle_level_irq);
515 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) 515 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
516 __irq_set_handler_locked(d->irq, handle_edge_irq); 516 irq_set_handler_locked(d, handle_edge_irq);
517 517
518 return 0; 518 return 0;
519 519
@@ -714,7 +714,7 @@ static void omap_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
714 struct gpio_bank *bank; 714 struct gpio_bank *bank;
715 int unmasked = 0; 715 int unmasked = 0;
716 struct irq_chip *irqchip = irq_desc_get_chip(desc); 716 struct irq_chip *irqchip = irq_desc_get_chip(desc);
717 struct gpio_chip *chip = irq_get_handler_data(irq); 717 struct gpio_chip *chip = irq_desc_get_handler_data(desc);
718 718
719 chained_irq_enter(irqchip, desc); 719 chained_irq_enter(irqchip, desc);
720 720
diff --git a/drivers/gpio/gpio-pch.c b/drivers/gpio/gpio-pch.c
index 2d9a950ca2d4..34ed176df15a 100644
--- a/drivers/gpio/gpio-pch.c
+++ b/drivers/gpio/gpio-pch.c
@@ -281,9 +281,9 @@ static int pch_irq_type(struct irq_data *d, unsigned int type)
281 281
282 /* And the handler */ 282 /* And the handler */
283 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) 283 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
284 __irq_set_handler_locked(d->irq, handle_level_irq); 284 irq_set_handler_locked(d, handle_level_irq);
285 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) 285 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
286 __irq_set_handler_locked(d->irq, handle_edge_irq); 286 irq_set_handler_locked(d, handle_edge_irq);
287 287
288unlock: 288unlock:
289 spin_unlock_irqrestore(&chip->spinlock, flags); 289 spin_unlock_irqrestore(&chip->spinlock, flags);
diff --git a/drivers/gpio/gpio-sa1100.c b/drivers/gpio/gpio-sa1100.c
index 3fa22dade243..e847a4cf9326 100644
--- a/drivers/gpio/gpio-sa1100.c
+++ b/drivers/gpio/gpio-sa1100.c
@@ -173,9 +173,9 @@ static struct irq_domain *sa1100_gpio_irqdomain;
173 * and call the handler. 173 * and call the handler.
174 */ 174 */
175static void 175static void
176sa1100_gpio_handler(unsigned int irq, struct irq_desc *desc) 176sa1100_gpio_handler(unsigned int __irq, struct irq_desc *desc)
177{ 177{
178 unsigned int mask; 178 unsigned int irq, mask;
179 179
180 mask = GEDR; 180 mask = GEDR;
181 do { 181 do {
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
index 9b25c90f725c..530b27f9d66f 100644
--- a/drivers/gpio/gpio-tegra.c
+++ b/drivers/gpio/gpio-tegra.c
@@ -252,9 +252,9 @@ static int tegra_gpio_irq_set_type(struct irq_data *d, unsigned int type)
252 tegra_gpio_enable(gpio); 252 tegra_gpio_enable(gpio);
253 253
254 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) 254 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
255 __irq_set_handler_locked(d->irq, handle_level_irq); 255 irq_set_handler_locked(d, handle_level_irq);
256 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) 256 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
257 __irq_set_handler_locked(d->irq, handle_edge_irq); 257 irq_set_handler_locked(d, handle_edge_irq);
258 258
259 return 0; 259 return 0;
260} 260}
@@ -268,16 +268,14 @@ static void tegra_gpio_irq_shutdown(struct irq_data *d)
268 268
269static void tegra_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) 269static void tegra_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
270{ 270{
271 struct tegra_gpio_bank *bank;
272 int port; 271 int port;
273 int pin; 272 int pin;
274 int unmasked = 0; 273 int unmasked = 0;
275 struct irq_chip *chip = irq_desc_get_chip(desc); 274 struct irq_chip *chip = irq_desc_get_chip(desc);
275 struct tegra_gpio_bank *bank = irq_desc_get_handler_data(desc);
276 276
277 chained_irq_enter(chip, desc); 277 chained_irq_enter(chip, desc);
278 278
279 bank = irq_get_handler_data(irq);
280
281 for (port = 0; port < 4; port++) { 279 for (port = 0; port < 4; port++) {
282 int gpio = tegra_gpio_compose(bank->bank, port, 0); 280 int gpio = tegra_gpio_compose(bank->bank, port, 0);
283 unsigned long sta = tegra_gpio_readl(GPIO_INT_STA(gpio)) & 281 unsigned long sta = tegra_gpio_readl(GPIO_INT_STA(gpio)) &
diff --git a/drivers/gpio/gpio-timberdale.c b/drivers/gpio/gpio-timberdale.c
index e8f97e03c9bb..ac53ff0a8086 100644
--- a/drivers/gpio/gpio-timberdale.c
+++ b/drivers/gpio/gpio-timberdale.c
@@ -194,11 +194,12 @@ out:
194 194
195static void timbgpio_irq(unsigned int irq, struct irq_desc *desc) 195static void timbgpio_irq(unsigned int irq, struct irq_desc *desc)
196{ 196{
197 struct timbgpio *tgpio = irq_get_handler_data(irq); 197 struct timbgpio *tgpio = irq_desc_get_handler_data(desc);
198 struct irq_data *data = irq_desc_get_irq_data(desc);
198 unsigned long ipr; 199 unsigned long ipr;
199 int offset; 200 int offset;
200 201
201 desc->irq_data.chip->irq_ack(irq_get_irq_data(irq)); 202 data->chip->irq_ack(data);
202 ipr = ioread32(tgpio->membase + TGPIO_IPR); 203 ipr = ioread32(tgpio->membase + TGPIO_IPR);
203 iowrite32(ipr, tgpio->membase + TGPIO_ICR); 204 iowrite32(ipr, tgpio->membase + TGPIO_ICR);
204 205
@@ -299,8 +300,7 @@ static int timbgpio_probe(struct platform_device *pdev)
299#endif 300#endif
300 } 301 }
301 302
302 irq_set_handler_data(irq, tgpio); 303 irq_set_chained_handler_and_data(irq, timbgpio_irq, tgpio);
303 irq_set_chained_handler(irq, timbgpio_irq);
304 304
305 return 0; 305 return 0;
306} 306}
diff --git a/drivers/gpio/gpio-tz1090.c b/drivers/gpio/gpio-tz1090.c
index 445660adc898..bbac92ae4c32 100644
--- a/drivers/gpio/gpio-tz1090.c
+++ b/drivers/gpio/gpio-tz1090.c
@@ -510,8 +510,8 @@ static int tz1090_gpio_bank_probe(struct tz1090_gpio_bank_info *info)
510 gc->chip_types[1].chip.flags = IRQCHIP_MASK_ON_SUSPEND; 510 gc->chip_types[1].chip.flags = IRQCHIP_MASK_ON_SUSPEND;
511 511
512 /* Setup chained handler for this GPIO bank */ 512 /* Setup chained handler for this GPIO bank */
513 irq_set_handler_data(bank->irq, bank); 513 irq_set_chained_handler_and_data(bank->irq, tz1090_gpio_irq_handler,
514 irq_set_chained_handler(bank->irq, tz1090_gpio_irq_handler); 514 bank);
515 515
516 return 0; 516 return 0;
517} 517}
diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
index 7bd9f209ffa8..fa344388f4da 100644
--- a/drivers/gpio/gpio-vf610.c
+++ b/drivers/gpio/gpio-vf610.c
@@ -120,7 +120,7 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
120 120
121static void vf610_gpio_irq_handler(u32 irq, struct irq_desc *desc) 121static void vf610_gpio_irq_handler(u32 irq, struct irq_desc *desc)
122{ 122{
123 struct vf610_gpio_port *port = irq_get_handler_data(irq); 123 struct vf610_gpio_port *port = irq_desc_get_handler_data(desc);
124 struct irq_chip *chip = irq_desc_get_chip(desc); 124 struct irq_chip *chip = irq_desc_get_chip(desc);
125 int pin; 125 int pin;
126 unsigned long irq_isfr; 126 unsigned long irq_isfr;
diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
index 399c4be9e63c..bb3aacad4d3b 100644
--- a/drivers/gpio/gpio-zynq.c
+++ b/drivers/gpio/gpio-zynq.c
@@ -441,10 +441,10 @@ static int zynq_gpio_set_irq_type(struct irq_data *irq_data, unsigned int type)
441 gpio->base_addr + ZYNQ_GPIO_INTANY_OFFSET(bank_num)); 441 gpio->base_addr + ZYNQ_GPIO_INTANY_OFFSET(bank_num));
442 442
443 if (type & IRQ_TYPE_LEVEL_MASK) { 443 if (type & IRQ_TYPE_LEVEL_MASK) {
444 __irq_set_chip_handler_name_locked(irq_data->irq, 444 irq_set_chip_handler_name_locked(irq_data,
445 &zynq_gpio_level_irqchip, handle_fasteoi_irq, NULL); 445 &zynq_gpio_level_irqchip, handle_fasteoi_irq, NULL);
446 } else { 446 } else {
447 __irq_set_chip_handler_name_locked(irq_data->irq, 447 irq_set_chip_handler_name_locked(irq_data,
448 &zynq_gpio_edge_irqchip, handle_level_irq, NULL); 448 &zynq_gpio_edge_irqchip, handle_level_irq, NULL);
449 } 449 }
450 450
@@ -518,7 +518,7 @@ static void zynq_gpio_irqhandler(unsigned int irq, struct irq_desc *desc)
518{ 518{
519 u32 int_sts, int_enb; 519 u32 int_sts, int_enb;
520 unsigned int bank_num; 520 unsigned int bank_num;
521 struct zynq_gpio *gpio = irq_get_handler_data(irq); 521 struct zynq_gpio *gpio = irq_desc_get_handler_data(desc);
522 struct irq_chip *irqchip = irq_desc_get_chip(desc); 522 struct irq_chip *irqchip = irq_desc_get_chip(desc);
523 523
524 chained_irq_enter(irqchip, desc); 524 chained_irq_enter(irqchip, desc);
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 174447fc7457..6d60ec2c9a79 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -446,8 +446,8 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
446 * The parent irqchip is already using the chip_data for this 446 * The parent irqchip is already using the chip_data for this
447 * irqchip, so our callbacks simply use the handler_data. 447 * irqchip, so our callbacks simply use the handler_data.
448 */ 448 */
449 irq_set_handler_data(parent_irq, gpiochip); 449 irq_set_chained_handler_and_data(parent_irq, parent_handler,
450 irq_set_chained_handler(parent_irq, parent_handler); 450 gpiochip);
451 451
452 gpiochip->irq_parent = parent_irq; 452 gpiochip->irq_parent = parent_irq;
453 } 453 }