This switches the legacy irqdomain to the simple one, which will
auto-allocate descriptors, and also make sure that we use
irq_create_mapping() in the to_irq function.

Signed-off-by: Linus Walleij <[email protected]>
---
 drivers/gpio/gpio-pca953x.c | 35 ++++++++++-------------------------
 1 file changed, 10 insertions(+), 25 deletions(-)

diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 3a68aed..51e7f15 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -89,7 +89,6 @@ struct pca953x_chip {
        u8 irq_stat[MAX_BANK];
        u8 irq_trig_raise[MAX_BANK];
        u8 irq_trig_fall[MAX_BANK];
-       int      irq_base;
        struct irq_domain *domain;
 #endif
 
@@ -372,7 +371,7 @@ static int pca953x_gpio_to_irq(struct gpio_chip *gc, 
unsigned off)
        struct pca953x_chip *chip;
 
        chip = container_of(gc, struct pca953x_chip, gpio_chip);
-       return chip->irq_base + off;
+       return irq_create_mapping(chip->domain, off);
 }
 
 static void pca953x_irq_mask(struct irq_data *d)
@@ -552,20 +551,13 @@ static int pca953x_irq_setup(struct pca953x_chip *chip,
                        chip->irq_stat[i] &= chip->reg_direction[i];
                mutex_init(&chip->irq_lock);
 
-               chip->irq_base = irq_alloc_descs(-1, irq_base, 
chip->gpio_chip.ngpio, -1);
-               if (chip->irq_base < 0)
-                       goto out_failed;
-
-               chip->domain = irq_domain_add_legacy(client->dev.of_node,
+               chip->domain = irq_domain_add_simple(client->dev.of_node,
                                                chip->gpio_chip.ngpio,
-                                               chip->irq_base,
-                                               0,
+                                               irq_base,
                                                &irq_domain_simple_ops,
                                                NULL);
-               if (!chip->domain) {
-                       ret = -ENODEV;
-                       goto out_irqdesc_free;
-               }
+               if (!chip->domain)
+                       return -ENODEV;
 
                for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
                        int irq = lvl + chip->irq_base;
@@ -582,32 +574,25 @@ static int pca953x_irq_setup(struct pca953x_chip *chip,
                }
 
                ret = request_threaded_irq(client->irq,
-                                          NULL,
-                                          pca953x_irq_handler,
-                                          IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-                                          dev_name(&client->dev), chip);
+                                       NULL,
+                                       pca953x_irq_handler,
+                                       IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+                                       dev_name(&client->dev), chip);
                if (ret) {
                        dev_err(&client->dev, "failed to request irq %d\n",
                                client->irq);
-                       goto out_irqdesc_free;
+                       return ret;
                }
 
                chip->gpio_chip.to_irq = pca953x_gpio_to_irq;
        }
 
        return 0;
-
-out_irqdesc_free:
-       irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
-out_failed:
-       chip->irq_base = -1;
-       return ret;
 }
 
 static void pca953x_irq_teardown(struct pca953x_chip *chip)
 {
        if (chip->irq_base != -1) {
-               irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
                free_irq(chip->client->irq, chip);
        }
 }
-- 
1.8.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to