diff options
author | Thierry Reding <treding@nvidia.com> | 2017-11-07 13:15:47 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2017-11-08 08:06:21 -0500 |
commit | f0fbe7bce733561b76a5b55c5f4625888acd3792 (patch) | |
tree | 396ecdc63cab3227779a28cf43a5a3e2c7cfe3b1 | |
parent | da80ff81a8f54611b834d73149f8ac0d59151c87 (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>
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, ®, 32) { | 471 | for_each_set_bit(p, ®, 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 | */ |
1720 | static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) | 1720 | static 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; |