aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-twl4030.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-12-09 08:04:37 -0500
committerLinus Walleij <linus.walleij@linaro.org>2013-12-09 08:04:37 -0500
commitbdc54ef45d7670aeb52ce73f8b7ad5f3e5563661 (patch)
treeda6e170ce87891a0242de88d8d7c1ba34faf9bb7 /drivers/gpio/gpio-twl4030.c
parent33e0aae11e4854c792e9871f94da6d28bf2e2bb8 (diff)
parent374b105797c3d4f29c685f3be535c35f5689b30e (diff)
Merge tag 'v3.13-rc3' into devel
Linux 3.13-rc3
Diffstat (limited to 'drivers/gpio/gpio-twl4030.c')
-rw-r--r--drivers/gpio/gpio-twl4030.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
index cd06678a29f7..29f00a76bb92 100644
--- a/drivers/gpio/gpio-twl4030.c
+++ b/drivers/gpio/gpio-twl4030.c
@@ -354,17 +354,18 @@ static void twl_set(struct gpio_chip *chip, unsigned offset, int value)
354static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int value) 354static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int value)
355{ 355{
356 struct gpio_twl4030_priv *priv = to_gpio_twl4030(chip); 356 struct gpio_twl4030_priv *priv = to_gpio_twl4030(chip);
357 int ret = -EINVAL;
357 358
358 mutex_lock(&priv->mutex); 359 mutex_lock(&priv->mutex);
359 if (offset < TWL4030_GPIO_MAX) 360 if (offset < TWL4030_GPIO_MAX)
360 twl4030_set_gpio_dataout(offset, value); 361 ret = twl4030_set_gpio_direction(offset, 0);
361 362
362 priv->direction |= BIT(offset); 363 priv->direction |= BIT(offset);
363 mutex_unlock(&priv->mutex); 364 mutex_unlock(&priv->mutex);
364 365
365 twl_set(chip, offset, value); 366 twl_set(chip, offset, value);
366 367
367 return 0; 368 return ret;
368} 369}
369 370
370static int twl_to_irq(struct gpio_chip *chip, unsigned offset) 371static int twl_to_irq(struct gpio_chip *chip, unsigned offset)
@@ -435,7 +436,8 @@ static int gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
435 436
436static int gpio_twl4030_remove(struct platform_device *pdev); 437static int gpio_twl4030_remove(struct platform_device *pdev);
437 438
438static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev) 439static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev,
440 struct twl4030_gpio_platform_data *pdata)
439{ 441{
440 struct twl4030_gpio_platform_data *omap_twl_info; 442 struct twl4030_gpio_platform_data *omap_twl_info;
441 443
@@ -443,6 +445,9 @@ static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev)
443 if (!omap_twl_info) 445 if (!omap_twl_info)
444 return NULL; 446 return NULL;
445 447
448 if (pdata)
449 *omap_twl_info = *pdata;
450
446 omap_twl_info->use_leds = of_property_read_bool(dev->of_node, 451 omap_twl_info->use_leds = of_property_read_bool(dev->of_node,
447 "ti,use-leds"); 452 "ti,use-leds");
448 453
@@ -500,7 +505,7 @@ no_irqs:
500 mutex_init(&priv->mutex); 505 mutex_init(&priv->mutex);
501 506
502 if (node) 507 if (node)
503 pdata = of_gpio_twl4030(&pdev->dev); 508 pdata = of_gpio_twl4030(&pdev->dev, pdata);
504 509
505 if (pdata == NULL) { 510 if (pdata == NULL) {
506 dev_err(&pdev->dev, "Platform data is missing\n"); 511 dev_err(&pdev->dev, "Platform data is missing\n");