leds: leds-ns2: set devm_gpio_request_one() flags param correctly
authorJingoo Han <jg1.han@samsung.com>
Fri, 8 Mar 2013 02:38:26 +0000 (18:38 -0800)
committerBryan Wu <cooloney@gmail.com>
Mon, 1 Apr 2013 18:04:49 +0000 (11:04 -0700)
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>
drivers/leds/leds-ns2.c

index d978171..e02b313 100644 (file)
@@ -193,7 +193,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
        enum ns2_led_modes mode;
 
        ret = devm_gpio_request_one(&pdev->dev, template->cmd,
-                       GPIOF_DIR_OUT | gpio_get_value(template->cmd),
+                       gpio_get_value(template->cmd) ?
+                       GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
                        template->name);
        if (ret) {
                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,
        }
 
        ret = devm_gpio_request_one(&pdev->dev, template->slow,
-                       GPIOF_DIR_OUT | gpio_get_value(template->slow),
+                       gpio_get_value(template->slow) ?
+                       GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
                        template->name);
        if (ret) {
                dev_err(&pdev->dev, "%s: failed to setup slow GPIO\n",