[openwrt/openwrt] bcm63xx: pinctrl: fix BCM6348 groups

LEDE Commits lede-commits at lists.infradead.org
Tue Feb 23 05:16:46 EST 2021


noltari pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/50cb3a750f96c4a0f97602b7242068e9bb239fc4

commit 50cb3a750f96c4a0f97602b7242068e9bb239fc4
Author: Daniel González Cabanelas <dgcbueu at gmail.com>
AuthorDate: Tue May 19 15:56:29 2020 +0200

    bcm63xx: pinctrl: fix BCM6348 groups
    
    The current driver has some troubles:
     - Some groupings are wrong.
     - The pinctrl group0 owns pins never used (at least in Openwrt) for any
       pinmux. The driver hijacks all the pins on the group avoiding any other
       use, spite they're free. I.e. for buttons, causing this kernel error:
       [  4.735928] gpio-keys-polled keys: unable to claim gpio 479, err=-22
       [  4.742642] gpio-keys-polled: probe of keys failed with error -22
     - Minor errors about groupings on the documentation
     - Missing "diag" grouping in dtsi
     - Wrong groupings in dtsi
    
    Fix it by setting the correct groups.
    And relax the pin capturing, letting the gpios belonging to any group to
    be used for other purposes like buttons. This was the behavior with stock
    firmwares and old OpenWrt versions which never caused any trouble.
    
    Signed-off-by: Daniel González Cabanelas <dgcbueu at gmail.com>
---
 target/linux/bcm63xx/dts/bcm6348.dtsi              |  9 +++++--
 ...on-add-BCM6348-pincontroller-binding-docu.patch |  6 ++---
 ...nctrl-add-a-pincontrol-driver-for-BCM6348.patch | 29 +++-------------------
 ...on-add-BCM6348-pincontroller-binding-docu.patch |  6 ++---
 ...nctrl-add-a-pincontrol-driver-for-BCM6348.patch | 29 +++-------------------
 5 files changed, 21 insertions(+), 58 deletions(-)

diff --git a/target/linux/bcm63xx/dts/bcm6348.dtsi b/target/linux/bcm63xx/dts/bcm6348.dtsi
index 1e04486909..38bb71e53c 100644
--- a/target/linux/bcm63xx/dts/bcm6348.dtsi
+++ b/target/linux/bcm63xx/dts/bcm6348.dtsi
@@ -94,7 +94,7 @@
 			};
 
 			pinctrl_mii_snoop: mii_snoop {
-				function = "ext_ephy";
+				function = "mii_snoop";
 				groups = "group1", "group4";
 			};
 
@@ -125,7 +125,12 @@
 
 			pinctrl_utopia: utopia {
 				function = "utopia";
-				groups = "group0", "group1", "group3";
+				groups = "group1", "group3", "group4";
+			};
+
+			pinctrl_diag: diag {
+				function = "diag";
+				groups = "group0", "group1", "group2", "group3", "group4";
 			};
 		};
 
diff --git a/target/linux/bcm63xx/patches-5.10/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch b/target/linux/bcm63xx/patches-5.10/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
index 6bac90373c..800f0540cc 100644
--- a/target/linux/bcm63xx/patches-5.10/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
+++ b/target/linux/bcm63xx/patches-5.10/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
@@ -41,9 +41,9 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +
 +name		pins	functions
 +-----------------------------------------------------------
-+group0		32-36	ext_mii, utopia, diag
++group0		32-36	ext_mii, diag
 +group1		22-31	ext_ephy, mii_snoop, mii_pccard,
 +			spi_master_uart, utopia, diag
 +group2		16-21	pci, diag
-+group3		8-15	ext_mii, utopia
-+group4		0-7	ext_ephy, mii_snoop, legacy_led, diag
++group3		8-15	ext_mii, utopia, diag
++group4		0-7	ext_ephy, mii_snoop, legacy_led, utopia, diag
diff --git a/target/linux/bcm63xx/patches-5.10/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch b/target/linux/bcm63xx/patches-5.10/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
index b48723c1b3..3b613fdca5 100644
--- a/target/linux/bcm63xx/patches-5.10/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
+++ b/target/linux/bcm63xx/patches-5.10/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
@@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +obj-$(CONFIG_PINCTRL_BCM6348)	+= pinctrl-bcm6348.o
 --- /dev/null
 +++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
