On Thu, Jan 09, 2020 at 08:53:29AM +0100, 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. > Pushed to my review and testing queue, thanks! > Cc: Hans de Goede <hdegoede@xxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > --- > Please apply this to the Intel pinctrl tree when you are > happy with the result! > --- > drivers/pinctrl/intel/pinctrl-intel.c | 26 +++++++++++++------------- > 1 file changed, 13 insertions(+), 13 deletions(-) > > diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c > index b479bcf1e246..ffacd77861f7 100644 > --- a/drivers/pinctrl/intel/pinctrl-intel.c > +++ b/drivers/pinctrl/intel/pinctrl-intel.c > @@ -1224,6 +1224,7 @@ static unsigned int intel_gpio_ngpio(const struct intel_pinctrl *pctrl) > static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) > { > int ret; > + struct gpio_irq_chip *girq; > > pctrl->chip = intel_gpio_chip; > > @@ -1244,16 +1245,9 @@ static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) > pctrl->irqchip.irq_set_wake = intel_gpio_irq_wake; > pctrl->irqchip.flags = IRQCHIP_MASK_ON_SUSPEND; > > - ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl); > - if (ret) { > - dev_err(pctrl->dev, "failed to register gpiochip\n"); > - return ret; > - } > - > /* > - * We need to request the interrupt here (instead of providing chip > - * to the irq directly) because on some platforms several GPIO > - * controllers share the same interrupt line. > + * On some platforms several GPIO controllers share the same interrupt > + * line. > */ > ret = devm_request_irq(pctrl->dev, irq, intel_gpio_irq, > IRQF_SHARED | IRQF_NO_THREAD, > @@ -1263,14 +1257,20 @@ static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) > return ret; > } > > - ret = gpiochip_irqchip_add(&pctrl->chip, &pctrl->irqchip, 0, > - handle_bad_irq, IRQ_TYPE_NONE); > + girq = &pctrl->chip.irq; > + girq->chip = &pctrl->irqchip; > + /* This will let us handle the IRQ in the driver */ > + girq->parent_handler = NULL; > + girq->num_parents = 0; > + girq->default_type = IRQ_TYPE_NONE; > + girq->handler = handle_bad_irq; > + > + ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl); > if (ret) { > - dev_err(pctrl->dev, "failed to add irqchip\n"); > + dev_err(pctrl->dev, "failed to register gpiochip\n"); > return ret; > } > > - gpiochip_set_chained_irqchip(&pctrl->chip, &pctrl->irqchip, irq, NULL); > return 0; > } > > -- > 2.23.0 > -- With Best Regards, Andy Shevchenko