Re: [PATCH v5 1/3] tty/serial: Add GPIOLIB helpers for controlling modem lines

Alexander Shiyan shc_work at mail.ru
Mon Mar 3 06:27:10 EST 2014


Hello.

Понедельник,  3 марта 2014, 12:11 +01:00 от Richard Genoud <noreply.rgenoud at gmail.com>:
> This patch add some helpers to control modem lines (CTS/RTS/DSR...) via
> GPIO.
> This will be useful for many boards which have a serial controller that
> only handle CTS/RTS pins (or even just RX/TX).
> 
> Signed-off-by: Richard Genoud <richard.genoud at gmail.com>
...
> +struct mctrl_gpios *mctrl_gpio_init(struct device *dev, unsigned int idx)
> +{
> +	struct mctrl_gpios *gpios;
> +	enum mctrl_gpio_idx i;
> +	int err;
> +
> +	gpios = devm_kzalloc(dev, sizeof(*gpios), GFP_KERNEL);
> +	if (!gpios)
> +		goto out;

if (!gpios)
  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;
> +
> +		if (mctrl_gpios_desc[i].dir_out)
> +			err = gpiod_direction_output(gpios->gpio[i], 0);
> +		else
> +			err = gpiod_direction_input(gpios->gpio[i]);
> +		if (err) {
> +			dev_warn(dev, "Unable to set direction for %s GPIO",
> +				 mctrl_gpios_desc[i].name);
> +			devm_gpiod_put(dev, gpios->gpio[i]);
> +			gpios->gpio[i] = NULL;
> +		}
> +	}
> +
> +out:
> +	return gpios;
> +}
> +EXPORT_SYMBOL_GPL(mctrl_gpio_init);
> +
> +void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)
> +{
> +	enum mctrl_gpio_idx i;
> +
> +	if (!gpios)
> +		return;
> +
> +	for (i = 0; i < UART_GPIO_MAX; i++)
> +		if (!IS_ERR_OR_NULL(gpios->gpio[i])) {
> +			devm_gpiod_put(dev, gpios->gpio[i]);
> +			gpios->gpio[i] = NULL;

No need to NULL this variable. Instead, you should NULL
"gpios" entirely at the end of this function.

> +		}
> +	devm_kfree(dev, gpios);

gpios = NULL;
So this will indicate that its no more valid.

> +}
...

Thanks.
---


More information about the linux-arm-kernel mailing list