Re: [PATCH] gpio: tegra: Fix offset of pinctrl calls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



19.02.2019 23:48, Linus Walleij пишет:
> This patch hunk is a lightly modified version of a diff found
> in a Tegra code dump from a product tree. It makes a lot of
> sense because this is what most drivers do.
> 
> Cc: Thierry Reding <treding@xxxxxxxxxx>
> Cc: Stefan Agner <stefan@xxxxxxxx>
> Cc: Dmitry Osipenko <digetx@xxxxxxxxx>
> Cc: Jon Hunter <jonathanh@xxxxxxxxxx>
> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> ---
>  drivers/gpio/gpio-tegra.c | 25 +++++++++++++++++++++----
>  1 file changed, 21 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
> index 02f6db925fd5..1ececf2c3282 100644
> --- a/drivers/gpio/gpio-tegra.c
> +++ b/drivers/gpio/gpio-tegra.c
> @@ -2,6 +2,7 @@
>   * arch/arm/mach-tegra/gpio.c
>   *
>   * Copyright (c) 2010 Google, Inc
> + * Copyright (c) 2011-2016, NVIDIA CORPORATION.  All rights reserved.
>   *
>   * Author:
>   *	Erik Gilling <konkers@xxxxxxxxxx>
> @@ -141,14 +142,14 @@ static void tegra_gpio_disable(struct tegra_gpio_info *tgi, unsigned int gpio)
>  
>  static int tegra_gpio_request(struct gpio_chip *chip, unsigned int offset)
>  {
> -	return pinctrl_gpio_request(offset);
> +	return pinctrl_gpio_request(chip->base + offset);
>  }
>  
>  static void tegra_gpio_free(struct gpio_chip *chip, unsigned int offset)
>  {
>  	struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
>  
> -	pinctrl_gpio_free(offset);
> +	pinctrl_gpio_free(chip->base + offset);
>  	tegra_gpio_disable(tgi, offset);
>  }
>  
> @@ -176,10 +177,18 @@ static int tegra_gpio_direction_input(struct gpio_chip *chip,
>  				      unsigned int offset)
>  {
>  	struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
> +	int ret;
>  
>  	tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 0);
>  	tegra_gpio_enable(tgi, offset);
> -	return 0;
> +
> +	ret = pinctrl_gpio_direction_input(chip->base + offset);
> +	if (ret < 0)
> +		dev_err(tgi->dev,
> +			"Failed to set pinctrl input direction of GPIO %d: %d",
> +			 chip->base + offset, ret);
> +
> +	return ret;
>  }
>  
>  static int tegra_gpio_direction_output(struct gpio_chip *chip,
> @@ -187,11 +196,19 @@ static int tegra_gpio_direction_output(struct gpio_chip *chip,
>  				       int value)
>  {
>  	struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
> +	int ret;
>  
>  	tegra_gpio_set(chip, offset, value);
>  	tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 1);
>  	tegra_gpio_enable(tgi, offset);
> -	return 0;
> +
> +	ret = pinctrl_gpio_direction_output(chip->base + offset);
> +	if (ret < 0)
> +		dev_err(tgi->dev,
> +			"Failed to set pinctrl output direction of GPIO %d: %d",
> +			 chip->base + offset, ret);
> +
> +	return ret;
>  }
>  
>  static int tegra_gpio_get_direction(struct gpio_chip *chip,
> 

This is formally a correct patch, but none of Tegra's upstream pinctrl drivers implement gpio_set_direction() and chip->base=0. Hence I'm not sure whether this all is really necessary.. or maybe you're going to implement the gpio_set_direction()?



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux