Commit cbd2780f authored by Kukjin Kim's avatar Kukjin Kim

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

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: default avatarJaecheol Lee <jc.lee@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 0770e528
...@@ -273,13 +273,13 @@ s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin) ...@@ -273,13 +273,13 @@ s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
if (!chip) if (!chip)
return -EINVAL; return -EINVAL;
off = chip->chip.base - pin; off = pin - chip->chip.base;
shift = off * 2; shift = off * 2;
reg = chip->base + 0x0C; reg = chip->base + 0x0C;
drvstr = __raw_readl(reg); drvstr = __raw_readl(reg);
drvstr = 0xffff & (0x3 << shift);
drvstr = drvstr >> shift; drvstr = drvstr >> shift;
drvstr &= 0x3;
return (__force s5p_gpio_drvstr_t)drvstr; return (__force s5p_gpio_drvstr_t)drvstr;
} }
...@@ -296,11 +296,12 @@ int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr) ...@@ -296,11 +296,12 @@ int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr)
if (!chip) if (!chip)
return -EINVAL; return -EINVAL;
off = chip->chip.base - pin; off = pin - chip->chip.base;
shift = off * 2; shift = off * 2;
reg = chip->base + 0x0C; reg = chip->base + 0x0C;
tmp = __raw_readl(reg); tmp = __raw_readl(reg);
tmp &= ~(0x3 << shift);
tmp |= drvstr << shift; tmp |= drvstr << shift;
__raw_writel(tmp, reg); __raw_writel(tmp, reg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment