On Tue, Jun 25, 2019 at 01:18:24PM +0200, Linus Walleij wrote: > We need to convert all old gpio irqchips to pass the irqchip > setup along when adding the gpio_chip. > > For chained irqchips this is a pretty straight-forward > conversion. > > Cc: Sudeep Holla <sudeep.holla@xxxxxxx> > Cc: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Looks good to me! Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> Thanks, Mani > --- > drivers/gpio/gpio-pl061.c | 30 ++++++++++++++++-------------- > 1 file changed, 16 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c > index dc42571e6fdc..84af248f5172 100644 > --- a/drivers/gpio/gpio-pl061.c > +++ b/drivers/gpio/gpio-pl061.c > @@ -286,6 +286,7 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id) > { > struct device *dev = &adev->dev; > struct pl061 *pl061; > + struct gpio_irq_chip *girq; > int ret, irq; > > pl061 = devm_kzalloc(dev, sizeof(*pl061), GFP_KERNEL); > @@ -313,10 +314,6 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id) > pl061->gc.parent = dev; > pl061->gc.owner = THIS_MODULE; > > - ret = gpiochip_add_data(&pl061->gc, pl061); > - if (ret) > - return ret; > - > /* > * irq_chip support > */ > @@ -335,19 +332,24 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id) > } > pl061->parent_irq = irq; > > - ret = gpiochip_irqchip_add(&pl061->gc, &pl061->irq_chip, > - 0, handle_bad_irq, > - IRQ_TYPE_NONE); > - if (ret) { > - dev_info(&adev->dev, "could not add irqchip\n"); > + girq = &pl061->gc.irq; > + girq->chip = &pl061->irq_chip; > + girq->parent_handler = pl061_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_bad_irq; > + > + ret = devm_gpiochip_add_data(dev, &pl061->gc, pl061); > + if (ret) > return ret; > - } > - gpiochip_set_chained_irqchip(&pl061->gc, &pl061->irq_chip, > - irq, pl061_irq_handler); > > amba_set_drvdata(adev, pl061); > - dev_info(&adev->dev, "PL061 GPIO chip @%pa registered\n", > - &adev->res.start); > + dev_info(dev, "PL061 GPIO chip %s registered\n", dev_name(dev)); > > return 0; > } > -- > 2.20.1 >