RE: [PATCH] ARM: SAMSUNG: Fix on s5p_gpio_[get,set]_drvstr

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

 



Kukjin Kim wrote:
> 
> This patch fixes bug on gpio drive strength helper function.
> 
> The offset should be like follwoing.
> -       off = chip->chip.base - pin;
> +       off = pin - chip->chip.base;
> 
> In the s5p_gpio_get_drvstr(),
> the second line is unnecessary, because overwrite drvstr.
>         drvstr = __raw_readl(reg);
> -       drvstr = 0xffff & (0x3 << shift);
> 
> And need 2bit masking before return the drvstr value.
>         drvstr = drvstr >> shift;
> +       drvstr &= 0x3;
> 
> In the s5p_gpio_set_drvstr(), need relevant bit clear.
>         tmp = __raw_readl(reg);
> +       tmp &= ~(0x3 << shift);
>         tmp |= drvstr << shift;
> 
> Reported-by: Janghyuck Kim <janghyuck.kim@xxxxxxxxxxx>

Sorry I confused, should be 'Reported-by: Jaecheol Lee <jc.lee@xxxxxxxxxxx>'

> Signed-off-by: Kukjin Kim <kgene.kim@xxxxxxxxxxx>
> ---
>  arch/arm/plat-samsung/gpio-config.c |    7 ++++---
>  1 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/plat-samsung/gpio-config.c
b/arch/arm/plat-samsung/gpio-
> config.c
> index 57b68a5..e3d41ea 100644
> --- a/arch/arm/plat-samsung/gpio-config.c
> +++ b/arch/arm/plat-samsung/gpio-config.c
> @@ -273,13 +273,13 @@ s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int
pin)
>  	if (!chip)
>  		return -EINVAL;
> 
> -	off = chip->chip.base - pin;
> +	off = pin - chip->chip.base;
>  	shift = off * 2;
>  	reg = chip->base + 0x0C;
> 
>  	drvstr = __raw_readl(reg);
> -	drvstr = 0xffff & (0x3 << shift);
>  	drvstr = drvstr >> shift;
> +	drvstr &= 0x3;
> 
>  	return (__force s5p_gpio_drvstr_t)drvstr;
>  }
> @@ -296,11 +296,12 @@ int s5p_gpio_set_drvstr(unsigned int pin,
> s5p_gpio_drvstr_t drvstr)
>  	if (!chip)
>  		return -EINVAL;
> 
> -	off = chip->chip.base - pin;
> +	off = pin - chip->chip.base;
>  	shift = off * 2;
>  	reg = chip->base + 0x0C;
> 
>  	tmp = __raw_readl(reg);
> +	tmp &= ~(0x3 << shift);
>  	tmp |= drvstr << shift;
> 
>  	__raw_writel(tmp, reg);
> --
> 1.6.2.5


Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@xxxxxxxxxxx>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  Powered by Linux