Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d267ea6 authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Greg Kroah-Hartman
Browse files

serial: mctrl-gpio: simplify init routine



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: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9e9f079c
Loading
Loading
Loading
Loading
+11 −18
Original line number Diff line number Diff line
@@ -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;