pinctrl: ocelot: Pass irqchip when adding gpiochip
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: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20191002114454.9684-1-linus.walleij@linaro.org
This commit is contained in:
parent
3aec5006c2
commit
d874beca9f
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue