summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2016-10-11 11:46:01 -0400
committerLinus Walleij <linus.walleij@linaro.org>2016-10-24 10:30:14 -0400
commit07fe64ba213f36ca8f6ffd8c4d5893f022744fdb (patch)
tree254908917490fc91513c4cfe3e306aa067376382 /drivers/pinctrl
parent42676fa4aa87eda4fc762df495d4bde2ddc4bfce (diff)
pinctrl: sunxi: Handle bias disable
So far, putting NO_PULL in allwinner,pull was ignored, behaving like if that property was not there at all. Obviously, this is not the right thing to do, and in that case, we really need to just disable the bias. Acked-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sunxi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
index 62a9d012b35f..c44bf1320e08 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
@@ -165,6 +165,8 @@ static int sunxi_pctrl_parse_bias_prop(struct device_node *node)
165 return -EINVAL; 165 return -EINVAL;
166 166
167 switch (val) { 167 switch (val) {
168 case SUN4I_PINCTRL_NO_PULL:
169 return PIN_CONFIG_BIAS_DISABLE;
168 case SUN4I_PINCTRL_PULL_UP: 170 case SUN4I_PINCTRL_PULL_UP:
169 return PIN_CONFIG_BIAS_PULL_UP; 171 return PIN_CONFIG_BIAS_PULL_UP;
170 case SUN4I_PINCTRL_PULL_DOWN: 172 case SUN4I_PINCTRL_PULL_DOWN:
@@ -401,6 +403,12 @@ static int sunxi_pconf_group_set(struct pinctrl_dev *pctldev,
401 | dlevel << sunxi_dlevel_offset(pin), 403 | dlevel << sunxi_dlevel_offset(pin),
402 pctl->membase + sunxi_dlevel_reg(pin)); 404 pctl->membase + sunxi_dlevel_reg(pin));
403 break; 405 break;
406 case PIN_CONFIG_BIAS_DISABLE:
407 val = readl(pctl->membase + sunxi_pull_reg(pin));
408 mask = PULL_PINS_MASK << sunxi_pull_offset(pin);
409 writel((val & ~mask),
410 pctl->membase + sunxi_pull_reg(pin));
411 break;
404 case PIN_CONFIG_BIAS_PULL_UP: 412 case PIN_CONFIG_BIAS_PULL_UP:
405 val = readl(pctl->membase + sunxi_pull_reg(pin)); 413 val = readl(pctl->membase + sunxi_pull_reg(pin));
406 mask = PULL_PINS_MASK << sunxi_pull_offset(pin); 414 mask = PULL_PINS_MASK << sunxi_pull_offset(pin);