mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
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 ocelot_pinctrl *info)
|
||||||
{
|
{
|
||||||
struct gpio_chip *gc;
|
struct gpio_chip *gc;
|
||||||
|
struct gpio_irq_chip *girq;
|
||||||
int ret, irq;
|
int ret, irq;
|
||||||
|
|
||||||
info->gpio_chip = ocelot_gpiolib_chip;
|
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->of_node = info->dev->of_node;
|
||||||
gc->label = "ocelot-gpio";
|
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);
|
irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
|
||||||
if (irq <= 0)
|
if (irq <= 0)
|
||||||
return irq;
|
return irq;
|
||||||
|
|
||||||
ret = gpiochip_irqchip_add(gc, &ocelot_irqchip, 0, handle_edge_irq,
|
girq = &gc->irq;
|
||||||
IRQ_TYPE_NONE);
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
gpiochip_set_chained_irqchip(gc, &ocelot_irqchip, irq,
|
|
||||||
ocelot_irq_handler);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user