diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-02-17 13:04:35 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-15 12:06:32 -0400 |
commit | b8960a6272e3016e0621d739bd6702825ae76d07 (patch) | |
tree | f73d37c2d8dcef9548873a9ed284dbdcc1834598 /drivers | |
parent | d1efc1b1cbd7fa03228268af58199bd913cbc9eb (diff) |
gpiolib: Actually set output state in wm831x_gpio_direction_output()
commit 3383d23d86791503559cb87837491af37469d9e5 upstream.
wm831x_gpio_direction_output() ignored the state passed into it.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpio/wm831x-gpio.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/gpio/wm831x-gpio.c b/drivers/gpio/wm831x-gpio.c index b4468b616890..c5a00f7a7bf0 100644 --- a/drivers/gpio/wm831x-gpio.c +++ b/drivers/gpio/wm831x-gpio.c | |||
@@ -60,23 +60,31 @@ static int wm831x_gpio_get(struct gpio_chip *chip, unsigned offset) | |||
60 | return 0; | 60 | return 0; |
61 | } | 61 | } |
62 | 62 | ||
63 | static int wm831x_gpio_direction_out(struct gpio_chip *chip, | 63 | static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) |
64 | unsigned offset, int value) | ||
65 | { | 64 | { |
66 | struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); | 65 | struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); |
67 | struct wm831x *wm831x = wm831x_gpio->wm831x; | 66 | struct wm831x *wm831x = wm831x_gpio->wm831x; |
68 | 67 | ||
69 | return wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, | 68 | wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, |
70 | WM831X_GPN_DIR | WM831X_GPN_TRI, 0); | 69 | value << offset); |
71 | } | 70 | } |
72 | 71 | ||
73 | static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | 72 | static int wm831x_gpio_direction_out(struct gpio_chip *chip, |
73 | unsigned offset, int value) | ||
74 | { | 74 | { |
75 | struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); | 75 | struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); |
76 | struct wm831x *wm831x = wm831x_gpio->wm831x; | 76 | struct wm831x *wm831x = wm831x_gpio->wm831x; |
77 | int ret; | ||
77 | 78 | ||
78 | wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, | 79 | ret = wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, |
79 | value << offset); | 80 | WM831X_GPN_DIR | WM831X_GPN_TRI, 0); |
81 | if (ret < 0) | ||
82 | return ret; | ||
83 | |||
84 | /* Can only set GPIO state once it's in output mode */ | ||
85 | wm831x_gpio_set(chip, offset, value); | ||
86 | |||
87 | return 0; | ||
80 | } | 88 | } |
81 | 89 | ||
82 | static int wm831x_gpio_to_irq(struct gpio_chip *chip, unsigned offset) | 90 | static int wm831x_gpio_to_irq(struct gpio_chip *chip, unsigned offset) |