aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2017-07-15 22:50:41 +0200
committerHauke Mehrtens <hauke@hauke-m.de>2017-09-18 20:34:55 +0200
commit34a422794ddab738408edc7e3980ccbc14f28af4 (patch)
tree06f99aeb1acab719dea0a5743d44c2026613edbb /target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch
parente080a7ce07ee8cd63c71e1469853a233d9bc7a4c (diff)
downloadupstream-34a422794ddab738408edc7e3980ccbc14f28af4.tar.gz
upstream-34a422794ddab738408edc7e3980ccbc14f28af4.tar.bz2
upstream-34a422794ddab738408edc7e3980ccbc14f28af4.zip
sunxi: Backport patches needed for A64
This backports multiple patches from kernel 4.10 which are adding missing support for the A64 and the pine64 board. These are the device tree files, the pinctlk and the clock driver. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch')
-rw-r--r--target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch b/target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch
new file mode 100644
index 0000000000..35c6876812
--- /dev/null
+++ b/target/linux/sunxi/patches-4.9/0033-pinctrl-sunxi-Support-generic-binding.patch
@@ -0,0 +1,106 @@
+From cefbf1a1b29531a970bc2908a50a75d6474fcc38 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+Date: Thu, 20 Oct 2016 15:49:03 +0200
+Subject: pinctrl: sunxi: Support generic binding
+
+Our bindings are mostly irrelevant now that we have generic pinctrl
+bindings that cover exactly the same uses cases.
+
+Add support for the new ones, and obviously keep our old binding support in
+order to keep the ABI stable.
+
+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 | 48 +++++++++++++++++++++++++++++++++--
+ 1 file changed, 46 insertions(+), 2 deletions(-)
+
+--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
++++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+@@ -149,18 +149,33 @@ static int sunxi_pctrl_get_group_pins(st
+
+ static bool sunxi_pctrl_has_bias_prop(struct device_node *node)
+ {
+- return of_find_property(node, "allwinner,pull", NULL);
++ return of_find_property(node, "bias-pull-up", NULL) ||
++ of_find_property(node, "bias-pull-down", NULL) ||
++ of_find_property(node, "bias-disable", NULL) ||
++ of_find_property(node, "allwinner,pull", NULL);
+ }
+
+ static bool sunxi_pctrl_has_drive_prop(struct device_node *node)
+ {
+- return of_find_property(node, "allwinner,drive", NULL);
++ return of_find_property(node, "drive-strength", NULL) ||
++ of_find_property(node, "allwinner,drive", NULL);
+ }
+
+ static int sunxi_pctrl_parse_bias_prop(struct device_node *node)
+ {
+ u32 val;
+
++ /* Try the new style binding */
++ if (of_find_property(node, "bias-pull-up", NULL))
++ return PIN_CONFIG_BIAS_PULL_UP;
++
++ if (of_find_property(node, "bias-pull-down", NULL))
++ return PIN_CONFIG_BIAS_PULL_DOWN;
++
++ if (of_find_property(node, "bias-disable", NULL))
++ return PIN_CONFIG_BIAS_DISABLE;
++
++ /* And fall back to the old binding */
+ if (of_property_read_u32(node, "allwinner,pull", &val))
+ return -EINVAL;
+
+@@ -180,6 +195,21 @@ static int sunxi_pctrl_parse_drive_prop(
+ {
+ u32 val;
+
++ /* Try the new style binding */
++ if (!of_property_read_u32(node, "drive-strength", &val)) {
++ /* We can't go below 10mA ... */
++ if (val < 10)
++ return -EINVAL;
++
++ /* ... and only up to 40 mA ... */
++ if (val > 40)
++ val = 40;
++
++ /* by steps of 10 mA */
++ return rounddown(val, 10);
++ }
++
++ /* And then fall back to the old binding */
+ if (of_property_read_u32(node, "allwinner,drive", &val))
+ return -EINVAL;
+
+@@ -191,6 +221,12 @@ static const char *sunxi_pctrl_parse_fun
+ const char *function;
+ int ret;
+
++ /* Try the generic binding */
++ ret = of_property_read_string(node, "function", &function);
++ if (!ret)
++ return function;
++
++ /* And fall back to our legacy one */
+ ret = of_property_read_string(node, "allwinner,function", &function);
+ if (!ret)
+ return function;
+@@ -203,6 +239,14 @@ static const char *sunxi_pctrl_find_pins
+ {
+ int count;
+
++ /* Try the generic binding */
++ count = of_property_count_strings(node, "pins");
++ if (count > 0) {
++ *npins = count;
++ return "pins";
++ }
++
++ /* And fall back to our legacy one */
+ count = of_property_count_strings(node, "allwinner,pins");
+ if (count > 0) {
+ *npins = count;