Message ID | 20191002114454.9684-1-linus.walleij@linaro.org |
---|---|
State | Accepted |
Commit | d874beca9f4e8c93cfe9b18570f65ee3c50275f3 |
Headers | show |
Series | pinctrl: ocelot: Pass irqchip when adding gpiochip | expand |
On 02/10/2019 13:44:54+0200, 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: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: Thierry Reding <thierry.reding@gmail.com> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > --- > drivers/pinctrl/pinctrl-ocelot.c | 23 ++++++++++++++--------- > 1 file changed, 14 insertions(+), 9 deletions(-) > > diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c > index fb76fb2e9ea5..eb3dd0d46d6c 100644 > --- a/drivers/pinctrl/pinctrl-ocelot.c > +++ b/drivers/pinctrl/pinctrl-ocelot.c > @@ -736,6 +736,7 @@ static int ocelot_gpiochip_register(struct platform_device *pdev, > struct ocelot_pinctrl *info) > { > struct gpio_chip *gc; > + struct gpio_irq_chip *girq; > int ret, irq; > > info->gpio_chip = ocelot_gpiolib_chip; > @@ -747,22 +748,26 @@ static int ocelot_gpiochip_register(struct platform_device *pdev, > gc->of_node = info->dev->of_node; > gc->label = "ocelot-gpio"; > > - ret = devm_gpiochip_add_data(&pdev->dev, gc, info); > - if (ret) > - return ret; > - > irq = irq_of_parse_and_map(pdev->dev.of_node, 0); > if (irq <= 0) > return irq; > > - ret = gpiochip_irqchip_add(gc, &ocelot_irqchip, 0, handle_edge_irq, > - IRQ_TYPE_NONE); > + girq = &gc->irq; > + girq->chip = &ocelot_irqchip; > + girq->parent_handler = ocelot_irq_handler; > + girq->num_parents = 1; > + girq->parents = devm_kcalloc(&pdev->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_edge_irq; > + > + ret = devm_gpiochip_add_data(&pdev->dev, gc, info); > if (ret) > return ret; > > - gpiochip_set_chained_irqchip(gc, &ocelot_irqchip, irq, > - ocelot_irq_handler); > - > return 0; > } > > -- > 2.21.0 > -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c index fb76fb2e9ea5..eb3dd0d46d6c 100644 --- a/drivers/pinctrl/pinctrl-ocelot.c +++ b/drivers/pinctrl/pinctrl-ocelot.c @@ -736,6 +736,7 @@ static int ocelot_gpiochip_register(struct platform_device *pdev, struct ocelot_pinctrl *info) { struct gpio_chip *gc; + struct gpio_irq_chip *girq; int ret, irq; info->gpio_chip = ocelot_gpiolib_chip; @@ -747,22 +748,26 @@ static int ocelot_gpiochip_register(struct platform_device *pdev, gc->of_node = info->dev->of_node; gc->label = "ocelot-gpio"; - ret = devm_gpiochip_add_data(&pdev->dev, gc, info); - if (ret) - return ret; - irq = irq_of_parse_and_map(pdev->dev.of_node, 0); if (irq <= 0) return irq; - ret = gpiochip_irqchip_add(gc, &ocelot_irqchip, 0, handle_edge_irq, - IRQ_TYPE_NONE); + girq = &gc->irq; + girq->chip = &ocelot_irqchip; + girq->parent_handler = ocelot_irq_handler; + girq->num_parents = 1; + girq->parents = devm_kcalloc(&pdev->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_edge_irq; + + ret = devm_gpiochip_add_data(&pdev->dev, gc, info); if (ret) return ret; - gpiochip_set_chained_irqchip(gc, &ocelot_irqchip, irq, - ocelot_irq_handler); - return 0; }
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: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/pinctrl/pinctrl-ocelot.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) -- 2.21.0