diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-03-07 21:38:26 -0500 |
---|---|---|
committer | Bryan Wu <cooloney@gmail.com> | 2013-04-01 14:04:49 -0400 |
commit | 9d04cbaadf563db3ba04426c317d3e84bc27bac1 (patch) | |
tree | 80c4d0c778ce746e145307ddb1b6b66bcf35a0ac | |
parent | 84f6942cde279e812c59eed456d1f43a39ca6c40 (diff) |
leds: leds-ns2: set devm_gpio_request_one() flags param correctly
The devm_gpio_request_one() flags parameter was set to:
GPIOF_DIR_OUT | gpio_get_value(template->cmd)
GPIOF_DIR_OUT and GPIOF_DIR_IN are defined as below:
GPIOF_DIR_OUT (0 << 0)
GPIOF_DIR_IN (1 << 0)
So, when 'gpio_get_value(template->cmd)' is 1, the gpio pin can
be set as input, instead of output.
To prevent this problem, GPIOF_OUT_INIT flags should be used when
using devm_gpio_request_one().
Same goes for 'gpio_get_value(template->slow)' case.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
-rw-r--r-- | drivers/leds/leds-ns2.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/leds/leds-ns2.c b/drivers/leds/leds-ns2.c index d978171c25b4..e02b3136273f 100644 --- a/drivers/leds/leds-ns2.c +++ b/drivers/leds/leds-ns2.c | |||
@@ -193,7 +193,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat, | |||
193 | enum ns2_led_modes mode; | 193 | enum ns2_led_modes mode; |
194 | 194 | ||
195 | ret = devm_gpio_request_one(&pdev->dev, template->cmd, | 195 | ret = devm_gpio_request_one(&pdev->dev, template->cmd, |
196 | GPIOF_DIR_OUT | gpio_get_value(template->cmd), | 196 | gpio_get_value(template->cmd) ? |
197 | GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW, | ||
197 | template->name); | 198 | template->name); |
198 | if (ret) { | 199 | if (ret) { |
199 | dev_err(&pdev->dev, "%s: failed to setup command GPIO\n", | 200 | dev_err(&pdev->dev, "%s: failed to setup command GPIO\n", |
@@ -202,7 +203,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat, | |||
202 | } | 203 | } |
203 | 204 | ||
204 | ret = devm_gpio_request_one(&pdev->dev, template->slow, | 205 | ret = devm_gpio_request_one(&pdev->dev, template->slow, |
205 | GPIOF_DIR_OUT | gpio_get_value(template->slow), | 206 | gpio_get_value(template->slow) ? |
207 | GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW, | ||
206 | template->name); | 208 | template->name); |
207 | if (ret) { | 209 | if (ret) { |
208 | dev_err(&pdev->dev, "%s: failed to setup slow GPIO\n", | 210 | dev_err(&pdev->dev, "%s: failed to setup slow GPIO\n", |