Commit 8069e69a authored by Linus Walleij's avatar Linus Walleij Committed by Andy Shevchenko
Browse files

gpio: intel-mid: 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 a7db2856
Loading
Loading
Loading
Loading
+17 −18
Original line number Original line Diff line number Diff line
@@ -329,6 +329,7 @@ static int intel_gpio_probe(struct pci_dev *pdev,
	u32 gpio_base;
	u32 gpio_base;
	u32 irq_base;
	u32 irq_base;
	int retval;
	int retval;
	struct gpio_irq_chip *girq;
	struct intel_mid_gpio_ddata *ddata =
	struct intel_mid_gpio_ddata *ddata =
				(struct intel_mid_gpio_ddata *)id->driver_data;
				(struct intel_mid_gpio_ddata *)id->driver_data;


@@ -369,6 +370,22 @@ static int intel_gpio_probe(struct pci_dev *pdev,


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


	girq = &priv->chip.irq;
	girq->chip = &intel_mid_irqchip;
	girq->parent_handler = intel_mid_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->first = irq_base;
	girq->default_type = IRQ_TYPE_NONE;
	girq->handler = handle_simple_irq;

	intel_mid_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) {
@@ -376,24 +393,6 @@ static int intel_gpio_probe(struct pci_dev *pdev,
		return retval;
		return retval;
	}
	}


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

	intel_mid_irq_init_hw(priv);

	gpiochip_set_chained_irqchip(&priv->chip,
				     &intel_mid_irqchip,
				     pdev->irq,
				     intel_mid_irq_handler);

	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_allow(&pdev->dev);
	pm_runtime_allow(&pdev->dev);