* [PATCH 0/5] arm64: berlin: add pinctrl support @ 2015-09-19 10:02 Jisheng Zhang 2015-09-19 10:02 ` [PATCH 1/5] pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() Jisheng Zhang ` (4 more replies) 0 siblings, 5 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang This series adds support for Marvell berlin4ct pin-controller, allowing to configure the pin muxing from the device tree. This series applies on top of patches adding GPIO support for berlin4ct[1]. [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/371106.html Jisheng Zhang (5): pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() pinctrl: berlin: add the berlin4ct pinctrl driver arm64: berlin: add the pinctrl dependency for Marvell Berlin SoCs pinctrl: dt-binding: document berlin4ct SoC arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 .../devicetree/bindings/pinctrl/berlin,pinctrl.txt | 5 +- arch/arm64/Kconfig.platforms | 1 + arch/arm64/boot/dts/marvell/berlin4ct.dtsi | 27 ++ drivers/pinctrl/berlin/Kconfig | 5 + drivers/pinctrl/berlin/Makefile | 1 + drivers/pinctrl/berlin/berlin-bg2.c | 9 +- drivers/pinctrl/berlin/berlin-bg2cd.c | 9 +- drivers/pinctrl/berlin/berlin-bg2q.c | 9 +- drivers/pinctrl/berlin/berlin.c | 8 +- drivers/pinctrl/berlin/berlin.h | 1 + drivers/pinctrl/berlin/berlin4ct.c | 503 +++++++++++++++++++++ 11 files changed, 567 insertions(+), 11 deletions(-) create mode 100644 drivers/pinctrl/berlin/berlin4ct.c -- 2.5.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/5] pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang @ 2015-09-19 10:02 ` Jisheng Zhang 2015-09-19 10:02 ` [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver Jisheng Zhang ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang Let berlin_pinctrl_probe() accepts an extra argument: regmap, this is to prepare for the next berlin4ct support, where we won't use simple-mfd any more. Signed-off-by: Jisheng Zhang <jszhang@marvell.com> --- drivers/pinctrl/berlin/berlin-bg2.c | 9 ++++++++- drivers/pinctrl/berlin/berlin-bg2cd.c | 9 ++++++++- drivers/pinctrl/berlin/berlin-bg2q.c | 9 ++++++++- drivers/pinctrl/berlin/berlin.c | 8 +------- drivers/pinctrl/berlin/berlin.h | 1 + 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/drivers/pinctrl/berlin/berlin-bg2.c b/drivers/pinctrl/berlin/berlin-bg2.c index 274c553..b2be9be 100644 --- a/drivers/pinctrl/berlin/berlin-bg2.c +++ b/drivers/pinctrl/berlin/berlin-bg2.c @@ -233,8 +233,15 @@ static int berlin2_pinctrl_probe(struct platform_device *pdev) { const struct of_device_id *match = of_match_device(berlin2_pinctrl_match, &pdev->dev); + struct device *dev = &pdev->dev; + struct device_node *parent_np = of_get_parent(dev->of_node); + struct regmap *regmap = syscon_node_to_regmap(parent_np); - return berlin_pinctrl_probe(pdev, match->data); + of_node_put(parent_np); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return berlin_pinctrl_probe(pdev, regmap, match->data); } static struct platform_driver berlin2_pinctrl_driver = { diff --git a/drivers/pinctrl/berlin/berlin-bg2cd.c b/drivers/pinctrl/berlin/berlin-bg2cd.c index 0cb793a..f88a6e5 100644 --- a/drivers/pinctrl/berlin/berlin-bg2cd.c +++ b/drivers/pinctrl/berlin/berlin-bg2cd.c @@ -176,8 +176,15 @@ static int berlin2cd_pinctrl_probe(struct platform_device *pdev) { const struct of_device_id *match = of_match_device(berlin2cd_pinctrl_match, &pdev->dev); + struct device *dev = &pdev->dev; + struct device_node *parent_np = of_get_parent(dev->of_node); + struct regmap *regmap = syscon_node_to_regmap(parent_np); - return berlin_pinctrl_probe(pdev, match->data); + of_node_put(parent_np); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return berlin_pinctrl_probe(pdev, regmap, match->data); } static struct platform_driver berlin2cd_pinctrl_driver = { diff --git a/drivers/pinctrl/berlin/berlin-bg2q.c b/drivers/pinctrl/berlin/berlin-bg2q.c index a466054..c0bc0ec 100644 --- a/drivers/pinctrl/berlin/berlin-bg2q.c +++ b/drivers/pinctrl/berlin/berlin-bg2q.c @@ -395,8 +395,15 @@ static int berlin2q_pinctrl_probe(struct platform_device *pdev) { const struct of_device_id *match = of_match_device(berlin2q_pinctrl_match, &pdev->dev); + struct device *dev = &pdev->dev; + struct device_node *parent_np = of_get_parent(dev->of_node); + struct regmap *regmap = syscon_node_to_regmap(parent_np); - return berlin_pinctrl_probe(pdev, match->data); + of_node_put(parent_np); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return berlin_pinctrl_probe(pdev, regmap, match->data); } static struct platform_driver berlin2q_pinctrl_driver = { diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c index f495806..6d593b5 100644 --- a/drivers/pinctrl/berlin/berlin.c +++ b/drivers/pinctrl/berlin/berlin.c @@ -293,19 +293,13 @@ static struct pinctrl_desc berlin_pctrl_desc = { }; int berlin_pinctrl_probe(struct platform_device *pdev, + struct regmap *regmap, const struct berlin_pinctrl_desc *desc) { struct device *dev = &pdev->dev; - struct device_node *parent_np = of_get_parent(dev->of_node); struct berlin_pinctrl *pctrl; - struct regmap *regmap; int ret; - regmap = syscon_node_to_regmap(parent_np); - of_node_put(parent_np); - if (IS_ERR(regmap)) - return PTR_ERR(regmap); - pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL); if (!pctrl) return -ENOMEM; diff --git a/drivers/pinctrl/berlin/berlin.h b/drivers/pinctrl/berlin/berlin.h index e1aa841..bf5781a 100644 --- a/drivers/pinctrl/berlin/berlin.h +++ b/drivers/pinctrl/berlin/berlin.h @@ -56,6 +56,7 @@ struct berlin_pinctrl_function { #define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} int berlin_pinctrl_probe(struct platform_device *pdev, + struct regmap *regmap, const struct berlin_pinctrl_desc *desc); #endif /* __PINCTRL_BERLIN_H */ -- 2.5.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang 2015-09-19 10:02 ` [PATCH 1/5] pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() Jisheng Zhang @ 2015-09-19 10:02 ` Jisheng Zhang 2015-09-20 19:32 ` Sebastian Hesselbarth 2015-09-19 10:02 ` [PATCH 3/5] arm64: berlin: add the pinctrl dependency for Marvell Berlin SoCs Jisheng Zhang ` (2 subsequent siblings) 4 siblings, 1 reply; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang Add the pin-controller driver for Marvell Berlin BG4CT SoC, with definition of its groups and functions. This uses the core Berlin pinctrl driver. Signed-off-by: Jisheng Zhang <jszhang@marvell.com> --- drivers/pinctrl/berlin/Kconfig | 5 + drivers/pinctrl/berlin/Makefile | 1 + drivers/pinctrl/berlin/berlin4ct.c | 503 +++++++++++++++++++++++++++++++++++++ 3 files changed, 509 insertions(+) create mode 100644 drivers/pinctrl/berlin/berlin4ct.c diff --git a/drivers/pinctrl/berlin/Kconfig b/drivers/pinctrl/berlin/Kconfig index b18322b..eac4d28 100644 --- a/drivers/pinctrl/berlin/Kconfig +++ b/drivers/pinctrl/berlin/Kconfig @@ -17,4 +17,9 @@ config PINCTRL_BERLIN_BG2Q bool select PINCTRL_BERLIN +config PINCTRL_BERLIN4CT + depends on OF && (ARCH_BERLIN || COMPILE_TEST) + bool "Marvell berlin4ct pin controller driver" + select PINCTRL_BERLIN + endif diff --git a/drivers/pinctrl/berlin/Makefile b/drivers/pinctrl/berlin/Makefile index deb0c6b..c8fe2a0 100644 --- a/drivers/pinctrl/berlin/Makefile +++ b/drivers/pinctrl/berlin/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_PINCTRL_BERLIN) += berlin.o obj-$(CONFIG_PINCTRL_BERLIN_BG2) += berlin-bg2.o obj-$(CONFIG_PINCTRL_BERLIN_BG2CD) += berlin-bg2cd.o obj-$(CONFIG_PINCTRL_BERLIN_BG2Q) += berlin-bg2q.o +obj-$(CONFIG_PINCTRL_BERLIN4CT) += berlin4ct.o diff --git a/drivers/pinctrl/berlin/berlin4ct.c b/drivers/pinctrl/berlin/berlin4ct.c new file mode 100644 index 0000000..2960e16 --- /dev/null +++ b/drivers/pinctrl/berlin/berlin4ct.c @@ -0,0 +1,503 @@ +/* + * Marvell berlin4ct pinctrl driver + * + * Copyright (C) 2015 Marvell Technology Group Ltd. + * + * Jisheng Zhang <jszhang@marvell.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <linux/module.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include <linux/regmap.h> + +#include "berlin.h" + +static const struct berlin_desc_group berlin4ct_soc_pinctrl_groups[] = { + BERLIN_PINCTRL_GROUP("EMMC_RSTn", 0x0, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "emmc_rstn"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio47")), + BERLIN_PINCTRL_GROUP("NAND_IO0", 0x0, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io0"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd0"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_clk"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio0")), + BERLIN_PINCTRL_GROUP("NAND_IO1", 0x0, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io1"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd1"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_cdn"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio1")), + BERLIN_PINCTRL_GROUP("NAND_IO2", 0x0, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io2"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd2"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_dat0"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio2")), + BERLIN_PINCTRL_GROUP("NAND_IO3", 0x0, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io3"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd3"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_dat1"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio3")), + BERLIN_PINCTRL_GROUP("NAND_IO4", 0x0, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io4"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxc"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_dat2"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio4")), + BERLIN_PINCTRL_GROUP("NAND_IO5", 0x0, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io5"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxctl"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_dat3"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio5")), + BERLIN_PINCTRL_GROUP("NAND_IO6", 0x0, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io6"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_mdc"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_cmd"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio6")), + BERLIN_PINCTRL_GROUP("NAND_IO7", 0x0, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io7"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_mdio"), + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_wp"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio7")), + BERLIN_PINCTRL_GROUP("NAND_ALE", 0x0, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_ale"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txd0"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio8")), + BERLIN_PINCTRL_GROUP("NAND_CLE", 0x4, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_cle"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txd1"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio9")), + BERLIN_PINCTRL_GROUP("NAND_WEn", 0x4, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_wen"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txd2"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio10")), + BERLIN_PINCTRL_GROUP("NAND_REn", 0x4, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_ren"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txd3"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio11")), + BERLIN_PINCTRL_GROUP("NAND_WPn", 0x4, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_wpn"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio12")), + BERLIN_PINCTRL_GROUP("NAND_CEn", 0x4, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_cen"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txc"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio13")), + BERLIN_PINCTRL_GROUP("NAND_RDY", 0x4, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "nand_rdy"), + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_txctl"), + BERLIN_PINCTRL_FUNCTION(0x3, "gpio14")), + BERLIN_PINCTRL_GROUP("SD0_CLK", 0x4, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio29"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_clk"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_clk"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg8"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg8")), + BERLIN_PINCTRL_GROUP("SD0_DAT0", 0x4, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio30"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_dat0"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_sop"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg9"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg9")), + BERLIN_PINCTRL_GROUP("SD0_DAT1", 0x4, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio31"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_dat1"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_sd"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg10"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg10")), + BERLIN_PINCTRL_GROUP("SD0_DAT2", 0x4, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio32"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_dat2"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_vald"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg11"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg11")), + BERLIN_PINCTRL_GROUP("SD0_DAT3", 0x8, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio33"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_dat3"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts5_clk"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg12"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg12")), + BERLIN_PINCTRL_GROUP("SD0_CDn", 0x8, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio34"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_cdn"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts5_sop"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg13"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg13")), + BERLIN_PINCTRL_GROUP("SD0_CMD", 0x8, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio35"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_cmd"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts5_sd"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg14"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg14")), + BERLIN_PINCTRL_GROUP("SD0_WP", 0x8, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio36"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_wp"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts5_vald"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg15"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg15")), + BERLIN_PINCTRL_GROUP("STS0_CLK", 0x8, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio21"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts0_clk"), + BERLIN_PINCTRL_FUNCTION(0x2, "cpupll_clko"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg0"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg0")), + BERLIN_PINCTRL_GROUP("STS0_SOP", 0x8, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio22"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts0_sop"), + BERLIN_PINCTRL_FUNCTION(0x2, "syspll_clko"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg1"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg1")), + BERLIN_PINCTRL_GROUP("STS0_SD", 0x8, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio23"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts0_sd"), + BERLIN_PINCTRL_FUNCTION(0x2, "mempll_clko"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg2"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg2")), + BERLIN_PINCTRL_GROUP("STS0_VALD", 0x8, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio24"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts0_vald"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg3"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg3")), + BERLIN_PINCTRL_GROUP("STS1_CLK", 0x8, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio25"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts1_clk"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm0"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg4"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg4")), + BERLIN_PINCTRL_GROUP("STS1_SOP", 0x8, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio26"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts1_sop"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm1"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg5"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg5")), + BERLIN_PINCTRL_GROUP("STS1_SD", 0xc, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio27"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts1_sd"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm2"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg6"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg6")), + BERLIN_PINCTRL_GROUP("STS1_VALD", 0xc, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio28"), + BERLIN_PINCTRL_FUNCTION(0x1, "sts1_vald"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm3"), + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg7"), + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg7")), + BERLIN_PINCTRL_GROUP("SCRD0_RST", 0xc, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio15"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_rst"), + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_clk")), + BERLIN_PINCTRL_GROUP("SCRD0_DCLK", 0xc, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio16"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_dclk"), + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_cmd")), + BERLIN_PINCTRL_GROUP("SCRD0_GPIO0", 0xc, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio17"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_gpio0"), + BERLIN_PINCTRL_FUNCTION(0x2, "sif_dio"), + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_dat0")), + BERLIN_PINCTRL_GROUP("SCRD0_GPIO1", 0xc, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio18"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_gpio1"), + BERLIN_PINCTRL_FUNCTION(0x2, "sif_clk"), + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_dat1")), + BERLIN_PINCTRL_GROUP("SCRD0_DIO", 0xc, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio19"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_dio"), + BERLIN_PINCTRL_FUNCTION(0x2, "sif_den"), + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_dat2")), + BERLIN_PINCTRL_GROUP("SCRD0_CRD_PRES", 0xc, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio20"), + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_crd_pres"), + BERLIN_PINCTRL_FUNCTION(0x1, "sd1a_dat3")), + BERLIN_PINCTRL_GROUP("SPI1_SS0n", 0xc, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_ss0n"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio37"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts2_clk")), + BERLIN_PINCTRL_GROUP("SPI1_SS1n", 0xc, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_ss1n"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio38"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts2_sop"), + BERLIN_PINCTRL_FUNCTION(0x4, "pwm1")), + BERLIN_PINCTRL_GROUP("SPI1_SS2n", 0x10, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_ss2n"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio39"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts2_sd"), + BERLIN_PINCTRL_FUNCTION(0x4, "pwm0")), + BERLIN_PINCTRL_GROUP("SPI1_SS3n", 0x10, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_ss3n"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio40"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts2_vald")), + BERLIN_PINCTRL_GROUP("SPI1_SCLK", 0x10, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_sclk"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio41"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts3_clk")), + BERLIN_PINCTRL_GROUP("SPI1_SDO", 0x10, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_sdo"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio42"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts3_sop")), + BERLIN_PINCTRL_GROUP("SPI1_SDI", 0x10, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "spi1_sdi"), + BERLIN_PINCTRL_FUNCTION(0x1, "gpio43"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts3_sd")), + BERLIN_PINCTRL_GROUP("USB0_DRV_VBUS", 0x10, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio44"), + BERLIN_PINCTRL_FUNCTION(0x1, "usb0_drv_vbus"), + BERLIN_PINCTRL_FUNCTION(0x2, "sts3_vald")), + BERLIN_PINCTRL_GROUP("TW0_SCL", 0x10, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio45"), + BERLIN_PINCTRL_FUNCTION(0x1, "tw0_scl")), + BERLIN_PINCTRL_GROUP("TW0_SDA", 0x10, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "gpio46"), + BERLIN_PINCTRL_FUNCTION(0x1, "tw0_sda")), +}; + +static const struct berlin_desc_group berlin4ct_soc_aviopinctrl_groups[] = { + BERLIN_PINCTRL_GROUP("TX_EDDC_SCL", 0x0, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio0"), + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_scl"), + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_scl")), + BERLIN_PINCTRL_GROUP("TX_EDDC_SDA", 0x0, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio1"), + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_sda"), + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_sda")), + BERLIN_PINCTRL_GROUP("I2S1_LRCKO", 0x0, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio2"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_lrcko"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_clk"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg0"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_clk"), + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg0")), + BERLIN_PINCTRL_GROUP("I2S1_BCLKO", 0x0, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio3"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_bclko"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_sop"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg1"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_cmd"), + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg1")), + BERLIN_PINCTRL_GROUP("I2S1_DO", 0x0, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio4"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_do"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_sd"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg2"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_dat0"), + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg2")), + BERLIN_PINCTRL_GROUP("I2S1_MCLK", 0x0, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio5"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_mclk"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_vald"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_test_mclk"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_dat1"), + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg3")), + BERLIN_PINCTRL_GROUP("SPDIFO", 0x0, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio6"), + BERLIN_PINCTRL_FUNCTION(0x1, "spdifo"), + BERLIN_PINCTRL_FUNCTION(0x2, "avpll_clko"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg3")), + BERLIN_PINCTRL_GROUP("I2S2_MCLK", 0x0, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio7"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s2_mclk"), + BERLIN_PINCTRL_FUNCTION(0x4, "hdmi_fbclk"), + BERLIN_PINCTRL_FUNCTION(0x5, "pdm_clko")), + BERLIN_PINCTRL_GROUP("I2S2_LRCKI", 0x0, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio8"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s2_lrcki"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm0"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts7_clk"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_test_lrck"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_dat2")), + BERLIN_PINCTRL_GROUP("I2S2_BCLKI", 0x0, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio9"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s2_bclki"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm1"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts7_sop"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_test_bclk"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_dat3")), + BERLIN_PINCTRL_GROUP("I2S2_DI0", 0x4, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio10"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s2_di0"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm2"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts7_sd"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_test_sdin"), + BERLIN_PINCTRL_FUNCTION(0x5, "pdm_di0"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_cdn")), + BERLIN_PINCTRL_GROUP("I2S2_DI1", 0x4, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio11"), + BERLIN_PINCTRL_FUNCTION(0x1, "i2s2_di1"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm3"), + BERLIN_PINCTRL_FUNCTION(0x3, "sts7_vald"), + BERLIN_PINCTRL_FUNCTION(0x4, "adac_test_pwmclk"), + BERLIN_PINCTRL_FUNCTION(0x5, "pdm_di1"), + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_wp")), +}; + +static const struct berlin_desc_group berlin4ct_sysmgr_pinctrl_groups[] = { + BERLIN_PINCTRL_GROUP("SM_TW2_SCL", 0x0, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio19"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_scl")), + BERLIN_PINCTRL_GROUP("SM_TW2_SDA", 0x0, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio20"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_sda")), + BERLIN_PINCTRL_GROUP("SM_TW3_SCL", 0x0, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio21"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_scl")), + BERLIN_PINCTRL_GROUP("SM_TW3_SDA", 0x0, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio22"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_sda")), + BERLIN_PINCTRL_GROUP("SM_TMS", 0x0, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tms"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio0"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm0")), + BERLIN_PINCTRL_GROUP("SM_TDI", 0x0, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdi"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio1"), + BERLIN_PINCTRL_FUNCTION(0x2, "pwm1")), + BERLIN_PINCTRL_GROUP("SM_TDO", 0x0, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdo"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio2")), + BERLIN_PINCTRL_GROUP("SM_URT0_TXD", 0x0, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_urt0_txd"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio3")), + BERLIN_PINCTRL_GROUP("SM_URT0_RXD", 0x0, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_urt0_rxd"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio4")), + BERLIN_PINCTRL_GROUP("SM_URT1_TXD", 0x0, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio5"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_urt1_txd"), + BERLIN_PINCTRL_FUNCTION(0x2, "eth1_rxclk"), + BERLIN_PINCTRL_FUNCTION(0x3, "pwm2"), + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer0"), + BERLIN_PINCTRL_FUNCTION(0x5, "clk_25m")), + BERLIN_PINCTRL_GROUP("SM_URT1_RXD", 0x4, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio6"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_urt1_rxd"), + BERLIN_PINCTRL_FUNCTION(0x3, "pwm3"), + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer1")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SS0n", 0x4, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_spi2_ss0n"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio7")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SS1n", 0x4, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio8"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_spi2_ss1n")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SS2n", 0x4, 0x3, 0x09, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio9"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_spi2_ss2n"), + BERLIN_PINCTRL_FUNCTION(0x2, "eth1_mdc"), + BERLIN_PINCTRL_FUNCTION(0x3, "pwm0"), + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer0"), + BERLIN_PINCTRL_FUNCTION(0x5, "clk_25m")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SS3n", 0x4, 0x3, 0x0c, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio10"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_spi2_ss3n"), + BERLIN_PINCTRL_FUNCTION(0x2, "eth1_mdio"), + BERLIN_PINCTRL_FUNCTION(0x3, "pwm1"), + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer1")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SDO", 0x4, 0x3, 0x0f, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_spi2_sdo"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio11")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SDI", 0x4, 0x3, 0x12, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_spi2_sdi"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio12")), + BERLIN_PINCTRL_GROUP("SM_SPI2_SCLK", 0x4, 0x3, 0x15, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_spi2_sclk"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio13")), + BERLIN_PINCTRL_GROUP("SM_FE_LED0", 0x4, 0x3, 0x18, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio14"), + BERLIN_PINCTRL_FUNCTION(0x2, "sm_fe_led0")), + BERLIN_PINCTRL_GROUP("SM_FE_LED1", 0x4, 0x3, 0x1b, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_pwr_ok"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio15"), + BERLIN_PINCTRL_FUNCTION(0x2, "sm_fe_led1")), + BERLIN_PINCTRL_GROUP("SM_FE_LED2", 0x8, 0x3, 0x00, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio16"), + BERLIN_PINCTRL_FUNCTION(0x2, "sm_fe_led2")), + BERLIN_PINCTRL_GROUP("SM_HDMI_HPD", 0x8, 0x3, 0x03, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio17"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_hdmi_hpd")), + BERLIN_PINCTRL_GROUP("SM_HDMI_CEC", 0x8, 0x3, 0x06, + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio18"), + BERLIN_PINCTRL_FUNCTION(0x1, "sm_hdmi_cec")), +}; + +static const struct berlin_pinctrl_desc berlin4ct_soc_pinctrl_data = { + .groups = berlin4ct_soc_pinctrl_groups, + .ngroups = ARRAY_SIZE(berlin4ct_soc_pinctrl_groups), +}; + +static const struct berlin_pinctrl_desc berlin4ct_soc_aviopinctrl_data = { + .groups = berlin4ct_soc_aviopinctrl_groups, + .ngroups = ARRAY_SIZE(berlin4ct_soc_aviopinctrl_groups), +}; + +static const struct berlin_pinctrl_desc berlin4ct_sysmgr_pinctrl_data = { + .groups = berlin4ct_sysmgr_pinctrl_groups, + .ngroups = ARRAY_SIZE(berlin4ct_sysmgr_pinctrl_groups), +}; + +static const struct of_device_id berlin4ct_pinctrl_match[] = { + { + .compatible = "marvell,berlin4ct-soc-pinctrl", + .data = &berlin4ct_soc_pinctrl_data, + }, + { + .compatible = "marvell,berlin4ct-avio-pinctrl", + .data = &berlin4ct_soc_aviopinctrl_data, + }, + { + .compatible = "marvell,berlin4ct-sm-pinctrl", + .data = &berlin4ct_sysmgr_pinctrl_data, + }, + {} +}; +MODULE_DEVICE_TABLE(of, berlin4ct_pinctrl_match); + +static int berlin4ct_pinctrl_probe(struct platform_device *pdev) +{ + const struct of_device_id *match = + of_match_device(berlin4ct_pinctrl_match, &pdev->dev); + struct regmap_config *rmconfig; + struct regmap *regmap; + struct resource *res; + void __iomem *base; + + rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL); + if (!rmconfig) + return -ENOMEM; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(base)) + return PTR_ERR(base); + + rmconfig->reg_bits = 32, + rmconfig->val_bits = 32, + rmconfig->reg_stride = 4, + rmconfig->max_register = resource_size(res); + + regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return berlin_pinctrl_probe(pdev, regmap, match->data); +} + +static struct platform_driver berlin4ct_pinctrl_driver = { + .probe = berlin4ct_pinctrl_probe, + .driver = { + .name = "berlin4ct-pinctrl", + .of_match_table = berlin4ct_pinctrl_match, + }, +}; +module_platform_driver(berlin4ct_pinctrl_driver); + +MODULE_AUTHOR("Jisheng Zhang <jszhang@marvell.com>"); +MODULE_DESCRIPTION("Marvell berlin4ct pinctrl driver"); +MODULE_LICENSE("GPL"); -- 2.5.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver 2015-09-19 10:02 ` [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver Jisheng Zhang @ 2015-09-20 19:32 ` Sebastian Hesselbarth 2015-09-21 7:27 ` Jisheng Zhang 2015-09-21 12:06 ` Jisheng Zhang 0 siblings, 2 replies; 10+ messages in thread From: Sebastian Hesselbarth @ 2015-09-20 19:32 UTC (permalink / raw) To: Jisheng Zhang, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel On 19.09.2015 12:02, Jisheng Zhang wrote: > Add the pin-controller driver for Marvell Berlin BG4CT SoC, with definition > of its groups and functions. This uses the core Berlin pinctrl driver. > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com> > --- [...] > diff --git a/drivers/pinctrl/berlin/berlin4ct.c b/drivers/pinctrl/berlin/berlin4ct.c > new file mode 100644 > index 0000000..2960e16 > --- /dev/null > +++ b/drivers/pinctrl/berlin/berlin4ct.c > @@ -0,0 +1,503 @@ > +/* > + * Marvell berlin4ct pinctrl driver [...] > +static const struct berlin_desc_group berlin4ct_soc_pinctrl_groups[] = { > + BERLIN_PINCTRL_GROUP("EMMC_RSTn", 0x0, 0x3, 0x00, > + BERLIN_PINCTRL_FUNCTION(0x0, "emmc_rstn"), > + BERLIN_PINCTRL_FUNCTION(0x1, "gpio47")), Jisheng, I am fine with naming the groups after the 0x0 function but the functions themselves should be named after a generic name, e.g. "emmc" instead of "emmc_rstn". That will allow to add pinmux nodes like uart_pmx { groups = "SM_UART0_TXD", "SM_UART0_RXD"; function = "uart0"; }; instead of two separate nodes like in patch 5/5. You should however keep the actual pin function e.g. in a comment after the function define above: BERLIN_PINCTRL_GROUP("EMMC_RSTn", 0x0, 0x3, 0x00, BERLIN_PINCTRL_FUNCTION(0x0, "emmc"), /* RESETn */ BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO47 */ > + BERLIN_PINCTRL_GROUP("NAND_IO0", 0x0, 0x3, 0x03, > + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io0"), > + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd0"), > + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_clk"), > + BERLIN_PINCTRL_FUNCTION(0x3, "gpio0")), [...] > + BERLIN_PINCTRL_GROUP("SD0_CLK", 0x4, 0x3, 0x12, > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio29"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_clk"), > + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_clk"), Please find a better name for "sts" whatever it is for. > + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg8"), ditto for "v4g" > + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg8")), [...] > + BERLIN_PINCTRL_GROUP("SCRD0_RST", 0xc, 0x3, 0x06, > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio15"), > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_rst"), ditto for "scrd0" > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_clk")), > + BERLIN_PINCTRL_GROUP("SCRD0_DCLK", 0xc, 0x3, 0x09, > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio16"), > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_dclk"), > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_cmd")), What is the "a" for in "sd1a" ? There is a "sd1b" below so I guess that there is two pinmux groups that mux sd1? > + BERLIN_PINCTRL_GROUP("SCRD0_GPIO0", 0xc, 0x3, 0x0c, > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio17"), > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_gpio0"), > + BERLIN_PINCTRL_FUNCTION(0x2, "sif_dio"), What kind of interface is "sif" ? > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_dat0")), [...] > +static const struct berlin_desc_group berlin4ct_soc_aviopinctrl_groups[] = { > + BERLIN_PINCTRL_GROUP("TX_EDDC_SCL", 0x0, 0x3, 0x00, > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio0"), > + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_scl"), > + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_scl")), > + BERLIN_PINCTRL_GROUP("TX_EDDC_SDA", 0x0, 0x3, 0x03, > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio1"), > + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_sda"), > + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_sda")), > + BERLIN_PINCTRL_GROUP("I2S1_LRCKO", 0x0, 0x3, 0x06, > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio2"), > + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_lrcko"), > + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_clk"), > + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg0"), > + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_clk"), > + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg0")), [...] > +static const struct berlin_desc_group berlin4ct_sysmgr_pinctrl_groups[] = { > + BERLIN_PINCTRL_GROUP("SM_TW2_SCL", 0x0, 0x3, 0x00, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio19"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_scl")), I'd say, remove the "sm_" prefix for all of the SM functions if there is no collusion with any of the other functions. > + BERLIN_PINCTRL_GROUP("SM_TW2_SDA", 0x0, 0x3, 0x03, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio20"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_sda")), > + BERLIN_PINCTRL_GROUP("SM_TW3_SCL", 0x0, 0x3, 0x06, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio21"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_scl")), > + BERLIN_PINCTRL_GROUP("SM_TW3_SDA", 0x0, 0x3, 0x09, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio22"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_sda")), > + BERLIN_PINCTRL_GROUP("SM_TMS", 0x0, 0x3, 0x0c, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tms"), Please use function "jtag" instead. > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio0"), > + BERLIN_PINCTRL_FUNCTION(0x2, "pwm0")), > + BERLIN_PINCTRL_GROUP("SM_TDI", 0x0, 0x3, 0x0f, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdi"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio1"), > + BERLIN_PINCTRL_FUNCTION(0x2, "pwm1")), > + BERLIN_PINCTRL_GROUP("SM_TDO", 0x0, 0x3, 0x12, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdo"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio2")), > + BERLIN_PINCTRL_GROUP("SM_URT0_TXD", 0x0, 0x3, 0x15, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_urt0_txd"), Please avoid abbreviating acronyms even more, we can afford the few extra bytes. [...] > + BERLIN_PINCTRL_GROUP("SM_URT1_TXD", 0x0, 0x3, 0x1b, > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio5"), > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_urt1_txd"), > + BERLIN_PINCTRL_FUNCTION(0x2, "eth1_rxclk"), > + BERLIN_PINCTRL_FUNCTION(0x3, "pwm2"), > + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer0"), > + BERLIN_PINCTRL_FUNCTION(0x5, "clk_25m")), "clko" ? Sebastian [...] > +static int berlin4ct_pinctrl_probe(struct platform_device *pdev) > +{ > + const struct of_device_id *match = > + of_match_device(berlin4ct_pinctrl_match, &pdev->dev); > + struct regmap_config *rmconfig; > + struct regmap *regmap; > + struct resource *res; > + void __iomem *base; > + > + rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL); > + if (!rmconfig) > + return -ENOMEM; > + > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + base = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(base)) > + return PTR_ERR(base); > + > + rmconfig->reg_bits = 32, > + rmconfig->val_bits = 32, > + rmconfig->reg_stride = 4, > + rmconfig->max_register = resource_size(res); > + > + regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig); > + if (IS_ERR(regmap)) > + return PTR_ERR(regmap); > + > + return berlin_pinctrl_probe(pdev, regmap, match->data); > +} > + > +static struct platform_driver berlin4ct_pinctrl_driver = { > + .probe = berlin4ct_pinctrl_probe, > + .driver = { > + .name = "berlin4ct-pinctrl", > + .of_match_table = berlin4ct_pinctrl_match, > + }, > +}; > +module_platform_driver(berlin4ct_pinctrl_driver); > + > +MODULE_AUTHOR("Jisheng Zhang <jszhang@marvell.com>"); > +MODULE_DESCRIPTION("Marvell berlin4ct pinctrl driver"); > +MODULE_LICENSE("GPL"); > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver 2015-09-20 19:32 ` Sebastian Hesselbarth @ 2015-09-21 7:27 ` Jisheng Zhang 2015-09-21 12:06 ` Jisheng Zhang 1 sibling, 0 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-21 7:27 UTC (permalink / raw) To: Sebastian Hesselbarth Cc: linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak, devicetree, linux-arm-kernel, linux-gpio, linux-kernel Dear Sebastian, On Sun, 20 Sep 2015 21:32:37 +0200 Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> wrote: > On 19.09.2015 12:02, Jisheng Zhang wrote: > > Add the pin-controller driver for Marvell Berlin BG4CT SoC, with definition > > of its groups and functions. This uses the core Berlin pinctrl driver. > > > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com> > > --- > [...] > > diff --git a/drivers/pinctrl/berlin/berlin4ct.c b/drivers/pinctrl/berlin/berlin4ct.c > > new file mode 100644 > > index 0000000..2960e16 > > --- /dev/null > > +++ b/drivers/pinctrl/berlin/berlin4ct.c > > @@ -0,0 +1,503 @@ > > +/* > > + * Marvell berlin4ct pinctrl driver > [...] > > +static const struct berlin_desc_group berlin4ct_soc_pinctrl_groups[] = { > > + BERLIN_PINCTRL_GROUP("EMMC_RSTn", 0x0, 0x3, 0x00, > > + BERLIN_PINCTRL_FUNCTION(0x0, "emmc_rstn"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "gpio47")), > > Jisheng, > > I am fine with naming the groups after the 0x0 function but > the functions themselves should be named after a generic > name, e.g. "emmc" instead of "emmc_rstn". This seems better. Will change in newer version. > > That will allow to add pinmux nodes like > > uart_pmx { > groups = "SM_UART0_TXD", "SM_UART0_RXD"; > function = "uart0"; > }; > > instead of two separate nodes like in patch 5/5. > > You should however keep the actual pin function e.g. in a comment > after the function define above: > > BERLIN_PINCTRL_GROUP("EMMC_RSTn", 0x0, 0x3, 0x00, > BERLIN_PINCTRL_FUNCTION(0x0, "emmc"), /* RESETn */ > BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO47 */ > > > + BERLIN_PINCTRL_GROUP("NAND_IO0", 0x0, 0x3, 0x03, > > + BERLIN_PINCTRL_FUNCTION(0x0, "nand_io0"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "rgmii_rxd0"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "sd1_clk"), > > + BERLIN_PINCTRL_FUNCTION(0x3, "gpio0")), > [...] > > + BERLIN_PINCTRL_GROUP("SD0_CLK", 0x4, 0x3, 0x12, > > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio29"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sd0_clk"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "sts4_clk"), > > Please find a better name for "sts" whatever it is for. sts is one kind of HW component, and that's what we called it. > > > + BERLIN_PINCTRL_FUNCTION(0x5, "v4g_dbg8"), > > ditto for "v4g" v4g is another kind of HW component which is called as "v4g" > > > + BERLIN_PINCTRL_FUNCTION(0x7, "phy_dbg8")), > [...] > > + BERLIN_PINCTRL_GROUP("SCRD0_RST", 0xc, 0x3, 0x06, > > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio15"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_rst"), > > ditto for "scrd0" scrd stands for smartcard. But it's what HW/ASIC call them > > > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_clk")), > > + BERLIN_PINCTRL_GROUP("SCRD0_DCLK", 0xc, 0x3, 0x09, > > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio16"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_dclk"), > > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_cmd")), > > What is the "a" for in "sd1a" ? There is a "sd1b" below so I > guess that there is two pinmux groups that mux sd1? Yes, correct. > > > + BERLIN_PINCTRL_GROUP("SCRD0_GPIO0", 0xc, 0x3, 0x0c, > > + BERLIN_PINCTRL_FUNCTION(0x0, "gpio17"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "scrd0_gpio0"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "sif_dio"), > > What kind of interface is "sif" ? serial interface, ASIC called it as SIF > > > + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a_dat0")), > [...] > > +static const struct berlin_desc_group berlin4ct_soc_aviopinctrl_groups[] = { > > + BERLIN_PINCTRL_GROUP("TX_EDDC_SCL", 0x0, 0x3, 0x00, > > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio0"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_scl"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_scl")), > > + BERLIN_PINCTRL_GROUP("TX_EDDC_SDA", 0x0, 0x3, 0x03, > > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio1"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "tx_eddc_sda"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "tw1_sda")), > > + BERLIN_PINCTRL_GROUP("I2S1_LRCKO", 0x0, 0x3, 0x06, > > + BERLIN_PINCTRL_FUNCTION(0x0, "avio_gpio2"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "i2s1_lrcko"), > > + BERLIN_PINCTRL_FUNCTION(0x3, "sts6_clk"), > > + BERLIN_PINCTRL_FUNCTION(0x4, "adac_dbg0"), > > + BERLIN_PINCTRL_FUNCTION(0x6, "sd1b_clk"), > > + BERLIN_PINCTRL_FUNCTION(0x7, "avio_dbg0")), > [...] > > +static const struct berlin_desc_group berlin4ct_sysmgr_pinctrl_groups[] = { > > + BERLIN_PINCTRL_GROUP("SM_TW2_SCL", 0x0, 0x3, 0x00, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio19"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_scl")), > > I'd say, remove the "sm_" prefix for all of the SM functions if > there is no collusion with any of the other functions. Could I keep "sm_" prefix for SM GPIOs? > > > + BERLIN_PINCTRL_GROUP("SM_TW2_SDA", 0x0, 0x3, 0x03, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio20"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw2_sda")), > > + BERLIN_PINCTRL_GROUP("SM_TW3_SCL", 0x0, 0x3, 0x06, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio21"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_scl")), > > + BERLIN_PINCTRL_GROUP("SM_TW3_SDA", 0x0, 0x3, 0x09, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio22"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_tw3_sda")), > > + BERLIN_PINCTRL_GROUP("SM_TMS", 0x0, 0x3, 0x0c, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tms"), > > Please use function "jtag" instead. OK. So I also need to name "jtag" in below sm_tdi, sm_sdo, right? > > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio0"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "pwm0")), > > + BERLIN_PINCTRL_GROUP("SM_TDI", 0x0, 0x3, 0x0f, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdi"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio1"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "pwm1")), > > + BERLIN_PINCTRL_GROUP("SM_TDO", 0x0, 0x3, 0x12, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdo"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio2")), > > + BERLIN_PINCTRL_GROUP("SM_URT0_TXD", 0x0, 0x3, 0x15, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_urt0_txd"), > > Please avoid abbreviating acronyms even more, we can afford the > few extra bytes. > > [...] > > + BERLIN_PINCTRL_GROUP("SM_URT1_TXD", 0x0, 0x3, 0x1b, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_gpio5"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_urt1_txd"), > > + BERLIN_PINCTRL_FUNCTION(0x2, "eth1_rxclk"), > > + BERLIN_PINCTRL_FUNCTION(0x3, "pwm2"), > > + BERLIN_PINCTRL_FUNCTION(0x4, "sm_timer0"), > > + BERLIN_PINCTRL_FUNCTION(0x5, "clk_25m")), > > "clko" ? This is for 25m clk output. but ASIC calls this clk_25m, there's no "o". > > Sebastian > > [...] > > +static int berlin4ct_pinctrl_probe(struct platform_device *pdev) > > +{ > > + const struct of_device_id *match = > > + of_match_device(berlin4ct_pinctrl_match, &pdev->dev); > > + struct regmap_config *rmconfig; > > + struct regmap *regmap; > > + struct resource *res; > > + void __iomem *base; > > + > > + rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL); > > + if (!rmconfig) > > + return -ENOMEM; > > + > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + base = devm_ioremap_resource(&pdev->dev, res); > > + if (IS_ERR(base)) > > + return PTR_ERR(base); > > + > > + rmconfig->reg_bits = 32, > > + rmconfig->val_bits = 32, > > + rmconfig->reg_stride = 4, > > + rmconfig->max_register = resource_size(res); > > + > > + regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig); > > + if (IS_ERR(regmap)) > > + return PTR_ERR(regmap); > > + > > + return berlin_pinctrl_probe(pdev, regmap, match->data); > > +} > > + > > +static struct platform_driver berlin4ct_pinctrl_driver = { > > + .probe = berlin4ct_pinctrl_probe, > > + .driver = { > > + .name = "berlin4ct-pinctrl", > > + .of_match_table = berlin4ct_pinctrl_match, > > + }, > > +}; > > +module_platform_driver(berlin4ct_pinctrl_driver); > > + > > +MODULE_AUTHOR("Jisheng Zhang <jszhang@marvell.com>"); > > +MODULE_DESCRIPTION("Marvell berlin4ct pinctrl driver"); > > +MODULE_LICENSE("GPL"); > > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver 2015-09-20 19:32 ` Sebastian Hesselbarth 2015-09-21 7:27 ` Jisheng Zhang @ 2015-09-21 12:06 ` Jisheng Zhang 1 sibling, 0 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-21 12:06 UTC (permalink / raw) To: Sebastian Hesselbarth Cc: linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak, devicetree, linux-arm-kernel, linux-gpio, linux-kernel Dear Sebastian, On Sun, 20 Sep 2015 21:32:37 +0200 Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> wrote: > > + BERLIN_PINCTRL_GROUP("SM_TDO", 0x0, 0x3, 0x12, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_tdo"), > > + BERLIN_PINCTRL_FUNCTION(0x1, "sm_gpio2")), > > + BERLIN_PINCTRL_GROUP("SM_URT0_TXD", 0x0, 0x3, 0x15, > > + BERLIN_PINCTRL_FUNCTION(0x0, "sm_urt0_txd"), > > Please avoid abbreviating acronyms even more, we can afford the > few extra bytes. In the 2nd version, I kept using HW names, for example: 1. "urt0" as the function name, 2. "SM_URT0_TXD" as the pin name (group name) to keep sync with HW, especially the pin names are the same as HW's, because that's what HW doc, sch, etc. call them. IMHO, using a different name with HW is not a good idea, what do you think? Thanks, Jisheng ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/5] arm64: berlin: add the pinctrl dependency for Marvell Berlin SoCs 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang 2015-09-19 10:02 ` [PATCH 1/5] pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() Jisheng Zhang 2015-09-19 10:02 ` [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver Jisheng Zhang @ 2015-09-19 10:02 ` Jisheng Zhang 2015-09-19 10:02 ` [PATCH 4/5] pinctrl: dt-binding: document berlin4ct SoC Jisheng Zhang 2015-09-19 10:02 ` [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 Jisheng Zhang 4 siblings, 0 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang This is to add the pinctrl dependency for Marvell Berlin SoCs. Signed-off-by: Jisheng Zhang <jszhang@marvell.com> --- arch/arm64/Kconfig.platforms | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms index c6e2c75..3d17ee2 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -9,6 +9,7 @@ config ARCH_BERLIN bool "Marvell Berlin SoC Family" select ARCH_REQUIRE_GPIOLIB select DW_APB_ICTL + select PINCTRL help This enables support for Marvell Berlin SoC Family -- 2.5.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/5] pinctrl: dt-binding: document berlin4ct SoC 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang ` (2 preceding siblings ...) 2015-09-19 10:02 ` [PATCH 3/5] arm64: berlin: add the pinctrl dependency for Marvell Berlin SoCs Jisheng Zhang @ 2015-09-19 10:02 ` Jisheng Zhang 2015-09-19 10:02 ` [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 Jisheng Zhang 4 siblings, 0 replies; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang Add berlin4ct to existing berlin pinctrl device tree binding. Signed-off-by: Jisheng Zhang <jszhang@marvell.com> --- Documentation/devicetree/bindings/pinctrl/berlin,pinctrl.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/pinctrl/berlin,pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/berlin,pinctrl.txt index a8bb5e2..0580860 100644 --- a/Documentation/devicetree/bindings/pinctrl/berlin,pinctrl.txt +++ b/Documentation/devicetree/bindings/pinctrl/berlin,pinctrl.txt @@ -20,7 +20,10 @@ Required properties: "marvell,berlin2cd-soc-pinctrl", "marvell,berlin2cd-system-pinctrl", "marvell,berlin2q-soc-pinctrl", - "marvell,berlin2q-system-pinctrl" + "marvell,berlin2q-system-pinctrl", + "marvell,berlin4ct-avio-pinctrl", + "marvell,berlin4ct-sm-pinctrl", + "marvell,berlin4ct-soc-pinctrl" Required subnode-properties: - groups: a list of strings describing the group names. -- 2.5.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang ` (3 preceding siblings ...) 2015-09-19 10:02 ` [PATCH 4/5] pinctrl: dt-binding: document berlin4ct SoC Jisheng Zhang @ 2015-09-19 10:02 ` Jisheng Zhang 2015-09-20 19:38 ` Sebastian Hesselbarth 4 siblings, 1 reply; 10+ messages in thread From: Jisheng Zhang @ 2015-09-19 10:02 UTC (permalink / raw) To: sebastian.hesselbarth, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel, Jisheng Zhang Add the avio, soc, sm pinctrl nodes for Marvell berlin4ct SoC. This patch also adds urt0 txd and rxd muxing setup in the dtsi because uart0 always use them to work, no other possibilities. Signed-off-by: Jisheng Zhang <jszhang@marvell.com> --- arch/arm64/boot/dts/marvell/berlin4ct.dtsi | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arch/arm64/boot/dts/marvell/berlin4ct.dtsi b/arch/arm64/boot/dts/marvell/berlin4ct.dtsi index a3b5f1d..4566e4e 100644 --- a/arch/arm64/boot/dts/marvell/berlin4ct.dtsi +++ b/arch/arm64/boot/dts/marvell/berlin4ct.dtsi @@ -225,6 +225,16 @@ }; }; + soc_pinctrl: pinctrl@ea8000 { + compatible = "marvell,berlin4ct-soc-pinctrl"; + reg = <0xea8000 0x14>; + }; + + avio_pinctrl: pinctrl@ea8400 { + compatible = "marvell,berlin4ct-avio-pinctrl"; + reg = <0xea8400 8>; + }; + apb@fc0000 { compatible = "simple-bus"; #address-cells = <1>; @@ -278,6 +288,23 @@ clocks = <&osc>; reg-shift = <2>; status = "disabled"; + pinctrl-0 = <&urt0_txd_pmux>, <&urt0_rxd_pmux>; + pinctrl-names = "default", "default"; + }; + }; + + sm_pinctrl: pinctrl@fe2200 { + compatible = "marvell,berlin4ct-sm-pinctrl"; + reg = <0xfe2200 0xc>; + + urt0_txd_pmux: urt0_txd-pmux { + groups = "SM_URT0_TXD"; + function = "sm_urt0_txd"; + }; + + urt0_rxd_pmux: urt0_rxd-pmux { + groups = "SM_URT0_RXD"; + function = "sm_urt0_rxd"; }; }; }; -- 2.5.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 2015-09-19 10:02 ` [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 Jisheng Zhang @ 2015-09-20 19:38 ` Sebastian Hesselbarth 0 siblings, 0 replies; 10+ messages in thread From: Sebastian Hesselbarth @ 2015-09-20 19:38 UTC (permalink / raw) To: Jisheng Zhang, linus.walleij, antoine.tenart, catalin.marinas, will.deacon, mark.rutland, robh+dt, pawel.moll, ijc+devicetree, galak Cc: devicetree, linux-arm-kernel, linux-gpio, linux-kernel On 19.09.2015 12:02, Jisheng Zhang wrote: > Add the avio, soc, sm pinctrl nodes for Marvell berlin4ct SoC. This > patch also adds urt0 txd and rxd muxing setup in the dtsi because uart0 > always use them to work, no other possibilities. Please split the patch into two: one adding the pinctrl nodes and one adding the default pinmux to uart0 node. > Signed-off-by: Jisheng Zhang <jszhang@marvell.com> > --- > arch/arm64/boot/dts/marvell/berlin4ct.dtsi | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/arch/arm64/boot/dts/marvell/berlin4ct.dtsi b/arch/arm64/boot/dts/marvell/berlin4ct.dtsi > index a3b5f1d..4566e4e 100644 > --- a/arch/arm64/boot/dts/marvell/berlin4ct.dtsi > +++ b/arch/arm64/boot/dts/marvell/berlin4ct.dtsi > @@ -225,6 +225,16 @@ > }; > }; > > + soc_pinctrl: pinctrl@ea8000 { > + compatible = "marvell,berlin4ct-soc-pinctrl"; > + reg = <0xea8000 0x14>; > + }; > + > + avio_pinctrl: pinctrl@ea8400 { > + compatible = "marvell,berlin4ct-avio-pinctrl"; > + reg = <0xea8400 8>; s/8/0x8/ > + }; > + > apb@fc0000 { > compatible = "simple-bus"; > #address-cells = <1>; > @@ -278,6 +288,23 @@ > clocks = <&osc>; > reg-shift = <2>; > status = "disabled"; > + pinctrl-0 = <&urt0_txd_pmux>, <&urt0_rxd_pmux>; > + pinctrl-names = "default", "default"; pinctrl-names = "default", "default"; refers to pinctrl-0 and pinctrl-1 respectively. There is no pinctrl-1, so please remove the second pinctrl-names element. > + }; > + }; > + > + sm_pinctrl: pinctrl@fe2200 { > + compatible = "marvell,berlin4ct-sm-pinctrl"; > + reg = <0xfe2200 0xc>; > + > + urt0_txd_pmux: urt0_txd-pmux { > + groups = "SM_URT0_TXD"; > + function = "sm_urt0_txd"; > + }; > + > + urt0_rxd_pmux: urt0_rxd-pmux { > + groups = "SM_URT0_RXD"; > + function = "sm_urt0_rxd"; If you change the driver to generic function names ("uart0") this boils down to a single uart0_pmux: uart0-pmux { groups = "SM_UART0_TXD", "SM_UART0_RXD"; function = "uart0"; }; pinmux node and the reference in uart0 node to pinctrl-0 = <&uart0_pmux>; pinctrl-names = "default"; Sebastian > }; > }; > }; > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-09-21 12:10 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-09-19 10:02 [PATCH 0/5] arm64: berlin: add pinctrl support Jisheng Zhang 2015-09-19 10:02 ` [PATCH 1/5] pinctrl: berlin: regmap as an extra argument of berlin_pinctrl_probe() Jisheng Zhang 2015-09-19 10:02 ` [PATCH 2/5] pinctrl: berlin: add the berlin4ct pinctrl driver Jisheng Zhang 2015-09-20 19:32 ` Sebastian Hesselbarth 2015-09-21 7:27 ` Jisheng Zhang 2015-09-21 12:06 ` Jisheng Zhang 2015-09-19 10:02 ` [PATCH 3/5] arm64: berlin: add the pinctrl dependency for Marvell Berlin SoCs Jisheng Zhang 2015-09-19 10:02 ` [PATCH 4/5] pinctrl: dt-binding: document berlin4ct SoC Jisheng Zhang 2015-09-19 10:02 ` [PATCH 5/5] arm64: dts: berlin4ct: add the pinctrl node and muxing setup for uart0 Jisheng Zhang 2015-09-20 19:38 ` Sebastian Hesselbarth
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).