brcm63xx: fix bcm6348 pinmux group selection

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: 0755c2d117 ("brcm63xx: add pinctrl support")
Reported-by: Daniel Gonzalez Cabanelas <dgcbueu@gmail.com>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
v19.07.3_mercusys_ac12_duma
Jonas Gorski 5 years ago
parent 33bff49a31
commit d09561f73d

@ -12,8 +12,8 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
--- ---
drivers/pinctrl/bcm63xx/Kconfig | 7 + drivers/pinctrl/bcm63xx/Kconfig | 7 +
drivers/pinctrl/bcm63xx/Makefile | 1 + drivers/pinctrl/bcm63xx/Makefile | 1 +
drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 392 ++++++++++++++++++++++++++++++ drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 391 ++++++++++++++++++++++++++++++
3 files changed, 400 insertions(+) 3 files changed, 399 insertions(+)
create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
--- a/drivers/pinctrl/bcm63xx/Kconfig --- 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 +obj-$(CONFIG_PINCTRL_BCM6348) += pinctrl-bcm6348.o
--- /dev/null --- /dev/null
+++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c +++ 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 + * 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 + * 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); + struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+ const struct bcm6348_pingroup *grp = &bcm6348_groups[group]; + const struct bcm6348_pingroup *grp = &bcm6348_groups[group];
+ const struct bcm6348_function *f = &bcm6348_funcs[selector]; + 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 + * pins n..(n+7) share the same group, so we only need to look at
+ * the first pin. + * the first pin.
+ */ + */
+ group_num = (unsigned long)bcm6348_pins[grp->pins[0]].drv_data; + mask = GROUP_MASK(grp->pins[0]);
+ mask = GROUP_MASK(group_num); + val = f->value << GROUP_SHIFT(grp->pins[0]);
+ val = f->value << GROUP_SHIFT(group_num);
+ +
+ bcm6348_rmw_mux(pctl, mask, val); + bcm6348_rmw_mux(pctl, mask, val);
+ +

@ -12,8 +12,8 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
--- ---
drivers/pinctrl/bcm63xx/Kconfig | 7 + drivers/pinctrl/bcm63xx/Kconfig | 7 +
drivers/pinctrl/bcm63xx/Makefile | 1 + drivers/pinctrl/bcm63xx/Makefile | 1 +
drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 392 ++++++++++++++++++++++++++++++ drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c | 391 ++++++++++++++++++++++++++++++
3 files changed, 400 insertions(+) 3 files changed, 399 insertions(+)
create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c create mode 100644 drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
--- a/drivers/pinctrl/bcm63xx/Kconfig --- 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 +obj-$(CONFIG_PINCTRL_BCM6348) += pinctrl-bcm6348.o
--- /dev/null --- /dev/null
+++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c +++ 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 + * 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 + * 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); + struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+ const struct bcm6348_pingroup *grp = &bcm6348_groups[group]; + const struct bcm6348_pingroup *grp = &bcm6348_groups[group];
+ const struct bcm6348_function *f = &bcm6348_funcs[selector]; + 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 + * pins n..(n+7) share the same group, so we only need to look at
+ * the first pin. + * the first pin.
+ */ + */
+ group_num = (unsigned long)bcm6348_pins[grp->pins[0]].drv_data; + mask = GROUP_MASK(grp->pins[0]);
+ mask = GROUP_MASK(group_num); + val = f->value << GROUP_SHIFT(grp->pins[0]);
+ val = f->value << GROUP_SHIFT(group_num);
+ +
+ bcm6348_rmw_mux(pctl, mask, val); + bcm6348_rmw_mux(pctl, mask, val);
+ +

Loading…
Cancel
Save