aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch')
-rw-r--r--target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch b/target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch
new file mode 100644
index 0000000000..61d6102c92
--- /dev/null
+++ b/target/linux/sunxi/patches-4.9/0032-pinctrl-sunxi-Handle-bias-disable.patch
@@ -0,0 +1,42 @@
+From 07fe64ba213f36ca8f6ffd8c4d5893f022744fdb Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+Date: Tue, 11 Oct 2016 17:46:01 +0200
+Subject: 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>
+---
+ drivers/pinctrl/sunxi/pinctrl-sunxi.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- 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(s
+ return -EINVAL;
+
+ switch (val) {
++ case SUN4I_PINCTRL_NO_PULL:
++ return PIN_CONFIG_BIAS_DISABLE;
+ case SUN4I_PINCTRL_PULL_UP:
+ return PIN_CONFIG_BIAS_PULL_UP;
+ case SUN4I_PINCTRL_PULL_DOWN:
+@@ -401,6 +403,12 @@ static int sunxi_pconf_group_set(struct
+ | dlevel << sunxi_dlevel_offset(pin),
+ pctl->membase + sunxi_dlevel_reg(pin));
+ break;
++ case PIN_CONFIG_BIAS_DISABLE:
++ val = readl(pctl->membase + sunxi_pull_reg(pin));
++ mask = PULL_PINS_MASK << sunxi_pull_offset(pin);
++ writel((val & ~mask),
++ pctl->membase + sunxi_pull_reg(pin));
++ break;
+ case PIN_CONFIG_BIAS_PULL_UP:
+ val = readl(pctl->membase + sunxi_pull_reg(pin));
+ mask = PULL_PINS_MASK << sunxi_pull_offset(pin);