OSDN Git Service

serial: mctrl-gpio: simplify init routine
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 12 Feb 2015 14:24:42 +0000 (15:24 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Mar 2015 02:15:04 +0000 (03:15 +0100)
Instead of ignoring errors returned by devm_gpiod_get_index use
devm_gpiod_get_index_optional which results in slightly more strict
error handling which is good.

Also use the fourth parameter to devm_gpiod_get_index_optional to be
able to drop the explicit direction setting.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/serial_mctrl_gpio.c

index c0381a0..5027db7 100644 (file)
@@ -94,27 +94,20 @@ struct mctrl_gpios *mctrl_gpio_init(struct device *dev, unsigned int idx)
                return ERR_PTR(-ENOMEM);
 
        for (i = 0; i < UART_GPIO_MAX; i++) {
-               gpios->gpio[i] = devm_gpiod_get_index(dev,
-                                                     mctrl_gpios_desc[i].name,
-                                                     idx);
-
-               /*
-                * The GPIOs are maybe not all filled,
-                * this is not an error.
-                */
-               if (IS_ERR_OR_NULL(gpios->gpio[i]))
-                       continue;
+               enum gpiod_flags flags;
 
                if (mctrl_gpios_desc[i].dir_out)
-                       err = gpiod_direction_output(gpios->gpio[i], 0);
+                       flags = GPIOD_OUT_LOW;
                else
-                       err = gpiod_direction_input(gpios->gpio[i]);
-               if (err) {
-                       dev_dbg(dev, "Unable to set direction for %s GPIO",
-                               mctrl_gpios_desc[i].name);
-                       devm_gpiod_put(dev, gpios->gpio[i]);
-                       gpios->gpio[i] = NULL;
-               }
+                       flags = GPIOD_IN;
+
+               gpios->gpio[i] =
+                       devm_gpiod_get_index_optional(dev,
+                                                     mctrl_gpios_desc[i].name,
+                                                     idx, flags);
+
+               if (IS_ERR(gpios->gpio[i]))
+                       return PTR_ERR(gpios->gpio[i]);
        }
 
        return gpios;