summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2017-11-07 13:15:47 -0500
committerLinus Walleij <linus.walleij@linaro.org>2017-11-08 08:06:21 -0500
commitf0fbe7bce733561b76a5b55c5f4625888acd3792 (patch)
tree396ecdc63cab3227779a28cf43a5a3e2c7cfe3b1
parentda80ff81a8f54611b834d73149f8ac0d59151c87 (diff)
gpio: Move irqdomain into struct gpio_irq_chip
In order to consolidate the multiple ways to associate an IRQ chip with a GPIO chip, move more fields into the new struct gpio_irq_chip. Signed-off-by: Thierry Reding <treding@nvidia.com> Acked-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--Documentation/gpio/driver.txt2
-rw-r--r--drivers/bcma/driver_gpio.c2
-rw-r--r--drivers/gpio/gpio-104-dio-48e.c2
-rw-r--r--drivers/gpio/gpio-104-idi-48.c2
-rw-r--r--drivers/gpio/gpio-104-idio-16.c2
-rw-r--r--drivers/gpio/gpio-adnp.c2
-rw-r--r--drivers/gpio/gpio-altera.c4
-rw-r--r--drivers/gpio/gpio-aspeed.c2
-rw-r--r--drivers/gpio/gpio-ath79.c2
-rw-r--r--drivers/gpio/gpio-crystalcove.c2
-rw-r--r--drivers/gpio/gpio-dln2.c2
-rw-r--r--drivers/gpio/gpio-ftgpio010.c2
-rw-r--r--drivers/gpio/gpio-ingenic.c2
-rw-r--r--drivers/gpio/gpio-intel-mid.c2
-rw-r--r--drivers/gpio/gpio-lynxpoint.c2
-rw-r--r--drivers/gpio/gpio-max732x.c2
-rw-r--r--drivers/gpio/gpio-merrifield.c2
-rw-r--r--drivers/gpio/gpio-omap.c2
-rw-r--r--drivers/gpio/gpio-pca953x.c2
-rw-r--r--drivers/gpio/gpio-pcf857x.c2
-rw-r--r--drivers/gpio/gpio-pci-idio-16.c2
-rw-r--r--drivers/gpio/gpio-pl061.c2
-rw-r--r--drivers/gpio/gpio-rcar.c2
-rw-r--r--drivers/gpio/gpio-reg.c4
-rw-r--r--drivers/gpio/gpio-stmpe.c2
-rw-r--r--drivers/gpio/gpio-tc3589x.c2
-rw-r--r--drivers/gpio/gpio-vf610.c2
-rw-r--r--drivers/gpio/gpio-wcove.c2
-rw-r--r--drivers/gpio/gpio-ws16c48.c2
-rw-r--r--drivers/gpio/gpio-xgene-sb.c2
-rw-r--r--drivers/gpio/gpio-xlp.c2
-rw-r--r--drivers/gpio/gpio-zx.c2
-rw-r--r--drivers/gpio/gpio-zynq.c2
-rw-r--r--drivers/gpio/gpiolib.c22
-rw-r--r--drivers/pinctrl/bcm/pinctrl-bcm2835.c4
-rw-r--r--drivers/pinctrl/bcm/pinctrl-iproc-gpio.c2
-rw-r--r--drivers/pinctrl/intel/pinctrl-baytrail.c2
-rw-r--r--drivers/pinctrl/intel/pinctrl-cherryview.c2
-rw-r--r--drivers/pinctrl/intel/pinctrl-intel.c2
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-37xx.c2
-rw-r--r--drivers/pinctrl/nomadik/pinctrl-nomadik.c4
-rw-r--r--drivers/pinctrl/pinctrl-amd.c2
-rw-r--r--drivers/pinctrl/pinctrl-at91.c2
-rw-r--r--drivers/pinctrl/pinctrl-coh901.c2
-rw-r--r--drivers/pinctrl/pinctrl-mcp23s08.c2
-rw-r--r--drivers/pinctrl/pinctrl-oxnas.c2
-rw-r--r--drivers/pinctrl/pinctrl-pic32.c2
-rw-r--r--drivers/pinctrl/pinctrl-pistachio.c2
-rw-r--r--drivers/pinctrl/pinctrl-st.c2
-rw-r--r--drivers/pinctrl/pinctrl-sx150x.c2
-rw-r--r--drivers/pinctrl/qcom/pinctrl-msm.c2
-rw-r--r--drivers/pinctrl/sirf/pinctrl-atlas7.c2
-rw-r--r--drivers/pinctrl/sirf/pinctrl-sirf.c2
-rw-r--r--drivers/pinctrl/spear/pinctrl-plgpio.c2
-rw-r--r--drivers/platform/x86/intel_int0002_vgpio.c2
-rw-r--r--include/linux/gpio/driver.h11
56 files changed, 78 insertions, 71 deletions
diff --git a/Documentation/gpio/driver.txt b/Documentation/gpio/driver.txt
index fc1d2f83564d..dcf6af1d9e56 100644
--- a/Documentation/gpio/driver.txt
+++ b/Documentation/gpio/driver.txt
@@ -254,7 +254,7 @@ GPIO irqchips usually fall in one of two categories:
254 static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank) 254 static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank)
255 unsigned long wa_lock_flags; 255 unsigned long wa_lock_flags;
256 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags); 256 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
257 generic_handle_irq(irq_find_mapping(bank->chip.irqdomain, bit)); 257 generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, bit));
258 raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags); 258 raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags);
259 259
260* GENERIC CHAINED GPIO irqchips: these are the same as "CHAINED GPIO irqchips", 260* GENERIC CHAINED GPIO irqchips: these are the same as "CHAINED GPIO irqchips",
diff --git a/drivers/bcma/driver_gpio.c b/drivers/bcma/driver_gpio.c
index 982d5781d3ce..2c0ffb77d738 100644
--- a/drivers/bcma/driver_gpio.c
+++ b/drivers/bcma/driver_gpio.c
@@ -113,7 +113,7 @@ static irqreturn_t bcma_gpio_irq_handler(int irq, void *dev_id)
113 return IRQ_NONE; 113 return IRQ_NONE;
114 114
115 for_each_set_bit(gpio, &irqs, gc->ngpio) 115 for_each_set_bit(gpio, &irqs, gc->ngpio)
116 generic_handle_irq(irq_find_mapping(gc->irqdomain, gpio)); 116 generic_handle_irq(irq_find_mapping(gc->irq.domain, gpio));
117 bcma_chipco_gpio_polarity(cc, irqs, val & irqs); 117 bcma_chipco_gpio_polarity(cc, irqs, val & irqs);
118 118
119 return IRQ_HANDLED; 119 return IRQ_HANDLED;
diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
index 598e209efa2d..bab3b94c5cbc 100644
--- a/drivers/gpio/gpio-104-dio-48e.c
+++ b/drivers/gpio/gpio-104-dio-48e.c
@@ -326,7 +326,7 @@ static irqreturn_t dio48e_irq_handler(int irq, void *dev_id)
326 unsigned long gpio; 326 unsigned long gpio;
327 327
328 for_each_set_bit(gpio, &irq_mask, 2) 328 for_each_set_bit(gpio, &irq_mask, 2)
329 generic_handle_irq(irq_find_mapping(chip->irqdomain, 329 generic_handle_irq(irq_find_mapping(chip->irq.domain,
330 19 + gpio*24)); 330 19 + gpio*24));
331 331
332 raw_spin_lock(&dio48egpio->lock); 332 raw_spin_lock(&dio48egpio->lock);
diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c
index 51f046e29ff7..add859d59766 100644
--- a/drivers/gpio/gpio-104-idi-48.c
+++ b/drivers/gpio/gpio-104-idi-48.c
@@ -209,7 +209,7 @@ static irqreturn_t idi_48_irq_handler(int irq, void *dev_id)
209 for_each_set_bit(bit_num, &irq_mask, 8) { 209 for_each_set_bit(bit_num, &irq_mask, 8) {
210 gpio = bit_num + boundary * 8; 210 gpio = bit_num + boundary * 8;
211 211
212 generic_handle_irq(irq_find_mapping(chip->irqdomain, 212 generic_handle_irq(irq_find_mapping(chip->irq.domain,
213 gpio)); 213 gpio));
214 } 214 }
215 } 215 }
diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-idio-16.c
index ec2ce34ff473..2f16638a0589 100644
--- a/drivers/gpio/gpio-104-idio-16.c
+++ b/drivers/gpio/gpio-104-idio-16.c
@@ -199,7 +199,7 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id)
199 int gpio; 199 int gpio;
200 200
201 for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio) 201 for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio)
202 generic_handle_irq(irq_find_mapping(chip->irqdomain, gpio)); 202 generic_handle_irq(irq_find_mapping(chip->irq.domain, gpio));
203 203
204 raw_spin_lock(&idio16gpio->lock); 204 raw_spin_lock(&idio16gpio->lock);
205 205
diff --git a/drivers/gpio/gpio-adnp.c b/drivers/gpio/gpio-adnp.c
index 7f475eef3faa..44c09904daa6 100644
--- a/drivers/gpio/gpio-adnp.c
+++ b/drivers/gpio/gpio-adnp.c
@@ -320,7 +320,7 @@ static irqreturn_t adnp_irq(int irq, void *data)
320 320
321 for_each_set_bit(bit, &pending, 8) { 321 for_each_set_bit(bit, &pending, 8) {
322 unsigned int child_irq; 322 unsigned int child_irq;
323 child_irq = irq_find_mapping(adnp->gpio.irqdomain, 323 child_irq = irq_find_mapping(adnp->gpio.irq.domain,
324 base + bit); 324 base + bit);
325 handle_nested_irq(child_irq); 325 handle_nested_irq(child_irq);
326 } 326 }
diff --git a/drivers/gpio/gpio-altera.c b/drivers/gpio/gpio-altera.c
index ccc02ed65b3c..8e76d390e653 100644
--- a/drivers/gpio/gpio-altera.c
+++ b/drivers/gpio/gpio-altera.c
@@ -211,7 +211,7 @@ static void altera_gpio_irq_edge_handler(struct irq_desc *desc)
211 altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc)); 211 altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc));
212 chip = irq_desc_get_chip(desc); 212 chip = irq_desc_get_chip(desc);
213 mm_gc = &altera_gc->mmchip; 213 mm_gc = &altera_gc->mmchip;
214 irqdomain = altera_gc->mmchip.gc.irqdomain; 214 irqdomain = altera_gc->mmchip.gc.irq.domain;
215 215
216 chained_irq_enter(chip, desc); 216 chained_irq_enter(chip, desc);
217 217
@@ -239,7 +239,7 @@ static void altera_gpio_irq_leveL_high_handler(struct irq_desc *desc)
239 altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc)); 239 altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc));
240 chip = irq_desc_get_chip(desc); 240 chip = irq_desc_get_chip(desc);
241 mm_gc = &altera_gc->mmchip; 241 mm_gc = &altera_gc->mmchip;
242 irqdomain = altera_gc->mmchip.gc.irqdomain; 242 irqdomain = altera_gc->mmchip.gc.irq.domain;
243 243
244 chained_irq_enter(chip, desc); 244 chained_irq_enter(chip, desc);
245 245
diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
index 00dc1c020198..2bfce0ab7326 100644
--- a/drivers/gpio/gpio-aspeed.c
+++ b/drivers/gpio/gpio-aspeed.c
@@ -469,7 +469,7 @@ static void aspeed_gpio_irq_handler(struct irq_desc *desc)
469 reg = ioread32(bank_irq_reg(data, bank, GPIO_IRQ_STATUS)); 469 reg = ioread32(bank_irq_reg(data, bank, GPIO_IRQ_STATUS));
470 470
471 for_each_set_bit(p, &reg, 32) { 471 for_each_set_bit(p, &reg, 32) {
472 girq = irq_find_mapping(gc->irqdomain, i * 32 + p); 472 girq = irq_find_mapping(gc->irq.domain, i * 32 + p);
473 generic_handle_irq(girq); 473 generic_handle_irq(girq);
474 } 474 }
475 475
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index 02e56e0c793a..5fad89dfab7e 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c
@@ -209,7 +209,7 @@ static void ath79_gpio_irq_handler(struct irq_desc *desc)
209 if (pending) { 209 if (pending) {
210 for_each_set_bit(irq, &pending, gc->ngpio) 210 for_each_set_bit(irq, &pending, gc->ngpio)
211 generic_handle_irq( 211 generic_handle_irq(
212 irq_linear_revmap(gc->irqdomain, irq)); 212 irq_linear_revmap(gc->irq.domain, irq));
213 } 213 }
214 214
215 chained_irq_exit(irqchip, desc); 215 chained_irq_exit(irqchip, desc);
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index e60156ec0c18..b6f0f729656c 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c
@@ -295,7 +295,7 @@ static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data)
295 295
296 for (gpio = 0; gpio < CRYSTALCOVE_GPIO_NUM; gpio++) { 296 for (gpio = 0; gpio < CRYSTALCOVE_GPIO_NUM; gpio++) {
297 if (pending & BIT(gpio)) { 297 if (pending & BIT(gpio)) {
298 virq = irq_find_mapping(cg->chip.irqdomain, gpio); 298 virq = irq_find_mapping(cg->chip.irq.domain, gpio);
299 handle_nested_irq(virq); 299 handle_nested_irq(virq);
300 } 300 }
301 } 301 }
diff --git a/drivers/gpio/gpio-dln2.c b/drivers/gpio/gpio-dln2.c
index aecb847166f5..1dada68b9a27 100644
--- a/drivers/gpio/gpio-dln2.c
+++ b/drivers/gpio/gpio-dln2.c
@@ -420,7 +420,7 @@ static void dln2_gpio_event(struct platform_device *pdev, u16 echo,
420 return; 420 return;
421 } 421 }
422 422
423 irq = irq_find_mapping(dln2->gpio.irqdomain, pin); 423 irq = irq_find_mapping(dln2->gpio.irq.domain, pin);
424 if (!irq) { 424 if (!irq) {
425 dev_err(dln2->gpio.parent, "pin %d not mapped to IRQ\n", pin); 425 dev_err(dln2->gpio.parent, "pin %d not mapped to IRQ\n", pin);
426 return; 426 return;
diff --git a/drivers/gpio/gpio-ftgpio010.c b/drivers/gpio/gpio-ftgpio010.c
index e9386f8b67f5..b7896bae83ca 100644
--- a/drivers/gpio/gpio-ftgpio010.c
+++ b/drivers/gpio/gpio-ftgpio010.c
@@ -149,7 +149,7 @@ static void ftgpio_gpio_irq_handler(struct irq_desc *desc)
149 stat = readl(g->base + GPIO_INT_STAT); 149 stat = readl(g->base + GPIO_INT_STAT);
150 if (stat) 150 if (stat)
151 for_each_set_bit(offset, &stat, gc->ngpio) 151 for_each_set_bit(offset, &stat, gc->ngpio)
152 generic_handle_irq(irq_find_mapping(gc->irqdomain, 152 generic_handle_irq(irq_find_mapping(gc->irq.domain,
153 offset)); 153 offset));
154 154
155 chained_irq_exit(irqchip, desc); 155 chained_irq_exit(irqchip, desc);
diff --git a/drivers/gpio/gpio-ingenic.c b/drivers/gpio/gpio-ingenic.c
index 254780730b95..15fb2bc796a8 100644
--- a/drivers/gpio/gpio-ingenic.c
+++ b/drivers/gpio/gpio-ingenic.c
@@ -242,7 +242,7 @@ static void ingenic_gpio_irq_handler(struct irq_desc *desc)
242 flag = gpio_ingenic_read_reg(jzgc, JZ4740_GPIO_FLAG); 242 flag = gpio_ingenic_read_reg(jzgc, JZ4740_GPIO_FLAG);
243 243
244 for_each_set_bit(i, &flag, 32) 244 for_each_set_bit(i, &flag, 32)
245 generic_handle_irq(irq_linear_revmap(gc->irqdomain, i)); 245 generic_handle_irq(irq_linear_revmap(gc->irq.domain, i));
246 chained_irq_exit(irq_chip, desc); 246 chained_irq_exit(irq_chip, desc);
247} 247}
248 248
diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c
index b76ecee82c3f..629575ea46a0 100644
--- a/drivers/gpio/gpio-intel-mid.c
+++ b/drivers/gpio/gpio-intel-mid.c
@@ -295,7 +295,7 @@ static void intel_mid_irq_handler(struct irq_desc *desc)
295 mask = BIT(gpio); 295 mask = BIT(gpio);
296 /* Clear before handling so we can't lose an edge */ 296 /* Clear before handling so we can't lose an edge */
297 writel(mask, gedr); 297 writel(mask, gedr);
298 generic_handle_irq(irq_find_mapping(gc->irqdomain, 298 generic_handle_irq(irq_find_mapping(gc->irq.domain,
299 base + gpio)); 299 base + gpio));
300 } 300 }
301 } 301 }
diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c
index fbd393b46ce0..1e557b10d73e 100644
--- a/drivers/gpio/gpio-lynxpoint.c
+++ b/drivers/gpio/gpio-lynxpoint.c
@@ -255,7 +255,7 @@ static void lp_gpio_irq_handler(struct irq_desc *desc)
255 mask = BIT(pin); 255 mask = BIT(pin);
256 /* Clear before handling so we don't lose an edge */ 256 /* Clear before handling so we don't lose an edge */
257 outl(mask, reg); 257 outl(mask, reg);
258 irq = irq_find_mapping(lg->chip.irqdomain, base + pin); 258 irq = irq_find_mapping(lg->chip.irq.domain, base + pin);
259 generic_handle_irq(irq); 259 generic_handle_irq(irq);
260 } 260 }
261 } 261 }
diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c
index 7f4d26ce5f23..c04fae1ba32a 100644
--- a/drivers/gpio/gpio-max732x.c
+++ b/drivers/gpio/gpio-max732x.c
@@ -486,7 +486,7 @@ static irqreturn_t max732x_irq_handler(int irq, void *devid)
486 486
487 do { 487 do {
488 level = __ffs(pending); 488 level = __ffs(pending);
489 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain, 489 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain,
490 level)); 490 level));
491 491
492 pending &= ~(1 << level); 492 pending &= ~(1 << level);
diff --git a/drivers/gpio/gpio-merrifield.c b/drivers/gpio/gpio-merrifield.c
index ec8560298805..dd67a31ac337 100644
--- a/drivers/gpio/gpio-merrifield.c
+++ b/drivers/gpio/gpio-merrifield.c
@@ -357,7 +357,7 @@ static void mrfld_irq_handler(struct irq_desc *desc)
357 for_each_set_bit(gpio, &pending, 32) { 357 for_each_set_bit(gpio, &pending, 32) {
358 unsigned int irq; 358 unsigned int irq;
359 359
360 irq = irq_find_mapping(gc->irqdomain, base + gpio); 360 irq = irq_find_mapping(gc->irq.domain, base + gpio);
361 generic_handle_irq(irq); 361 generic_handle_irq(irq);
362 } 362 }
363 } 363 }
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index dbf869fb63ce..ce27d6a586bf 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -733,7 +733,7 @@ static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank)
733 733
734 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags); 734 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
735 735
736 generic_handle_irq(irq_find_mapping(bank->chip.irqdomain, 736 generic_handle_irq(irq_find_mapping(bank->chip.irq.domain,
737 bit)); 737 bit));
738 738
739 raw_spin_unlock_irqrestore(&bank->wa_lock, 739 raw_spin_unlock_irqrestore(&bank->wa_lock,
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 1b9dbf691ae7..babb7bd2ba59 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -608,7 +608,7 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid)
608 for (i = 0; i < NBANK(chip); i++) { 608 for (i = 0; i < NBANK(chip); i++) {
609 while (pending[i]) { 609 while (pending[i]) {
610 level = __ffs(pending[i]); 610 level = __ffs(pending[i]);
611 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain, 611 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain,
612 level + (BANK_SZ * i))); 612 level + (BANK_SZ * i)));
613 pending[i] &= ~(1 << level); 613 pending[i] &= ~(1 << level);
614 nhandled++; 614 nhandled++;
diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c
index a4fd78b9c0e4..38fbb420c6cd 100644
--- a/drivers/gpio/gpio-pcf857x.c
+++ b/drivers/gpio/gpio-pcf857x.c
@@ -196,7 +196,7 @@ static irqreturn_t pcf857x_irq(int irq, void *data)
196 mutex_unlock(&gpio->lock); 196 mutex_unlock(&gpio->lock);
197 197
198 for_each_set_bit(i, &change, gpio->chip.ngpio) 198 for_each_set_bit(i, &change, gpio->chip.ngpio)
199 handle_nested_irq(irq_find_mapping(gpio->chip.irqdomain, i)); 199 handle_nested_irq(irq_find_mapping(gpio->chip.irq.domain, i));
200 200
201 return IRQ_HANDLED; 201 return IRQ_HANDLED;
202} 202}
diff --git a/drivers/gpio/gpio-pci-idio-16.c b/drivers/gpio/gpio-pci-idio-16.c
index 7de4f6a2cb49..57d1b7fbf07b 100644
--- a/drivers/gpio/gpio-pci-idio-16.c
+++ b/drivers/gpio/gpio-pci-idio-16.c
@@ -240,7 +240,7 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id)
240 return IRQ_NONE; 240 return IRQ_NONE;
241 241
242 for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio) 242 for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio)
243 generic_handle_irq(irq_find_mapping(chip->irqdomain, gpio)); 243 generic_handle_irq(irq_find_mapping(chip->irq.domain, gpio));
244 244
245 raw_spin_lock(&idio16gpio->lock); 245 raw_spin_lock(&idio16gpio->lock);
246 246
diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
index 6aaaab79c205..b70974cb9ef1 100644
--- a/drivers/gpio/gpio-pl061.c
+++ b/drivers/gpio/gpio-pl061.c
@@ -221,7 +221,7 @@ static void pl061_irq_handler(struct irq_desc *desc)
221 pending = readb(pl061->base + GPIOMIS); 221 pending = readb(pl061->base + GPIOMIS);
222 if (pending) { 222 if (pending) {
223 for_each_set_bit(offset, &pending, PL061_GPIO_NR) 223 for_each_set_bit(offset, &pending, PL061_GPIO_NR)
224 generic_handle_irq(irq_find_mapping(gc->irqdomain, 224 generic_handle_irq(irq_find_mapping(gc->irq.domain,
225 offset)); 225 offset));
226 } 226 }
227 227
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
index ddcff4f543bc..0ea998a3e357 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
@@ -207,7 +207,7 @@ static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id)
207 gpio_rcar_read(p, INTMSK))) { 207 gpio_rcar_read(p, INTMSK))) {
208 offset = __ffs(pending); 208 offset = __ffs(pending);
209 gpio_rcar_write(p, INTCLR, BIT(offset)); 209 gpio_rcar_write(p, INTCLR, BIT(offset));
210 generic_handle_irq(irq_find_mapping(p->gpio_chip.irqdomain, 210 generic_handle_irq(irq_find_mapping(p->gpio_chip.irq.domain,
211 offset)); 211 offset));
212 irqs_handled++; 212 irqs_handled++;
213 } 213 }
diff --git a/drivers/gpio/gpio-reg.c b/drivers/gpio/gpio-reg.c
index e85903eddc68..23e771dba4c1 100644
--- a/drivers/gpio/gpio-reg.c
+++ b/drivers/gpio/gpio-reg.c
@@ -103,8 +103,8 @@ static int gpio_reg_to_irq(struct gpio_chip *gc, unsigned offset)
103 struct gpio_reg *r = to_gpio_reg(gc); 103 struct gpio_reg *r = to_gpio_reg(gc);
104 int irq = r->irqs[offset]; 104 int irq = r->irqs[offset];
105 105
106 if (irq >= 0 && r->irqdomain) 106 if (irq >= 0 && r->irq.domain)
107 irq = irq_find_mapping(r->irqdomain, irq); 107 irq = irq_find_mapping(r->irq.domain, irq);
108 108
109 return irq; 109 return irq;
110} 110}
diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
index 001a89db5161..18d8bef76d85 100644
--- a/drivers/gpio/gpio-stmpe.c
+++ b/drivers/gpio/gpio-stmpe.c
@@ -397,7 +397,7 @@ static irqreturn_t stmpe_gpio_irq(int irq, void *dev)
397 while (stat) { 397 while (stat) {
398 int bit = __ffs(stat); 398 int bit = __ffs(stat);
399 int line = bank * 8 + bit; 399 int line = bank * 8 + bit;
400 int child_irq = irq_find_mapping(stmpe_gpio->chip.irqdomain, 400 int child_irq = irq_find_mapping(stmpe_gpio->chip.irq.domain,
401 line); 401 line);
402 402
403 handle_nested_irq(child_irq); 403 handle_nested_irq(child_irq);
diff --git a/drivers/gpio/gpio-tc3589x.c b/drivers/gpio/gpio-tc3589x.c
index 433b45ef332e..91a8ef8e7f3f 100644
--- a/drivers/gpio/gpio-tc3589x.c
+++ b/drivers/gpio/gpio-tc3589x.c
@@ -268,7 +268,7 @@ static irqreturn_t tc3589x_gpio_irq(int irq, void *dev)
268 while (stat) { 268 while (stat) {
269 int bit = __ffs(stat); 269 int bit = __ffs(stat);
270 int line = i * 8 + bit; 270 int line = i * 8 + bit;
271 int irq = irq_find_mapping(tc3589x_gpio->chip.irqdomain, 271 int irq = irq_find_mapping(tc3589x_gpio->chip.irq.domain,
272 line); 272 line);
273 273
274 handle_nested_irq(irq); 274 handle_nested_irq(irq);
diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
index cbe9e06861de..4610cc2938ad 100644
--- a/drivers/gpio/gpio-vf610.c
+++ b/drivers/gpio/gpio-vf610.c
@@ -160,7 +160,7 @@ static void vf610_gpio_irq_handler(struct irq_desc *desc)
160 for_each_set_bit(pin, &irq_isfr, VF610_GPIO_PER_PORT) { 160 for_each_set_bit(pin, &irq_isfr, VF610_GPIO_PER_PORT) {
161 vf610_gpio_writel(BIT(pin), port->base + PORT_ISFR); 161 vf610_gpio_writel(BIT(pin), port->base + PORT_ISFR);
162 162
163 generic_handle_irq(irq_find_mapping(port->gc.irqdomain, pin)); 163 generic_handle_irq(irq_find_mapping(port->gc.irq.domain, pin));
164 } 164 }
165 165
166 chained_irq_exit(chip, desc); 166 chained_irq_exit(chip, desc);
diff --git a/drivers/gpio/gpio-wcove.c b/drivers/gpio/gpio-wcove.c
index 85341eab795d..dde7c6aecbb5 100644
--- a/drivers/gpio/gpio-wcove.c
+++ b/drivers/gpio/gpio-wcove.c
@@ -350,7 +350,7 @@ static irqreturn_t wcove_gpio_irq_handler(int irq, void *data)
350 offset = (gpio > GROUP0_NR_IRQS) ? 1 : 0; 350 offset = (gpio > GROUP0_NR_IRQS) ? 1 : 0;
351 mask = (offset == 1) ? BIT(gpio - GROUP0_NR_IRQS) : 351 mask = (offset == 1) ? BIT(gpio - GROUP0_NR_IRQS) :
352 BIT(gpio); 352 BIT(gpio);
353 virq = irq_find_mapping(wg->chip.irqdomain, gpio); 353 virq = irq_find_mapping(wg->chip.irq.domain, gpio);
354 handle_nested_irq(virq); 354 handle_nested_irq(virq);
355 regmap_update_bits(wg->regmap, IRQ_STATUS_BASE + offset, 355 regmap_update_bits(wg->regmap, IRQ_STATUS_BASE + offset,
356 mask, mask); 356 mask, mask);
diff --git a/drivers/gpio/gpio-ws16c48.c b/drivers/gpio/gpio-ws16c48.c
index 5037974ac063..746648244bf3 100644
--- a/drivers/gpio/gpio-ws16c48.c
+++ b/drivers/gpio/gpio-ws16c48.c
@@ -332,7 +332,7 @@ static irqreturn_t ws16c48_irq_handler(int irq, void *dev_id)
332 int_id = inb(ws16c48gpio->base + 8 + port); 332 int_id = inb(ws16c48gpio->base + 8 + port);
333 for_each_set_bit(gpio, &int_id, 8) 333 for_each_set_bit(gpio, &int_id, 8)
334 generic_handle_irq(irq_find_mapping( 334 generic_handle_irq(irq_find_mapping(
335 chip->irqdomain, gpio + 8*port)); 335 chip->irq.domain, gpio + 8*port));
336 } 336 }
337 337
338 int_pending = inb(ws16c48gpio->base + 6) & 0x7; 338 int_pending = inb(ws16c48gpio->base + 6) & 0x7;
diff --git a/drivers/gpio/gpio-xgene-sb.c b/drivers/gpio/gpio-xgene-sb.c
index 82c3ee6da66a..4f2623c2393e 100644
--- a/drivers/gpio/gpio-xgene-sb.c
+++ b/drivers/gpio/gpio-xgene-sb.c
@@ -287,7 +287,7 @@ static int xgene_gpio_sb_probe(struct platform_device *pdev)
287 if (!priv->irq_domain) 287 if (!priv->irq_domain)
288 return -ENODEV; 288 return -ENODEV;
289 289
290 priv->gc.irqdomain = priv->irq_domain; 290 priv->gc.irq.domain = priv->irq_domain;
291 291
292 ret = devm_gpiochip_add_data(&pdev->dev, &priv->gc, priv); 292 ret = devm_gpiochip_add_data(&pdev->dev, &priv->gc, priv);
293 if (ret) { 293 if (ret) {
diff --git a/drivers/gpio/gpio-xlp.c b/drivers/gpio/gpio-xlp.c
index d857e1d8e731..e74bd43a6974 100644
--- a/drivers/gpio/gpio-xlp.c
+++ b/drivers/gpio/gpio-xlp.c
@@ -225,7 +225,7 @@ static void xlp_gpio_generic_handler(struct irq_desc *desc)
225 225
226 if (gpio_stat & BIT(gpio % XLP_GPIO_REGSZ)) 226 if (gpio_stat & BIT(gpio % XLP_GPIO_REGSZ))
227 generic_handle_irq(irq_find_mapping( 227 generic_handle_irq(irq_find_mapping(
228 priv->chip.irqdomain, gpio)); 228 priv->chip.irq.domain, gpio));
229 } 229 }
230 chained_irq_exit(irqchip, desc); 230 chained_irq_exit(irqchip, desc);
231} 231}
diff --git a/drivers/gpio/gpio-zx.c b/drivers/gpio/gpio-zx.c
index be3a87da8438..5eacad9b2692 100644
--- a/drivers/gpio/gpio-zx.c
+++ b/drivers/gpio/gpio-zx.c
@@ -170,7 +170,7 @@ static void zx_irq_handler(struct irq_desc *desc)
170 writew_relaxed(pending, chip->base + ZX_GPIO_IC); 170 writew_relaxed(pending, chip->base + ZX_GPIO_IC);
171 if (pending) { 171 if (pending) {
172 for_each_set_bit(offset, &pending, ZX_GPIO_NR) 172 for_each_set_bit(offset, &pending, ZX_GPIO_NR)
173 generic_handle_irq(irq_find_mapping(gc->irqdomain, 173 generic_handle_irq(irq_find_mapping(gc->irq.domain,
174 offset)); 174 offset));
175 } 175 }
176 176
diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
index b3cc948a2d8b..75ee877e5cd5 100644
--- a/drivers/gpio/gpio-zynq.c
+++ b/drivers/gpio/gpio-zynq.c
@@ -562,7 +562,7 @@ static void zynq_gpio_handle_bank_irq(struct zynq_gpio *gpio,
562 unsigned long pending) 562 unsigned long pending)
563{ 563{
564 unsigned int bank_offset = gpio->p_data->bank_min[bank_num]; 564 unsigned int bank_offset = gpio->p_data->bank_min[bank_num];
565 struct irq_domain *irqdomain = gpio->chip.irqdomain; 565 struct irq_domain *irqdomain = gpio->chip.irq.domain;
566 int offset; 566 int offset;
567 567
568 if (!pending) 568 if (!pending)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index d3d0b3134ba3..9ee75a45ba37 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1550,7 +1550,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
1550{ 1550{
1551 unsigned int offset; 1551 unsigned int offset;
1552 1552
1553 if (!gpiochip->irqdomain) { 1553 if (!gpiochip->irq.domain) {
1554 chip_err(gpiochip, "called %s before setting up irqchip\n", 1554 chip_err(gpiochip, "called %s before setting up irqchip\n",
1555 __func__); 1555 __func__);
1556 return; 1556 return;
@@ -1577,7 +1577,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
1577 for (offset = 0; offset < gpiochip->ngpio; offset++) { 1577 for (offset = 0; offset < gpiochip->ngpio; offset++) {
1578 if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) 1578 if (!gpiochip_irqchip_irq_valid(gpiochip, offset))
1579 continue; 1579 continue;
1580 irq_set_parent(irq_find_mapping(gpiochip->irqdomain, offset), 1580 irq_set_parent(irq_find_mapping(gpiochip->irq.domain, offset),
1581 parent_irq); 1581 parent_irq);
1582 } 1582 }
1583} 1583}
@@ -1708,7 +1708,7 @@ static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset)
1708{ 1708{
1709 if (!gpiochip_irqchip_irq_valid(chip, offset)) 1709 if (!gpiochip_irqchip_irq_valid(chip, offset))
1710 return -ENXIO; 1710 return -ENXIO;
1711 return irq_create_mapping(chip->irqdomain, offset); 1711 return irq_create_mapping(chip->irq.domain, offset);
1712} 1712}
1713 1713
1714/** 1714/**
@@ -1719,7 +1719,7 @@ static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset)
1719 */ 1719 */
1720static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) 1720static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1721{ 1721{
1722 unsigned int offset; 1722 unsigned int offset, irq;
1723 1723
1724 acpi_gpiochip_free_interrupts(gpiochip); 1724 acpi_gpiochip_free_interrupts(gpiochip);
1725 1725
@@ -1729,14 +1729,16 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1729 } 1729 }
1730 1730
1731 /* Remove all IRQ mappings and delete the domain */ 1731 /* Remove all IRQ mappings and delete the domain */
1732 if (gpiochip->irqdomain) { 1732 if (gpiochip->irq.domain) {
1733 for (offset = 0; offset < gpiochip->ngpio; offset++) { 1733 for (offset = 0; offset < gpiochip->ngpio; offset++) {
1734 if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) 1734 if (!gpiochip_irqchip_irq_valid(gpiochip, offset))
1735 continue; 1735 continue;
1736 irq_dispose_mapping( 1736
1737 irq_find_mapping(gpiochip->irqdomain, offset)); 1737 irq = irq_find_mapping(gpiochip->irq.domain, offset);
1738 irq_dispose_mapping(irq);
1738 } 1739 }
1739 irq_domain_remove(gpiochip->irqdomain); 1740
1741 irq_domain_remove(gpiochip->irq.domain);
1740 } 1742 }
1741 1743
1742 if (gpiochip->irq.chip) { 1744 if (gpiochip->irq.chip) {
@@ -1822,10 +1824,10 @@ int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,
1822 gpiochip->irq_default_type = type; 1824 gpiochip->irq_default_type = type;
1823 gpiochip->to_irq = gpiochip_to_irq; 1825 gpiochip->to_irq = gpiochip_to_irq;
1824 gpiochip->lock_key = lock_key; 1826 gpiochip->lock_key = lock_key;
1825 gpiochip->irqdomain = irq_domain_add_simple(of_node, 1827 gpiochip->irq.domain = irq_domain_add_simple(of_node,
1826 gpiochip->ngpio, first_irq, 1828 gpiochip->ngpio, first_irq,
1827 &gpiochip_domain_ops, gpiochip); 1829 &gpiochip_domain_ops, gpiochip);
1828 if (!gpiochip->irqdomain) { 1830 if (!gpiochip->irq.domain) {
1829 gpiochip->irq.chip = NULL; 1831 gpiochip->irq.chip = NULL;
1830 return -EINVAL; 1832 return -EINVAL;
1831 } 1833 }
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
index 0944310225db..fb85ab3cf662 100644
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -383,7 +383,7 @@ static void bcm2835_gpio_irq_handle_bank(struct bcm2835_pinctrl *pc,
383 /* FIXME: no clue why the code looks up the type here */ 383 /* FIXME: no clue why the code looks up the type here */
384 type = pc->irq_type[gpio]; 384 type = pc->irq_type[gpio];
385 385
386 generic_handle_irq(irq_linear_revmap(pc->gpio_chip.irqdomain, 386 generic_handle_irq(irq_linear_revmap(pc->gpio_chip.irq.irqdomain,
387 gpio)); 387 gpio));
388 } 388 }
389} 389}
@@ -665,7 +665,7 @@ static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev,
665 enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset); 665 enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
666 const char *fname = bcm2835_functions[fsel]; 666 const char *fname = bcm2835_functions[fsel];
667 int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset); 667 int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset);
668 int irq = irq_find_mapping(chip->irqdomain, offset); 668 int irq = irq_find_mapping(chip->irq.domain, offset);
669 669
670 seq_printf(s, "function %s in %s; irq %d (%s)", 670 seq_printf(s, "function %s in %s; irq %d (%s)",
671 fname, value ? "hi" : "lo", 671 fname, value ? "hi" : "lo",
diff --git a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c
index 85a8c97d9dfe..b93f62dc8733 100644
--- a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c
+++ b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c
@@ -172,7 +172,7 @@ static void iproc_gpio_irq_handler(struct irq_desc *desc)
172 172
173 for_each_set_bit(bit, &val, NGPIOS_PER_BANK) { 173 for_each_set_bit(bit, &val, NGPIOS_PER_BANK) {
174 unsigned pin = NGPIOS_PER_BANK * i + bit; 174 unsigned pin = NGPIOS_PER_BANK * i + bit;
175 int child_irq = irq_find_mapping(gc->irqdomain, pin); 175 int child_irq = irq_find_mapping(gc->irq.domain, pin);
176 176
177 /* 177 /*
178 * Clear the interrupt before invoking the 178 * Clear the interrupt before invoking the
diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
index 0f3a02495aeb..5897981e5ed3 100644
--- a/drivers/pinctrl/intel/pinctrl-baytrail.c
+++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
@@ -1627,7 +1627,7 @@ static void byt_gpio_irq_handler(struct irq_desc *desc)
1627 pending = readl(reg); 1627 pending = readl(reg);
1628 raw_spin_unlock(&vg->lock); 1628 raw_spin_unlock(&vg->lock);
1629 for_each_set_bit(pin, &pending, 32) { 1629 for_each_set_bit(pin, &pending, 32) {
1630 virq = irq_find_mapping(vg->chip.irqdomain, base + pin); 1630 virq = irq_find_mapping(vg->chip.irq.domain, base + pin);
1631 generic_handle_irq(virq); 1631 generic_handle_irq(virq);
1632 } 1632 }
1633 } 1633 }
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index 04e929fd0ffe..1cd7043edbc1 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1523,7 +1523,7 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)
1523 unsigned irq, offset; 1523 unsigned irq, offset;
1524 1524
1525 offset = pctrl->intr_lines[intr_line]; 1525 offset = pctrl->intr_lines[intr_line];
1526 irq = irq_find_mapping(gc->irqdomain, offset); 1526 irq = irq_find_mapping(gc->irq.domain, offset);
1527 generic_handle_irq(irq); 1527 generic_handle_irq(irq);
1528 } 1528 }
1529 1529
diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
index 71df0f70b61f..ffda27bfd133 100644
--- a/drivers/pinctrl/intel/pinctrl-intel.c
+++ b/drivers/pinctrl/intel/pinctrl-intel.c
@@ -1005,7 +1005,7 @@ static irqreturn_t intel_gpio_community_irq_handler(struct intel_pinctrl *pctrl,
1005 if (padno >= community->npins) 1005 if (padno >= community->npins)
1006 break; 1006 break;
1007 1007
1008 irq = irq_find_mapping(gc->irqdomain, 1008 irq = irq_find_mapping(gc->irq.domain,
1009 community->pin_base + padno); 1009 community->pin_base + padno);
1010 generic_handle_irq(irq); 1010 generic_handle_irq(irq);
1011 1011
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index e800d55c340b..d754a9b10e19 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -592,7 +592,7 @@ static void armada_37xx_irq_handler(struct irq_desc *desc)
592 struct gpio_chip *gc = irq_desc_get_handler_data(desc); 592 struct gpio_chip *gc = irq_desc_get_handler_data(desc);
593 struct irq_chip *chip = irq_desc_get_chip(desc); 593 struct irq_chip *chip = irq_desc_get_chip(desc);
594 struct armada_37xx_pinctrl *info = gpiochip_get_data(gc); 594 struct armada_37xx_pinctrl *info = gpiochip_get_data(gc);
595 struct irq_domain *d = gc->irqdomain; 595 struct irq_domain *d = gc->irq.domain;
596 int i; 596 int i;
597 597
598 chained_irq_enter(chip, desc); 598 chained_irq_enter(chip, desc);
diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
index a53f1a9b1ed2..f0e7a8c114b2 100644
--- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
+++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
@@ -413,7 +413,7 @@ nmk_gpio_disable_lazy_irq(struct nmk_gpio_chip *nmk_chip, unsigned offset)
413 u32 falling = nmk_chip->fimsc & BIT(offset); 413 u32 falling = nmk_chip->fimsc & BIT(offset);
414 u32 rising = nmk_chip->rimsc & BIT(offset); 414 u32 rising = nmk_chip->rimsc & BIT(offset);
415 int gpio = nmk_chip->chip.base + offset; 415 int gpio = nmk_chip->chip.base + offset;
416 int irq = irq_find_mapping(nmk_chip->chip.irqdomain, offset); 416 int irq = irq_find_mapping(nmk_chip->chip.irq.domain, offset);
417 struct irq_data *d = irq_get_irq_data(irq); 417 struct irq_data *d = irq_get_irq_data(irq);
418 418
419 if (!rising && !falling) 419 if (!rising && !falling)
@@ -815,7 +815,7 @@ static void __nmk_gpio_irq_handler(struct irq_desc *desc, u32 status)
815 while (status) { 815 while (status) {
816 int bit = __ffs(status); 816 int bit = __ffs(status);
817 817
818 generic_handle_irq(irq_find_mapping(chip->irqdomain, bit)); 818 generic_handle_irq(irq_find_mapping(chip->irq.domain, bit));
819 status &= ~BIT(bit); 819 status &= ~BIT(bit);
820 } 820 }
821 821
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 3f6b34febbf1..06362bf84a5b 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -532,7 +532,7 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
532 regval = readl(regs + i); 532 regval = readl(regs + i);
533 if (!(regval & PIN_IRQ_PENDING)) 533 if (!(regval & PIN_IRQ_PENDING))
534 continue; 534 continue;
535 irq = irq_find_mapping(gc->irqdomain, irqnr + i); 535 irq = irq_find_mapping(gc->irq.domain, irqnr + i);
536 generic_handle_irq(irq); 536 generic_handle_irq(irq);
537 /* Clear interrupt */ 537 /* Clear interrupt */
538 writel(regval, regs + i); 538 writel(regval, regs + i);
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 569bc28cb909..03492e3c09fa 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -1603,7 +1603,7 @@ static void gpio_irq_handler(struct irq_desc *desc)
1603 1603
1604 for_each_set_bit(n, &isr, BITS_PER_LONG) { 1604 for_each_set_bit(n, &isr, BITS_PER_LONG) {
1605 generic_handle_irq(irq_find_mapping( 1605 generic_handle_irq(irq_find_mapping(
1606 gpio_chip->irqdomain, n)); 1606 gpio_chip->irq.domain, n));
1607 } 1607 }
1608 } 1608 }
1609 chained_irq_exit(chip, desc); 1609 chained_irq_exit(chip, desc);
diff --git a/drivers/pinctrl/pinctrl-coh901.c b/drivers/pinctrl/pinctrl-coh901.c
index ac155e7d3412..7939b178c6ae 100644
--- a/drivers/pinctrl/pinctrl-coh901.c
+++ b/drivers/pinctrl/pinctrl-coh901.c
@@ -517,7 +517,7 @@ static void u300_gpio_irq_handler(struct irq_desc *desc)
517 517
518 for_each_set_bit(irqoffset, &val, U300_GPIO_PINS_PER_PORT) { 518 for_each_set_bit(irqoffset, &val, U300_GPIO_PINS_PER_PORT) {
519 int offset = pinoffset + irqoffset; 519 int offset = pinoffset + irqoffset;
520 int pin_irq = irq_find_mapping(chip->irqdomain, offset); 520 int pin_irq = irq_find_mapping(chip->irq.domain, offset);
521 521
522 dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n", 522 dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n",
523 pin_irq, offset); 523 pin_irq, offset);
diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c
index 3e40d4245512..db19a2f2f575 100644
--- a/drivers/pinctrl/pinctrl-mcp23s08.c
+++ b/drivers/pinctrl/pinctrl-mcp23s08.c
@@ -537,7 +537,7 @@ static irqreturn_t mcp23s08_irq(int irq, void *data)
537 ((gpio_bit_changed || intcap_changed) && 537 ((gpio_bit_changed || intcap_changed) &&
538 (BIT(i) & mcp->irq_fall) && !gpio_set) || 538 (BIT(i) & mcp->irq_fall) && !gpio_set) ||
539 defval_changed) { 539 defval_changed) {
540 child_irq = irq_find_mapping(mcp->chip.irqdomain, i); 540 child_irq = irq_find_mapping(mcp->chip.irq.domain, i);
541 handle_nested_irq(child_irq); 541 handle_nested_irq(child_irq);
542 } 542 }
543 } 543 }
diff --git a/drivers/pinctrl/pinctrl-oxnas.c b/drivers/pinctrl/pinctrl-oxnas.c
index 494ec9a7573a..53ec22a51f5c 100644
--- a/drivers/pinctrl/pinctrl-oxnas.c
+++ b/drivers/pinctrl/pinctrl-oxnas.c
@@ -1064,7 +1064,7 @@ static void oxnas_gpio_irq_handler(struct irq_desc *desc)
1064 stat = readl(bank->reg_base + IRQ_PENDING); 1064 stat = readl(bank->reg_base + IRQ_PENDING);
1065 1065
1066 for_each_set_bit(pin, &stat, BITS_PER_LONG) 1066 for_each_set_bit(pin, &stat, BITS_PER_LONG)
1067 generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); 1067 generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin));
1068 1068
1069 chained_irq_exit(chip, desc); 1069 chained_irq_exit(chip, desc);
1070} 1070}
diff --git a/drivers/pinctrl/pinctrl-pic32.c b/drivers/pinctrl/pinctrl-pic32.c
index 31ceb958b3fe..96390228d388 100644
--- a/drivers/pinctrl/pinctrl-pic32.c
+++ b/drivers/pinctrl/pinctrl-pic32.c
@@ -2106,7 +2106,7 @@ static void pic32_gpio_irq_handler(struct irq_desc *desc)
2106 pending = pic32_gpio_get_pending(gc, stat); 2106 pending = pic32_gpio_get_pending(gc, stat);
2107 2107
2108 for_each_set_bit(pin, &pending, BITS_PER_LONG) 2108 for_each_set_bit(pin, &pending, BITS_PER_LONG)
2109 generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); 2109 generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin));
2110 2110
2111 chained_irq_exit(chip, desc); 2111 chained_irq_exit(chip, desc);
2112} 2112}
diff --git a/drivers/pinctrl/pinctrl-pistachio.c b/drivers/pinctrl/pinctrl-pistachio.c
index 55375b1b3cc8..302190d1558d 100644
--- a/drivers/pinctrl/pinctrl-pistachio.c
+++ b/drivers/pinctrl/pinctrl-pistachio.c
@@ -1307,7 +1307,7 @@ static void pistachio_gpio_irq_handler(struct irq_desc *desc)
1307 pending = gpio_readl(bank, GPIO_INTERRUPT_STATUS) & 1307 pending = gpio_readl(bank, GPIO_INTERRUPT_STATUS) &
1308 gpio_readl(bank, GPIO_INTERRUPT_EN); 1308 gpio_readl(bank, GPIO_INTERRUPT_EN);
1309 for_each_set_bit(pin, &pending, 16) 1309 for_each_set_bit(pin, &pending, 16)
1310 generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); 1310 generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin));
1311 chained_irq_exit(chip, desc); 1311 chained_irq_exit(chip, desc);
1312} 1312}
1313 1313
diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index a5205b94b2e6..2081c67667a8 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1408,7 +1408,7 @@ static void __gpio_irq_handler(struct st_gpio_bank *bank)
1408 continue; 1408 continue;
1409 } 1409 }
1410 1410
1411 generic_handle_irq(irq_find_mapping(bank->gpio_chip.irqdomain, n)); 1411 generic_handle_irq(irq_find_mapping(bank->gpio_chip.irq.domain, n));
1412 } 1412 }
1413 } 1413 }
1414} 1414}
diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c
index 7450f5118445..7db4f6a6eb17 100644
--- a/drivers/pinctrl/pinctrl-sx150x.c
+++ b/drivers/pinctrl/pinctrl-sx150x.c
@@ -561,7 +561,7 @@ static irqreturn_t sx150x_irq_thread_fn(int irq, void *dev_id)
561 561
562 status = val; 562 status = val;
563 for_each_set_bit(n, &status, pctl->data->ngpios) 563 for_each_set_bit(n, &status, pctl->data->ngpios)
564 handle_nested_irq(irq_find_mapping(pctl->gpio.irqdomain, n)); 564 handle_nested_irq(irq_find_mapping(pctl->gpio.irq.domain, n));
565 565
566 return IRQ_HANDLED; 566 return IRQ_HANDLED;
567} 567}
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index ff491da64dab..7a960590ecaa 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -795,7 +795,7 @@ static void msm_gpio_irq_handler(struct irq_desc *desc)
795 g = &pctrl->soc->groups[i]; 795 g = &pctrl->soc->groups[i];
796 val = readl(pctrl->regs + g->intr_status_reg); 796 val = readl(pctrl->regs + g->intr_status_reg);
797 if (val & BIT(g->intr_status_bit)) { 797 if (val & BIT(g->intr_status_bit)) {
798 irq_pin = irq_find_mapping(gc->irqdomain, i); 798 irq_pin = irq_find_mapping(gc->irq.domain, i);
799 generic_handle_irq(irq_pin); 799 generic_handle_irq(irq_pin);
800 handled++; 800 handled++;
801 } 801 }
diff --git a/drivers/pinctrl/sirf/pinctrl-atlas7.c b/drivers/pinctrl/sirf/pinctrl-atlas7.c
index 4db9323251e3..f5cef6e5fa3e 100644
--- a/drivers/pinctrl/sirf/pinctrl-atlas7.c
+++ b/drivers/pinctrl/sirf/pinctrl-atlas7.c
@@ -5820,7 +5820,7 @@ static void atlas7_gpio_handle_irq(struct irq_desc *desc)
5820 __func__, gc->label, 5820 __func__, gc->label,
5821 bank->gpio_offset + pin_in_bank); 5821 bank->gpio_offset + pin_in_bank);
5822 generic_handle_irq( 5822 generic_handle_irq(
5823 irq_find_mapping(gc->irqdomain, 5823 irq_find_mapping(gc->irq.domain,
5824 bank->gpio_offset + pin_in_bank)); 5824 bank->gpio_offset + pin_in_bank));
5825 } 5825 }
5826 5826
diff --git a/drivers/pinctrl/sirf/pinctrl-sirf.c b/drivers/pinctrl/sirf/pinctrl-sirf.c
index d3ef05973901..8b14a1f1e671 100644
--- a/drivers/pinctrl/sirf/pinctrl-sirf.c
+++ b/drivers/pinctrl/sirf/pinctrl-sirf.c
@@ -587,7 +587,7 @@ static void sirfsoc_gpio_handle_irq(struct irq_desc *desc)
587 if ((status & 0x1) && (ctrl & SIRFSOC_GPIO_CTL_INTR_EN_MASK)) { 587 if ((status & 0x1) && (ctrl & SIRFSOC_GPIO_CTL_INTR_EN_MASK)) {
588 pr_debug("%s: gpio id %d idx %d happens\n", 588 pr_debug("%s: gpio id %d idx %d happens\n",
589 __func__, bank->id, idx); 589 __func__, bank->id, idx);
590 generic_handle_irq(irq_find_mapping(gc->irqdomain, idx + 590 generic_handle_irq(irq_find_mapping(gc->irq.domain, idx +
591 bank->id * SIRFSOC_GPIO_BANK_SIZE)); 591 bank->id * SIRFSOC_GPIO_BANK_SIZE));
592 } 592 }
593 593
diff --git a/drivers/pinctrl/spear/pinctrl-plgpio.c b/drivers/pinctrl/spear/pinctrl-plgpio.c
index cf6d68c7345b..72ae6bccee55 100644
--- a/drivers/pinctrl/spear/pinctrl-plgpio.c
+++ b/drivers/pinctrl/spear/pinctrl-plgpio.c
@@ -401,7 +401,7 @@ static void plgpio_irq_handler(struct irq_desc *desc)
401 /* get correct irq line number */ 401 /* get correct irq line number */
402 pin = i * MAX_GPIO_PER_REG + pin; 402 pin = i * MAX_GPIO_PER_REG + pin;
403 generic_handle_irq( 403 generic_handle_irq(
404 irq_find_mapping(gc->irqdomain, pin)); 404 irq_find_mapping(gc->irq.domain, pin));
405 } 405 }
406 } 406 }
407 chained_irq_exit(irqchip, desc); 407 chained_irq_exit(irqchip, desc);
diff --git a/drivers/platform/x86/intel_int0002_vgpio.c b/drivers/platform/x86/intel_int0002_vgpio.c
index 92dc230ef5b2..f6b3af73dea5 100644
--- a/drivers/platform/x86/intel_int0002_vgpio.c
+++ b/drivers/platform/x86/intel_int0002_vgpio.c
@@ -119,7 +119,7 @@ static irqreturn_t int0002_irq(int irq, void *data)
119 if (!(gpe_sts_reg & GPE0A_PME_B0_STS_BIT)) 119 if (!(gpe_sts_reg & GPE0A_PME_B0_STS_BIT))
120 return IRQ_NONE; 120 return IRQ_NONE;
121 121
122 generic_handle_irq(irq_find_mapping(chip->irqdomain, 122 generic_handle_irq(irq_find_mapping(chip->irq.domain,
123 GPE0A_PME_B0_VIRT_GPIO_PIN)); 123 GPE0A_PME_B0_VIRT_GPIO_PIN));
124 124
125 pm_system_wakeup(); 125 pm_system_wakeup();
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index a79b3b18fadd..c5dfa8c0b829 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -32,6 +32,14 @@ struct gpio_irq_chip {
32 struct irq_chip *chip; 32 struct irq_chip *chip;
33 33
34 /** 34 /**
35 * @domain:
36 *
37 * Interrupt translation domain; responsible for mapping between GPIO
38 * hwirq number and Linux IRQ number.
39 */
40 struct irq_domain *domain;
41
42 /**
35 * @domain_ops: 43 * @domain_ops:
36 * 44 *
37 * Table of interrupt domain operations for this IRQ chip. 45 * Table of interrupt domain operations for this IRQ chip.
@@ -124,8 +132,6 @@ static inline struct gpio_irq_chip *to_gpio_irq_chip(struct irq_chip *chip)
124 * safely. 132 * safely.
125 * @bgpio_dir: shadowed direction register for generic GPIO to clear/set 133 * @bgpio_dir: shadowed direction register for generic GPIO to clear/set
126 * direction safely. 134 * direction safely.
127 * @irqdomain: Interrupt translation domain; responsible for mapping
128 * between GPIO hwirq number and linux irq number
129 * @irq_handler: the irq handler to use (often a predefined irq core function) 135 * @irq_handler: the irq handler to use (often a predefined irq core function)
130 * for GPIO IRQs, provided by GPIO driver 136 * for GPIO IRQs, provided by GPIO driver
131 * @irq_default_type: default IRQ triggering type applied during GPIO driver 137 * @irq_default_type: default IRQ triggering type applied during GPIO driver
@@ -208,7 +214,6 @@ struct gpio_chip {
208 * With CONFIG_GPIOLIB_IRQCHIP we get an irqchip inside the gpiolib 214 * With CONFIG_GPIOLIB_IRQCHIP we get an irqchip inside the gpiolib
209 * to handle IRQs for most practical cases. 215 * to handle IRQs for most practical cases.
210 */ 216 */
211 struct irq_domain *irqdomain;
212 irq_flow_handler_t irq_handler; 217 irq_flow_handler_t irq_handler;
213 unsigned int irq_default_type; 218 unsigned int irq_default_type;
214 unsigned int irq_chained_parent; 219 unsigned int irq_chained_parent;