Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d9dd99b authored by Benoit Cousson's avatar Benoit Cousson Committed by Samuel Ortiz
Browse files

gpio/twl: Allocate irq_desc dynamically for SPARSE_IRQ support



Do not use the board pdata for irq_base, but allocate them dynamically
to allow a proper support of SPARSE_IRQ.

Fix an unneeded line wrap.

Signed-off-by: default avatarBenoit Cousson <b-cousson@ti.com>
Acked-by: default avatarFelipe Balbi <balbi@ti.com>
Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 364cedb2
Loading
Loading
Loading
Loading
+17 −16
Original line number Original line Diff line number Diff line
@@ -395,22 +395,25 @@ static int gpio_twl4030_remove(struct platform_device *pdev);
static int __devinit gpio_twl4030_probe(struct platform_device *pdev)
static int __devinit gpio_twl4030_probe(struct platform_device *pdev)
{
{
	struct twl4030_gpio_platform_data *pdata = pdev->dev.platform_data;
	struct twl4030_gpio_platform_data *pdata = pdev->dev.platform_data;
	int ret;
	int ret, irq_base;


	/* maybe setup IRQs */
	/* maybe setup IRQs */
	if (pdata->irq_base) {
	if (is_module()) {
	if (is_module()) {
			dev_err(&pdev->dev,
		dev_err(&pdev->dev, "can't dispatch IRQs from modules\n");
				"can't dispatch IRQs from modules\n");
		goto no_irqs;
		goto no_irqs;
	}
	}
		ret = twl4030_sih_setup(&pdev->dev, TWL4030_MODULE_GPIO,

					pdata->irq_base);
	irq_base = irq_alloc_descs(-1, 0, TWL4030_GPIO_MAX, 0);
	if (irq_base < 0) {
		dev_err(&pdev->dev, "Failed to alloc irq_descs\n");
		return irq_base;
	}

	ret = twl4030_sih_setup(&pdev->dev, TWL4030_MODULE_GPIO, irq_base);
	if (ret < 0)
	if (ret < 0)
		return ret;
		return ret;
		WARN_ON(ret != pdata->irq_base);

		twl4030_gpio_irq_base = ret;
	twl4030_gpio_irq_base = irq_base;
	}


no_irqs:
no_irqs:
	/*
	/*
@@ -443,9 +446,7 @@ no_irqs:


	ret = gpiochip_add(&twl_gpiochip);
	ret = gpiochip_add(&twl_gpiochip);
	if (ret < 0) {
	if (ret < 0) {
		dev_err(&pdev->dev,
		dev_err(&pdev->dev, "could not register gpiochip, %d\n", ret);
				"could not register gpiochip, %d\n",
				ret);
		twl_gpiochip.ngpio = 0;
		twl_gpiochip.ngpio = 0;
		gpio_twl4030_remove(pdev);
		gpio_twl4030_remove(pdev);
	} else if (pdata->setup) {
	} else if (pdata->setup) {