Commit 8f86a5b4 authored by Linus Walleij's avatar Linus Walleij Committed by Andy Shevchenko
Browse files

gpio: merrifield: 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: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: David Cohen <david.a.cohen@linux.intel.com>
Cc: Thierry Reding <treding@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent 7b1e8894
Loading
Loading
Loading
Loading
+16 −12
Original line number Original line Diff line number Diff line
@@ -397,6 +397,7 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *id
{
{
	const struct mrfld_gpio_pinrange *range;
	const struct mrfld_gpio_pinrange *range;
	const char *pinctrl_dev_name;
	const char *pinctrl_dev_name;
	struct gpio_irq_chip *girq;
	struct mrfld_gpio *priv;
	struct mrfld_gpio *priv;
	u32 gpio_base, irq_base;
	u32 gpio_base, irq_base;
	void __iomem *base;
	void __iomem *base;
@@ -444,6 +445,21 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *id


	raw_spin_lock_init(&priv->lock);
	raw_spin_lock_init(&priv->lock);


	girq = &priv->chip.irq;
	girq->chip = &mrfld_irqchip;
	girq->parent_handler = mrfld_irq_handler;
	girq->num_parents = 1;
	girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
				     sizeof(*girq->parents),
				     GFP_KERNEL);
	if (!girq->parents)
		return -ENOMEM;
	girq->parents[0] = pdev->irq;
	girq->default_type = IRQ_TYPE_NONE;
	girq->handler = handle_bad_irq;

	mrfld_irq_init_hw(priv);

	pci_set_drvdata(pdev, priv);
	pci_set_drvdata(pdev, priv);
	retval = devm_gpiochip_add_data(&pdev->dev, &priv->chip, priv);
	retval = devm_gpiochip_add_data(&pdev->dev, &priv->chip, priv);
	if (retval) {
	if (retval) {
@@ -465,18 +481,6 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *id
		}
		}
	}
	}


	retval = gpiochip_irqchip_add(&priv->chip, &mrfld_irqchip, irq_base,
				      handle_bad_irq, IRQ_TYPE_NONE);
	if (retval) {
		dev_err(&pdev->dev, "could not connect irqchip to gpiochip\n");
		return retval;
	}

	mrfld_irq_init_hw(priv);

	gpiochip_set_chained_irqchip(&priv->chip, &mrfld_irqchip, pdev->irq,
				     mrfld_irq_handler);

	return 0;
	return 0;
}
}