From eef6bd3393f406f73187a670fa34d5e6a228f9e8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Tue, 25 Dec 2018 15:51:33 +0100 Subject: [PATCH] bcm53xx: update pinctrl driver & use its new DT binding MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Driver has been updated upstream to support more precise DT binding and avoid mapping conflicts between pinctrl and USB 2.0 PHY. Signed-off-by: Rafał Miłecki (cherry picked from commit a28f6ab27f9ae1a08c6945013cdb796b12ce150d) --- ...upport-updated-DT-binding-as-syscon-.patch | 99 +++++++++++++++++++ ...01X-Update-Northstar-pinctrl-binding.patch | 31 ++++++ 2 files changed, 130 insertions(+) create mode 100644 target/linux/bcm53xx/patches-4.14/084-v4.21-pinctrl-bcm-ns-support-updated-DT-binding-as-syscon-.patch create mode 100644 target/linux/bcm53xx/patches-4.14/302-ARM-dts-BCM5301X-Update-Northstar-pinctrl-binding.patch diff --git a/target/linux/bcm53xx/patches-4.14/084-v4.21-pinctrl-bcm-ns-support-updated-DT-binding-as-syscon-.patch b/target/linux/bcm53xx/patches-4.14/084-v4.21-pinctrl-bcm-ns-support-updated-DT-binding-as-syscon-.patch new file mode 100644 index 0000000000..45595bddc9 --- /dev/null +++ b/target/linux/bcm53xx/patches-4.14/084-v4.21-pinctrl-bcm-ns-support-updated-DT-binding-as-syscon-.patch @@ -0,0 +1,99 @@ +From a49d784d5a8272d0f63c448fe8dc69e589db006e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 18 Dec 2018 16:58:08 +0100 +Subject: [PATCH] pinctrl: bcm: ns: support updated DT binding as syscon + subnode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Documentation has been recently updated specifying that pinctrl should +be subnode of the CRU "syscon". Support that by using parent node for +regmap and reading "offset" property from the DT. + +Signed-off-by: Rafał Miłecki +Signed-off-by: Linus Walleij +--- + drivers/pinctrl/bcm/pinctrl-ns.c | 29 +++++++++++++++++++---------- + 1 file changed, 19 insertions(+), 10 deletions(-) + +--- a/drivers/pinctrl/bcm/pinctrl-ns.c ++++ b/drivers/pinctrl/bcm/pinctrl-ns.c +@@ -5,6 +5,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -12,6 +13,7 @@ + #include + #include + #include ++#include + #include + + #define FLAG_BCM4708 BIT(1) +@@ -22,7 +24,8 @@ struct ns_pinctrl { + struct device *dev; + unsigned int chipset_flag; + struct pinctrl_dev *pctldev; +- void __iomem *base; ++ struct regmap *regmap; ++ u32 offset; + + struct pinctrl_desc pctldesc; + struct ns_pinctrl_group *groups; +@@ -229,9 +232,9 @@ static int ns_pinctrl_set_mux(struct pin + unset |= BIT(pin_number); + } + +- tmp = readl(ns_pinctrl->base); ++ regmap_read(ns_pinctrl->regmap, ns_pinctrl->offset, &tmp); + tmp &= ~unset; +- writel(tmp, ns_pinctrl->base); ++ regmap_write(ns_pinctrl->regmap, ns_pinctrl->offset, tmp); + + return 0; + } +@@ -263,13 +266,13 @@ static const struct of_device_id ns_pinc + static int ns_pinctrl_probe(struct platform_device *pdev) + { + struct device *dev = &pdev->dev; ++ struct device_node *np = dev->of_node; + const struct of_device_id *of_id; + struct ns_pinctrl *ns_pinctrl; + struct pinctrl_desc *pctldesc; + struct pinctrl_pin_desc *pin; + struct ns_pinctrl_group *group; + struct ns_pinctrl_function *function; +- struct resource *res; + int i; + + ns_pinctrl = devm_kzalloc(dev, sizeof(*ns_pinctrl), GFP_KERNEL); +@@ -287,12 +290,18 @@ static int ns_pinctrl_probe(struct platf + return -EINVAL; + ns_pinctrl->chipset_flag = (uintptr_t)of_id->data; + +- res = platform_get_resource_byname(pdev, IORESOURCE_MEM, +- "cru_gpio_control"); +- ns_pinctrl->base = devm_ioremap_resource(dev, res); +- if (IS_ERR(ns_pinctrl->base)) { +- dev_err(dev, "Failed to map pinctrl regs\n"); +- return PTR_ERR(ns_pinctrl->base); ++ ns_pinctrl->regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(ns_pinctrl->regmap)) { ++ int err = PTR_ERR(ns_pinctrl->regmap); ++ ++ dev_err(dev, "Failed to map pinctrl regs: %d\n", err); ++ ++ return err; ++ } ++ ++ if (of_property_read_u32(np, "offset", &ns_pinctrl->offset)) { ++ dev_err(dev, "Failed to get register offset\n"); ++ return -ENOENT; + } + + memcpy(pctldesc, &ns_pinctrl_desc, sizeof(*pctldesc)); diff --git a/target/linux/bcm53xx/patches-4.14/302-ARM-dts-BCM5301X-Update-Northstar-pinctrl-binding.patch b/target/linux/bcm53xx/patches-4.14/302-ARM-dts-BCM5301X-Update-Northstar-pinctrl-binding.patch new file mode 100644 index 0000000000..d1d287588c --- /dev/null +++ b/target/linux/bcm53xx/patches-4.14/302-ARM-dts-BCM5301X-Update-Northstar-pinctrl-binding.patch @@ -0,0 +1,31 @@ +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Subject: [PATCH] ARM: dts: BCM5301X: Update Northstar pinctrl binding +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Rafał Miłecki +--- + +--- a/arch/arm/boot/dts/bcm5301x.dtsi ++++ b/arch/arm/boot/dts/bcm5301x.dtsi +@@ -400,16 +400,12 @@ + #size-cells = <1>; + + cru@100 { +- compatible = "simple-bus"; ++ compatible = "syscon", "simple-mfd"; + reg = <0x100 0x1a4>; +- ranges; +- #address-cells = <1>; +- #size-cells = <1>; + +- pin-controller@1c0 { ++ pinctrl { + compatible = "brcm,bcm4708-pinmux"; +- reg = <0x1c0 0x24>; +- reg-names = "cru_gpio_control"; ++ offset = <0xc0>; + + spi-pins { + groups = "spi_grp"; -- 2.30.2