diff options
author | Alexey Charkov <alchark@gmail.com> | 2014-04-29 15:42:00 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2014-05-22 17:46:10 -0400 |
commit | 7ea456436ff6563b6cf89d3254ae76a8ceab499b (patch) | |
tree | 78087b25ad0a6f22eeaab36bccba00d473011ebb /drivers/pinctrl/vt8500 | |
parent | 4b660a7f5c8099d88d1a43d8ae138965112592c7 (diff) |
pinctrl: vt8500: Ensure value reg is updated when setting direction
Current code only touches the direction register when setting direction
to output, which breaks logic like
echo high > /sys/class/gpio/gpio0/direction
which is expected to also set the value. This patch also adds a call
to update the value register when setting direction to output.
Signed-off-by: Alexey Charkov <alchark@gmail.com>
Acked-by: Tony Prisk <linux@prisktech.co.nz>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/vt8500')
-rw-r--r-- | drivers/pinctrl/vt8500/pinctrl-wmt.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c index 9802b67040cc..2c61281bebd7 100644 --- a/drivers/pinctrl/vt8500/pinctrl-wmt.c +++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c | |||
@@ -523,17 +523,6 @@ static int wmt_gpio_get_direction(struct gpio_chip *chip, unsigned offset) | |||
523 | return GPIOF_DIR_IN; | 523 | return GPIOF_DIR_IN; |
524 | } | 524 | } |
525 | 525 | ||
526 | static int wmt_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | ||
527 | { | ||
528 | return pinctrl_gpio_direction_input(chip->base + offset); | ||
529 | } | ||
530 | |||
531 | static int wmt_gpio_direction_output(struct gpio_chip *chip, unsigned offset, | ||
532 | int value) | ||
533 | { | ||
534 | return pinctrl_gpio_direction_output(chip->base + offset); | ||
535 | } | ||
536 | |||
537 | static int wmt_gpio_get_value(struct gpio_chip *chip, unsigned offset) | 526 | static int wmt_gpio_get_value(struct gpio_chip *chip, unsigned offset) |
538 | { | 527 | { |
539 | struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev); | 528 | struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev); |
@@ -568,6 +557,18 @@ static void wmt_gpio_set_value(struct gpio_chip *chip, unsigned offset, | |||
568 | wmt_clearbits(data, reg_data_out, BIT(bit)); | 557 | wmt_clearbits(data, reg_data_out, BIT(bit)); |
569 | } | 558 | } |
570 | 559 | ||
560 | static int wmt_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | ||
561 | { | ||
562 | return pinctrl_gpio_direction_input(chip->base + offset); | ||
563 | } | ||
564 | |||
565 | static int wmt_gpio_direction_output(struct gpio_chip *chip, unsigned offset, | ||
566 | int value) | ||
567 | { | ||
568 | wmt_gpio_set_value(chip, offset, value); | ||
569 | return pinctrl_gpio_direction_output(chip->base + offset); | ||
570 | } | ||
571 | |||
571 | static struct gpio_chip wmt_gpio_chip = { | 572 | static struct gpio_chip wmt_gpio_chip = { |
572 | .label = "gpio-wmt", | 573 | .label = "gpio-wmt", |
573 | .owner = THIS_MODULE, | 574 | .owner = THIS_MODULE, |