-@@ -0,0 +1,391 @@
+@@ -0,0 +1,370 @@
 +/*
 + * 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
@@ -225,15 +225,16 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +};
 +
 +static const char * const utopia_groups[] = {
-+	"group0",
 +	"group1",
 +	"group3",
++	"group4",
 +};
 +
 +static const char * const diag_groups[] = {
 +	"group0",
 +	"group1",
 +	"group2",
++	"group3",
 +	"group4",
 +};
 +
@@ -335,27 +336,6 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +	return 0;
 +}
 +
-+static int bcm6348_gpio_request_enable(struct pinctrl_dev *pctldev,
-+				       struct pinctrl_gpio_range *range,
-+				       unsigned offset)
-+{
-+	struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
-+	struct pin_desc *desc;
-+	u32 mask;
-+
-+	/* don't reconfigure if already muxed */
-+	desc = pin_desc_get(pctldev, offset);
-+	if (desc->mux_usecount)
-+		return 0;
-+
-+	mask = GROUP_MASK(offset);
-+
-+	/* disable all functions using this pin */
-+	bcm6348_rmw_mux(pctl, mask, 0);
-+
-+	return 0;
-+}
-+
 +static struct pinctrl_ops bcm6348_pctl_ops = {
 +	.get_groups_count	= bcm6348_pinctrl_get_group_count,
 +	.get_group_name		= bcm6348_pinctrl_get_group_name,
@@ -371,8 +351,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +	.get_function_name	= bcm6348_pinctrl_get_func_name,
 +	.get_function_groups	= bcm6348_pinctrl_get_groups,
 +	.set_mux		= bcm6348_pinctrl_set_mux,
-+	.gpio_request_enable	= bcm6348_gpio_request_enable,
-+	.strict			= true,
++	.strict			= false,
 +};
 +
 +static int bcm6348_pinctrl_probe(struct platform_device *pdev)
diff --git a/target/linux/bcm63xx/patches-5.4/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch b/target/linux/bcm63xx/patches-5.4/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
index 6bac90373c..800f0540cc 100644
--- a/target/linux/bcm63xx/patches-5.4/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
+++ b/target/linux/bcm63xx/patches-5.4/133-Documentation-add-BCM6348-pincontroller-binding-docu.patch
@@ -41,9 +41,9 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +
 +name		pins	functions
 +-----------------------------------------------------------
-+group0		32-36	ext_mii, utopia, diag
++group0		32-36	ext_mii, diag
 +group1		22-31	ext_ephy, mii_snoop, mii_pccard,
 +			spi_master_uart, utopia, diag
 +group2		16-21	pci, diag
-+group3		8-15	ext_mii, utopia
-+group4		0-7	ext_ephy, mii_snoop, legacy_led, diag
++group3		8-15	ext_mii, utopia, diag
++group4		0-7	ext_ephy, mii_snoop, legacy_led, utopia, diag
diff --git a/target/linux/bcm63xx/patches-5.4/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch b/target/linux/bcm63xx/patches-5.4/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
index b48723c1b3..3b613fdca5 100644
--- a/target/linux/bcm63xx/patches-5.4/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
+++ b/target/linux/bcm63xx/patches-5.4/134-pinctrl-add-a-pincontrol-driver-for-BCM6348.patch
@@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +obj-$(CONFIG_PINCTRL_BCM6348)	+= pinctrl-bcm6348.o
 --- /dev/null
 +++ b/drivers/pinctrl/bcm63xx/pinctrl-bcm6348.c
-@@ -0,0 +1,391 @@
+@@ -0,0 +1,370 @@
 +/*
 + * 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
@@ -225,15 +225,16 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +};
 +
 +static const char * const utopia_groups[] = {
-+	"group0",
 +	"group1",
 +	"group3",
++	"group4",
 +};
 +
 +static const char * const diag_groups[] = {
 +	"group0",
 +	"group1",
 +	"group2",
++	"group3",
 +	"group4",
 +};
 +
@@ -335,27 +336,6 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +	return 0;
 +}
 +
-+static int bcm6348_gpio_request_enable(struct pinctrl_dev *pctldev,
-+				       struct pinctrl_gpio_range *range,
-+				       unsigned offset)
-+{
-+	struct bcm6348_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
-+	struct pin_desc *desc;
-+	u32 mask;
-+
-+	/* don't reconfigure if already muxed */
-+	desc = pin_desc_get(pctldev, offset);
-+	if (desc->mux_usecount)
-+		return 0;
-+
-+	mask = GROUP_MASK(offset);
-+
-+	/* disable all functions using this pin */
-+	bcm6348_rmw_mux(pctl, mask, 0);
-+
-+	return 0;
-+}
-+
 +static struct pinctrl_ops bcm6348_pctl_ops = {
 +	.get_groups_count	= bcm6348_pinctrl_get_group_count,
 +	.get_group_name		= bcm6348_pinctrl_get_group_name,
@@ -371,8 +351,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
 +	.get_function_name	= bcm6348_pinctrl_get_func_name,
 +	.get_function_groups	= bcm6348_pinctrl_get_groups,
 +	.set_mux		= bcm6348_pinctrl_set_mux,
-+	.gpio_request_enable	= bcm6348_gpio_request_enable,
-+	.strict			= true,
++	.strict			= false,
 +};
 +
 +static int bcm6348_pinctrl_probe(struct platform_device *pdev)



More information about the lede-commits mailing list