Message ID | 20190812132554.18313-1-linus.walleij@linaro.org |
---|---|
State | Accepted |
Commit | 6f265e5d4da7a7de326ced5a7ef8f982dfd44390 |
Headers | show |
Series | pinctrl: bcm-iproc: Pass irqchip when adding gpiochip | expand |
On 2019-08-12 6:25 a.m., Linus Walleij wrote: > We need to convert all old gpio irqchips to pass the irqchip > setup along when adding the gpio_chip. For more info see > drivers/gpio/TODO. > > For chained irqchips this is a pretty straight-forward > conversion. > > Cc: Pramod Kumar <pramodku@broadcom.com> > Cc: Ray Jui <rjui@broadcom.com> > Cc: Scott Branden <sbranden@broadcom.com> > Cc: Thierry Reding <treding@nvidia.com> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Scott Branden <scott.branden@broadcom.com> > --- > drivers/pinctrl/bcm/pinctrl-iproc-gpio.c | 33 ++++++++++++++---------- > 1 file changed, 19 insertions(+), 14 deletions(-) > > diff --git a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c > index 18ff01727e0e..ee01306c62fa 100644 > --- a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c > +++ b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c > @@ -780,6 +780,25 @@ static int iproc_gpio_probe(struct platform_device *pdev) > chip->pinmux_is_supported = of_property_read_bool(dev->of_node, > "gpio-ranges"); > > + /* optional GPIO interrupt support */ > + irq = platform_get_irq(pdev, 0); > + if (irq) { > + struct gpio_irq_chip *girq; > + > + girq = &gc->irq; > + girq->chip = &iproc_gpio_irq_chip; > + girq->parent_handler = iproc_gpio_irq_handler; > + girq->num_parents = 1; > + girq->parents = devm_kcalloc(dev, 1, > + sizeof(*girq->parents), > + GFP_KERNEL); > + if (!girq->parents) > + return -ENOMEM; > + girq->parents[0] = irq; > + girq->default_type = IRQ_TYPE_NONE; > + girq->handler = handle_simple_irq; > + } > + > ret = gpiochip_add_data(gc, chip); > if (ret < 0) { > dev_err(dev, "unable to add GPIO chip\n"); > @@ -804,20 +823,6 @@ static int iproc_gpio_probe(struct platform_device *pdev) > } > } > > - /* optional GPIO interrupt support */ > - irq = platform_get_irq(pdev, 0); > - if (irq) { > - ret = gpiochip_irqchip_add(gc, &iproc_gpio_irq_chip, 0, > - handle_simple_irq, IRQ_TYPE_NONE); > - if (ret) { > - dev_err(dev, "no GPIO irqchip\n"); > - goto err_rm_gpiochip; > - } > - > - gpiochip_set_chained_irqchip(gc, &iproc_gpio_irq_chip, irq, > - iproc_gpio_irq_handler); > - } > - > return 0; > > err_rm_gpiochip:
diff --git a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c index 18ff01727e0e..ee01306c62fa 100644 --- a/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c +++ b/drivers/pinctrl/bcm/pinctrl-iproc-gpio.c @@ -780,6 +780,25 @@ static int iproc_gpio_probe(struct platform_device *pdev) chip->pinmux_is_supported = of_property_read_bool(dev->of_node, "gpio-ranges"); + /* optional GPIO interrupt support */ + irq = platform_get_irq(pdev, 0); + if (irq) { + struct gpio_irq_chip *girq; + + girq = &gc->irq; + girq->chip = &iproc_gpio_irq_chip; + girq->parent_handler = iproc_gpio_irq_handler; + girq->num_parents = 1; + girq->parents = devm_kcalloc(dev, 1, + sizeof(*girq->parents), + GFP_KERNEL); + if (!girq->parents) + return -ENOMEM; + girq->parents[0] = irq; + girq->default_type = IRQ_TYPE_NONE; + girq->handler = handle_simple_irq; + } + ret = gpiochip_add_data(gc, chip); if (ret < 0) { dev_err(dev, "unable to add GPIO chip\n"); @@ -804,20 +823,6 @@ static int iproc_gpio_probe(struct platform_device *pdev) } } - /* optional GPIO interrupt support */ - irq = platform_get_irq(pdev, 0); - if (irq) { - ret = gpiochip_irqchip_add(gc, &iproc_gpio_irq_chip, 0, - handle_simple_irq, IRQ_TYPE_NONE); - if (ret) { - dev_err(dev, "no GPIO irqchip\n"); - goto err_rm_gpiochip; - } - - gpiochip_set_chained_irqchip(gc, &iproc_gpio_irq_chip, irq, - iproc_gpio_irq_handler); - } - return 0; err_rm_gpiochip:
We need to convert all old gpio irqchips to pass the irqchip setup along when adding the gpio_chip. For more info see drivers/gpio/TODO. For chained irqchips this is a pretty straight-forward conversion. Cc: Pramod Kumar <pramodku@broadcom.com> Cc: Ray Jui <rjui@broadcom.com> Cc: Scott Branden <sbranden@broadcom.com> Cc: Thierry Reding <treding@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/pinctrl/bcm/pinctrl-iproc-gpio.c | 33 ++++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) -- 2.21.0