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: Benoit Cousson <b-cousson@ti.com> Acked-by: Felipe Balbi <balbi@ti.com> Acked-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
committed by
Samuel Ortiz
parent
364cedb2f9
commit
2d9dd99b44
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user