brcm63xx: fix bcm6348 pinmux group selection
authorJonas Gorski <jonas.gorski@gmail.com>
Wed, 19 Dec 2018 23:05:15 +0000 (00:05 +0100)
committerJonas Gorski <jonas.gorski@gmail.com>
Sun, 30 Dec 2018 12:22:13 +0000 (13:22 +0100)
The mask/shift computation used the pin group number instead of the pin
number, resulting in always modifying group 4 when applying muxes, so
fix it to consistently use the pin number.

Fixes: 0755c2d11706 ("brcm63xx: add pinctrl support")
Reported-by: Daniel Gonzalez Cabanelas <dgcbueu@gmail.com>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
target/linux/brcm63xx/patches-4.14/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
target/linux/brcm63xx/patches-4.9/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch

index 19b8075865af252dba9ac13dfcceec68830aae09..b48723c1b3a0681a2e17606e610b48465e52b3a1 100644 (file)
@@ -12,8 +12,8 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 ---
  drivers/pinctrl/bcm63xx/Kconfig           |   7 +
  drivers/pinctrl/bcm63xx/Makefile          |   1 +
- drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 392 ++++++++++++++++++++++++++++++
- 3 files changed, 400 insertions(+)
+ drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 391 ++++++++++++++++++++++++++++++
+ 3 files changed, 399 insertions(+)
  create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
 
 --- a/drivers/pinctrl/bcm63xx/Kconfig
@@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 +obj-$(CONFIG_PINCTRL_BCM6348) += pinctrl-bcm6348.o
 --- /dev/null
 +++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
-@@ -0,0 +1,392 @@
+@@ -0,0 +1,391 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -321,15 +321,14 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 +      struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
 +      const struct bcm6348_pingroup *grp = &bcm6348_groups[group];
 +      const struct bcm6348_function *f = &bcm6348_funcs[selector];
-+      u32 group_num, mask, val;
++      u32 mask, val;
 +
 +      /*
 +       * pins n..(n+7) share the same group, so we only need to look at
 +       * the first pin.
 +       */
-+      group_num = (unsigned long)bcm6348_pins[grp->pins[0]].drv_data;
-+      mask = GROUP_MASK(group_num);
-+      val = f->value << GROUP_SHIFT(group_num);
++      mask = GROUP_MASK(grp->pins[0]);
++      val = f->value << GROUP_SHIFT(grp->pins[0]);
 +
 +      bcm6348_rmw_mux(pctl, mask, val);
 +
index 19b8075865af252dba9ac13dfcceec68830aae09..b48723c1b3a0681a2e17606e610b48465e52b3a1 100644 (file)
@@ -12,8 +12,8 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 ---
  drivers/pinctrl/bcm63xx/Kconfig           |   7 +
  drivers/pinctrl/bcm63xx/Makefile          |   1 +
- drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 392 ++++++++++++++++++++++++++++++
- 3 files changed, 400 insertions(+)
+ drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 391 ++++++++++++++++++++++++++++++
+ 3 files changed, 399 insertions(+)
  create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
 
 --- a/drivers/pinctrl/bcm63xx/Kconfig
@@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 +obj-$(CONFIG_PINCTRL_BCM6348) += pinctrl-bcm6348.o
 --- /dev/null
 +++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
-@@ -0,0 +1,392 @@
+@@ -0,0 +1,391 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
@@ -321,15 +321,14 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
 +      struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
 +      const struct bcm6348_pingroup *grp = &bcm6348_groups[group];
 +      const struct bcm6348_function *f = &bcm6348_funcs[selector];
-+      u32 group_num, mask, val;
++      u32 mask, val;
 +
 +      /*
 +       * pins n..(n+7) share the same group, so we only need to look at
 +       * the first pin.
 +       */
-+      group_num = (unsigned long)bcm6348_pins[grp->pins[0]].drv_data;
-+      mask = GROUP_MASK(group_num);
-+      val = f->value << GROUP_SHIFT(group_num);
++      mask = GROUP_MASK(grp->pins[0]);
++      val = f->value << GROUP_SHIFT(grp->pins[0]);
 +
 +      bcm6348_rmw_mux(pctl, mask, val);
 +