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@xxxxxxxxxxx> > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Reviewed-by: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> > --- > 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