diff options
Diffstat (limited to 'drivers/gpio/gpio-twl4030.c')
| -rw-r--r-- | drivers/gpio/gpio-twl4030.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c index 94256fe7bf3..f030880bc9b 100644 --- a/drivers/gpio/gpio-twl4030.c +++ b/drivers/gpio/gpio-twl4030.c @@ -51,6 +51,7 @@  static struct gpio_chip twl_gpiochip; +static int twl4030_gpio_base;  static int twl4030_gpio_irq_base;  /* genirq interfaces are not available to modules */ @@ -428,8 +429,6 @@ no_irqs:  	twl_gpiochip.dev = &pdev->dev;  	if (pdata) { -		twl_gpiochip.base = pdata->gpio_base; -  		/*  		 * NOTE:  boards may waste power if they don't set pullups  		 * and pulldowns correctly ... default for non-ULPI pins is @@ -461,15 +460,21 @@ no_irqs:  		dev_err(&pdev->dev, "could not register gpiochip, %d\n", ret);  		twl_gpiochip.ngpio = 0;  		gpio_twl4030_remove(pdev); -	} else if (pdata && pdata->setup) { +		goto out; +	} + +	twl4030_gpio_base = twl_gpiochip.base; + +	if (pdata && pdata->setup) {  		int status;  		status = pdata->setup(&pdev->dev, -				pdata->gpio_base, TWL4030_GPIO_MAX); +				twl4030_gpio_base, TWL4030_GPIO_MAX);  		if (status)  			dev_dbg(&pdev->dev, "setup --> %d\n", status);  	} +out:  	return ret;  } @@ -481,7 +486,7 @@ static int gpio_twl4030_remove(struct platform_device *pdev)  	if (pdata && pdata->teardown) {  		status = pdata->teardown(&pdev->dev, -				pdata->gpio_base, TWL4030_GPIO_MAX); +				twl4030_gpio_base, TWL4030_GPIO_MAX);  		if (status) {  			dev_dbg(&pdev->dev, "teardown --> %d\n", status);  			return status;  |