On Thu, Apr 21, 2022 at 11:42 AM Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@xxxxxxxxxxxxx> wrote: > > The fwnode of GPIO IRQ must be set to its own fwnode, not the fwnode of the > parent IRQ. Therefore, this sets own fwnode instead of the parent IRQ fwnode to > GPIO IRQ's. > > Fixes: 2ad74f40dacc ("gpio: visconti: Add Toshiba Visconti GPIO support") > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@xxxxxxxxxxxxx> > --- > > v2: Add Fixes tag. > > drivers/gpio/gpio-visconti.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpio/gpio-visconti.c b/drivers/gpio/gpio-visconti.c > index 47455810bdb9..e6534ea1eaa7 100644 > --- a/drivers/gpio/gpio-visconti.c > +++ b/drivers/gpio/gpio-visconti.c > @@ -130,7 +130,6 @@ static int visconti_gpio_probe(struct platform_device *pdev) > struct gpio_irq_chip *girq; > struct irq_domain *parent; > struct device_node *irq_parent; > - struct fwnode_handle *fwnode; > int ret; > > priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > @@ -150,14 +149,12 @@ static int visconti_gpio_probe(struct platform_device *pdev) > } > > parent = irq_find_host(irq_parent); > + of_node_put(irq_parent); > if (!parent) { > dev_err(dev, "No IRQ parent domain\n"); > return -ENODEV; > } > > - fwnode = of_node_to_fwnode(irq_parent); > - of_node_put(irq_parent); > - > ret = bgpio_init(&priv->gpio_chip, dev, 4, > priv->base + GPIO_IDATA, > priv->base + GPIO_OSET, > @@ -180,7 +177,7 @@ static int visconti_gpio_probe(struct platform_device *pdev) > > girq = &priv->gpio_chip.irq; > girq->chip = irq_chip; > - girq->fwnode = fwnode; > + girq->fwnode = of_node_to_fwnode(dev->of_node); > girq->parent_domain = parent; > girq->child_to_parent_hwirq = visconti_gpio_child_to_parent_hwirq; > girq->populate_parent_alloc_arg = visconti_gpio_populate_parent_fwspec; > -- > 2.34.1 > > Queued for fixes, thanks! Bart