Message ID | 20200721125223.344411-1-linus.walleij@linaro.org |
---|---|
State | New |
Headers | show |
Series | pinctrl: mcp23s08: Use irqchip template | expand |
On Tue, Jul 21, 2020 at 3:53 PM Linus Walleij <linus.walleij@linaro.org> wrote: > > This makes the driver use the irqchip template to assign > properties to the gpio_irq_chip instead of using the > explicit calls to gpiochip_irqchip_add_nested() and > gpiochip_set_nested_irqchip(). The irqchip is instead > added while adding the gpiochip. For the code Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> I can't test right now, though. > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Cc: Jan Kundrát <jan.kundrat@cesnet.cz> > Cc: Phil Reid <preid@electromag.com.au> > Cc: Lars Poeschel <poeschel@lemonage.de> > Cc: Jason Kridner <jkridner@gmail.com> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/pinctrl/pinctrl-mcp23s08.c | 44 ++++++++++-------------------- > 1 file changed, 14 insertions(+), 30 deletions(-) > > diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c > index 151931b593f6..42b12ea14d6b 100644 > --- a/drivers/pinctrl/pinctrl-mcp23s08.c > +++ b/drivers/pinctrl/pinctrl-mcp23s08.c > @@ -522,29 +522,6 @@ static int mcp23s08_irq_setup(struct mcp23s08 *mcp) > return 0; > } > > -static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp) > -{ > - struct gpio_chip *chip = &mcp->chip; > - int err; > - > - err = gpiochip_irqchip_add_nested(chip, > - &mcp->irq_chip, > - 0, > - handle_simple_irq, > - IRQ_TYPE_NONE); > - if (err) { > - dev_err(chip->parent, > - "could not connect irqchip to gpiochip: %d\n", err); > - return err; > - } > - > - gpiochip_set_nested_irqchip(chip, > - &mcp->irq_chip, > - mcp->irq); > - > - return 0; > -} > - > /*----------------------------------------------------------------------*/ > > int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, > @@ -589,10 +566,6 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, > if (ret < 0) > goto fail; > > - ret = devm_gpiochip_add_data(dev, &mcp->chip, mcp); > - if (ret < 0) > - goto fail; > - > mcp->irq_controller = > device_property_read_bool(dev, "interrupt-controller"); > if (mcp->irq && mcp->irq_controller) { > @@ -629,11 +602,22 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, > } > > if (mcp->irq && mcp->irq_controller) { > - ret = mcp23s08_irqchip_setup(mcp); > - if (ret) > - goto fail; > + struct gpio_irq_chip *girq = &mcp->chip.irq; > + > + girq->chip = &mcp->irq_chip; > + /* This will let us handle the parent IRQ in the driver */ > + girq->parent_handler = NULL; > + girq->num_parents = 0; > + girq->parents = NULL; > + girq->default_type = IRQ_TYPE_NONE; > + girq->handler = handle_simple_irq; > + girq->threaded = true; > } > > + ret = devm_gpiochip_add_data(dev, &mcp->chip, mcp); > + if (ret < 0) > + goto fail; > + > mcp->pinctrl_desc.pctlops = &mcp_pinctrl_ops; > mcp->pinctrl_desc.confops = &mcp_pinconf_ops; > mcp->pinctrl_desc.npins = mcp->chip.ngpio; > -- > 2.26.2 >
diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index 151931b593f6..42b12ea14d6b 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -522,29 +522,6 @@ static int mcp23s08_irq_setup(struct mcp23s08 *mcp) return 0; } -static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp) -{ - struct gpio_chip *chip = &mcp->chip; - int err; - - err = gpiochip_irqchip_add_nested(chip, - &mcp->irq_chip, - 0, - handle_simple_irq, - IRQ_TYPE_NONE); - if (err) { - dev_err(chip->parent, - "could not connect irqchip to gpiochip: %d\n", err); - return err; - } - - gpiochip_set_nested_irqchip(chip, - &mcp->irq_chip, - mcp->irq); - - return 0; -} - /*----------------------------------------------------------------------*/ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, @@ -589,10 +566,6 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, if (ret < 0) goto fail; - ret = devm_gpiochip_add_data(dev, &mcp->chip, mcp); - if (ret < 0) - goto fail; - mcp->irq_controller = device_property_read_bool(dev, "interrupt-controller"); if (mcp->irq && mcp->irq_controller) { @@ -629,11 +602,22 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, } if (mcp->irq && mcp->irq_controller) { - ret = mcp23s08_irqchip_setup(mcp); - if (ret) - goto fail; + struct gpio_irq_chip *girq = &mcp->chip.irq; + + girq->chip = &mcp->irq_chip; + /* This will let us handle the parent IRQ in the driver */ + girq->parent_handler = NULL; + girq->num_parents = 0; + girq->parents = NULL; + girq->default_type = IRQ_TYPE_NONE; + girq->handler = handle_simple_irq; + girq->threaded = true; } + ret = devm_gpiochip_add_data(dev, &mcp->chip, mcp); + if (ret < 0) + goto fail; + mcp->pinctrl_desc.pctlops = &mcp_pinctrl_ops; mcp->pinctrl_desc.confops = &mcp_pinconf_ops; mcp->pinctrl_desc.npins = mcp->chip.ngpio;
This makes the driver use the irqchip template to assign properties to the gpio_irq_chip instead of using the explicit calls to gpiochip_irqchip_add_nested() and gpiochip_set_nested_irqchip(). The irqchip is instead added while adding the gpiochip. Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Jan Kundrát <jan.kundrat@cesnet.cz> Cc: Phil Reid <preid@electromag.com.au> Cc: Lars Poeschel <poeschel@lemonage.de> Cc: Jason Kridner <jkridner@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/pinctrl/pinctrl-mcp23s08.c | 44 ++++++++++-------------------- 1 file changed, 14 insertions(+), 30 deletions(-)