pinctrl: ralink: move to mediatek as mtmips
authorArınç ÜNAL <arinc.unal@arinc9.com>
Fri, 17 Mar 2023 21:29:54 +0000 (00:29 +0300)
committerLinus Walleij <linus.walleij@linaro.org>
Sun, 19 Mar 2023 20:47:25 +0000 (21:47 +0100)
This platform from Ralink was acquired by MediaTek in 2011. Then, MediaTek
introduced new SoCs which utilise this platform. Move the driver to
mediatek pinctrl directory. Rename the ralink core driver to mtmips.

Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
Link: https://lore.kernel.org/r/20230317213011.13656-5-arinc.unal@arinc9.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
22 files changed:
drivers/pinctrl/Kconfig
drivers/pinctrl/Makefile
drivers/pinctrl/mediatek/Kconfig
drivers/pinctrl/mediatek/Makefile
drivers/pinctrl/mediatek/pinctrl-mt7620.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mt7621.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mt76x8.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mtmips.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mtmips.h [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-rt2880.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-rt305x.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-rt3883.c [new file with mode: 0644]
drivers/pinctrl/ralink/Kconfig [deleted file]
drivers/pinctrl/ralink/Makefile [deleted file]
drivers/pinctrl/ralink/pinctrl-mt7620.c [deleted file]
drivers/pinctrl/ralink/pinctrl-mt7621.c [deleted file]
drivers/pinctrl/ralink/pinctrl-mt76x8.c [deleted file]
drivers/pinctrl/ralink/pinctrl-ralink.c [deleted file]
drivers/pinctrl/ralink/pinctrl-ralink.h [deleted file]
drivers/pinctrl/ralink/pinctrl-rt2880.c [deleted file]
drivers/pinctrl/ralink/pinctrl-rt305x.c [deleted file]
drivers/pinctrl/ralink/pinctrl-rt3883.c [deleted file]

index 694f47fe6d1122e25d42fe1d86e4526a052a025b..e2a24d668e413cb26930eb8968181ab7f0c66b5f 100644 (file)
@@ -538,7 +538,6 @@ source "drivers/pinctrl/nuvoton/Kconfig"
 source "drivers/pinctrl/nxp/Kconfig"
 source "drivers/pinctrl/pxa/Kconfig"
 source "drivers/pinctrl/qcom/Kconfig"
-source "drivers/pinctrl/ralink/Kconfig"
 source "drivers/pinctrl/renesas/Kconfig"
 source "drivers/pinctrl/samsung/Kconfig"
 source "drivers/pinctrl/spear/Kconfig"
index c40397af024b220271ade12192d400c085abfb1b..413b1e6b6933ff01e6b46bfc8e4035e7909755ed 100644 (file)
@@ -67,7 +67,6 @@ obj-y                         += nuvoton/
 obj-y                          += nxp/
 obj-$(CONFIG_PINCTRL_PXA)      += pxa/
 obj-$(CONFIG_ARCH_QCOM)                += qcom/
-obj-$(CONFIG_PINCTRL_RALINK)   += ralink/
 obj-$(CONFIG_PINCTRL_RENESAS)  += renesas/
 obj-$(CONFIG_PINCTRL_SAMSUNG)  += samsung/
 obj-$(CONFIG_PINCTRL_SPEAR)    += spear/
index f20c28334bcbf68e85665c31b49357d79508904c..ba21a599953c48634a91f55696e3d865633f3dc3 100644 (file)
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-only
 menu "MediaTek pinctrl drivers"
-       depends on ARCH_MEDIATEK || COMPILE_TEST
+       depends on ARCH_MEDIATEK || RALINK || COMPILE_TEST
 
 config EINT_MTK
        tristate "MediaTek External Interrupt Support"
@@ -22,6 +22,12 @@ config PINCTRL_MTK
 config PINCTRL_MTK_V2
        tristate
 
+config PINCTRL_MTK_MTMIPS
+       bool
+       depends on RALINK
+       select PINMUX
+       select GENERIC_PINCONF
+
 config PINCTRL_MTK_MOORE
        bool
        depends on OF
@@ -43,6 +49,49 @@ config PINCTRL_MTK_PARIS
        select OF_GPIO
        select PINCTRL_MTK_V2
 
+# For MIPS SoCs
+config PINCTRL_MT7620
+       bool "MediaTek MT7620 pin control"
+       depends on SOC_MT7620 || COMPILE_TEST
+       depends on RALINK
+       default SOC_MT7620
+       select PINCTRL_MTK_MTMIPS
+
+config PINCTRL_MT7621
+       bool "MediaTek MT7621 pin control"
+       depends on SOC_MT7621 || COMPILE_TEST
+       depends on RALINK
+       default SOC_MT7621
+       select PINCTRL_MTK_MTMIPS
+
+config PINCTRL_MT76X8
+       bool "MediaTek MT76X8 pin control"
+       depends on SOC_MT7620 || COMPILE_TEST
+       depends on RALINK
+       default SOC_MT7620
+       select PINCTRL_MTK_MTMIPS
+
+config PINCTRL_RT2880
+       bool "Ralink RT2880 pin control"
+       depends on SOC_RT288X || COMPILE_TEST
+       depends on RALINK
+       default SOC_RT288X
+       select PINCTRL_MTK_MTMIPS
+
+config PINCTRL_RT305X
+       bool "Ralink RT305X pin control"
+       depends on SOC_RT305X || COMPILE_TEST
+       depends on RALINK
+       default SOC_RT305X
+       select PINCTRL_MTK_MTMIPS
+
+config PINCTRL_RT3883
+       bool "Ralink RT3883 pin control"
+       depends on SOC_RT3883 || COMPILE_TEST
+       depends on RALINK
+       default SOC_RT3883
+       select PINCTRL_MTK_MTMIPS
+
 # For ARMv7 SoCs
 config PINCTRL_MT2701
        bool "Mediatek MT2701 pin control"
index 44d197af516a909723e2db81bc30d8b59d5a9a8a..680f7e8526e00a05ffe68822573ad720ce2e66dc 100644 (file)
@@ -1,32 +1,39 @@
 # SPDX-License-Identifier: GPL-2.0
 # Core
-obj-$(CONFIG_EINT_MTK)         += mtk-eint.o
-obj-$(CONFIG_PINCTRL_MTK)      += pinctrl-mtk-common.o
-obj-$(CONFIG_PINCTRL_MTK_V2)   += pinctrl-mtk-common-v2.o
-obj-$(CONFIG_PINCTRL_MTK_MOORE) += pinctrl-moore.o
-obj-$(CONFIG_PINCTRL_MTK_PARIS) += pinctrl-paris.o
+obj-$(CONFIG_EINT_MTK)                 += mtk-eint.o
+obj-$(CONFIG_PINCTRL_MTK)              += pinctrl-mtk-common.o
+obj-$(CONFIG_PINCTRL_MTK_V2)           += pinctrl-mtk-common-v2.o
+obj-$(CONFIG_PINCTRL_MTK_MTMIPS)       += pinctrl-mtmips.o
+obj-$(CONFIG_PINCTRL_MTK_MOORE)                += pinctrl-moore.o
+obj-$(CONFIG_PINCTRL_MTK_PARIS)                += pinctrl-paris.o
 
 # SoC Drivers
-obj-$(CONFIG_PINCTRL_MT2701)   += pinctrl-mt2701.o
-obj-$(CONFIG_PINCTRL_MT2712)   += pinctrl-mt2712.o
-obj-$(CONFIG_PINCTRL_MT8135)   += pinctrl-mt8135.o
-obj-$(CONFIG_PINCTRL_MT8127)   += pinctrl-mt8127.o
-obj-$(CONFIG_PINCTRL_MT6765)   += pinctrl-mt6765.o
-obj-$(CONFIG_PINCTRL_MT6779)   += pinctrl-mt6779.o
-obj-$(CONFIG_PINCTRL_MT6795)   += pinctrl-mt6795.o
-obj-$(CONFIG_PINCTRL_MT6797)   += pinctrl-mt6797.o
-obj-$(CONFIG_PINCTRL_MT7622)   += pinctrl-mt7622.o
-obj-$(CONFIG_PINCTRL_MT7623)   += pinctrl-mt7623.o
-obj-$(CONFIG_PINCTRL_MT7629)   += pinctrl-mt7629.o
-obj-$(CONFIG_PINCTRL_MT7981)   += pinctrl-mt7981.o
-obj-$(CONFIG_PINCTRL_MT7986)   += pinctrl-mt7986.o
-obj-$(CONFIG_PINCTRL_MT8167)   += pinctrl-mt8167.o
-obj-$(CONFIG_PINCTRL_MT8173)   += pinctrl-mt8173.o
-obj-$(CONFIG_PINCTRL_MT8183)   += pinctrl-mt8183.o
-obj-$(CONFIG_PINCTRL_MT8186)   += pinctrl-mt8186.o
-obj-$(CONFIG_PINCTRL_MT8188)   += pinctrl-mt8188.o
-obj-$(CONFIG_PINCTRL_MT8192)   += pinctrl-mt8192.o
-obj-$(CONFIG_PINCTRL_MT8195)    += pinctrl-mt8195.o
-obj-$(CONFIG_PINCTRL_MT8365)   += pinctrl-mt8365.o
-obj-$(CONFIG_PINCTRL_MT8516)   += pinctrl-mt8516.o
-obj-$(CONFIG_PINCTRL_MT6397)   += pinctrl-mt6397.o
+obj-$(CONFIG_PINCTRL_MT7620)           += pinctrl-mt7620.o
+obj-$(CONFIG_PINCTRL_MT7621)           += pinctrl-mt7621.o
+obj-$(CONFIG_PINCTRL_MT76X8)           += pinctrl-mt76x8.o
+obj-$(CONFIG_PINCTRL_RT2880)           += pinctrl-rt2880.o
+obj-$(CONFIG_PINCTRL_RT305X)           += pinctrl-rt305x.o
+obj-$(CONFIG_PINCTRL_RT3883)           += pinctrl-rt3883.o
+obj-$(CONFIG_PINCTRL_MT2701)           += pinctrl-mt2701.o
+obj-$(CONFIG_PINCTRL_MT2712)           += pinctrl-mt2712.o
+obj-$(CONFIG_PINCTRL_MT8135)           += pinctrl-mt8135.o
+obj-$(CONFIG_PINCTRL_MT8127)           += pinctrl-mt8127.o
+obj-$(CONFIG_PINCTRL_MT6765)           += pinctrl-mt6765.o
+obj-$(CONFIG_PINCTRL_MT6779)           += pinctrl-mt6779.o
+obj-$(CONFIG_PINCTRL_MT6795)           += pinctrl-mt6795.o
+obj-$(CONFIG_PINCTRL_MT6797)           += pinctrl-mt6797.o
+obj-$(CONFIG_PINCTRL_MT7622)           += pinctrl-mt7622.o
+obj-$(CONFIG_PINCTRL_MT7623)           += pinctrl-mt7623.o
+obj-$(CONFIG_PINCTRL_MT7629)           += pinctrl-mt7629.o
+obj-$(CONFIG_PINCTRL_MT7981)           += pinctrl-mt7981.o
+obj-$(CONFIG_PINCTRL_MT7986)           += pinctrl-mt7986.o
+obj-$(CONFIG_PINCTRL_MT8167)           += pinctrl-mt8167.o
+obj-$(CONFIG_PINCTRL_MT8173)           += pinctrl-mt8173.o
+obj-$(CONFIG_PINCTRL_MT8183)           += pinctrl-mt8183.o
+obj-$(CONFIG_PINCTRL_MT8186)           += pinctrl-mt8186.o
+obj-$(CONFIG_PINCTRL_MT8188)           += pinctrl-mt8188.o
+obj-$(CONFIG_PINCTRL_MT8192)           += pinctrl-mt8192.o
+obj-$(CONFIG_PINCTRL_MT8195)           += pinctrl-mt8195.o
+obj-$(CONFIG_PINCTRL_MT8365)           += pinctrl-mt8365.o
+obj-$(CONFIG_PINCTRL_MT8516)           += pinctrl-mt8516.o
+obj-$(CONFIG_PINCTRL_MT6397)           += pinctrl-mt6397.o
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7620.c b/drivers/pinctrl/mediatek/pinctrl-mt7620.c
new file mode 100644 (file)
index 0000000..d2624b9
--- /dev/null
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define MT7620_GPIO_MODE_UART0_SHIFT   2
+#define MT7620_GPIO_MODE_UART0_MASK    0x7
+#define MT7620_GPIO_MODE_UART0(x)      ((x) << MT7620_GPIO_MODE_UART0_SHIFT)
+#define MT7620_GPIO_MODE_UARTF         0x0
+#define MT7620_GPIO_MODE_PCM_UARTF     0x1
+#define MT7620_GPIO_MODE_PCM_I2S       0x2
+#define MT7620_GPIO_MODE_I2S_UARTF     0x3
+#define MT7620_GPIO_MODE_PCM_GPIO      0x4
+#define MT7620_GPIO_MODE_GPIO_UARTF    0x5
+#define MT7620_GPIO_MODE_GPIO_I2S      0x6
+#define MT7620_GPIO_MODE_GPIO          0x7
+
+#define MT7620_GPIO_MODE_NAND          0
+#define MT7620_GPIO_MODE_SD            1
+#define MT7620_GPIO_MODE_ND_SD_GPIO    2
+#define MT7620_GPIO_MODE_ND_SD_MASK    0x3
+#define MT7620_GPIO_MODE_ND_SD_SHIFT   18
+
+#define MT7620_GPIO_MODE_PCIE_RST      0
+#define MT7620_GPIO_MODE_PCIE_REF      1
+#define MT7620_GPIO_MODE_PCIE_GPIO     2
+#define MT7620_GPIO_MODE_PCIE_MASK     0x3
+#define MT7620_GPIO_MODE_PCIE_SHIFT    16
+
+#define MT7620_GPIO_MODE_WDT_RST       0
+#define MT7620_GPIO_MODE_WDT_REF       1
+#define MT7620_GPIO_MODE_WDT_GPIO      2
+#define MT7620_GPIO_MODE_WDT_MASK      0x3
+#define MT7620_GPIO_MODE_WDT_SHIFT     21
+
+#define MT7620_GPIO_MODE_MDIO          0
+#define MT7620_GPIO_MODE_MDIO_REFCLK   1
+#define MT7620_GPIO_MODE_MDIO_GPIO     2
+#define MT7620_GPIO_MODE_MDIO_MASK     0x3
+#define MT7620_GPIO_MODE_MDIO_SHIFT    7
+
+#define MT7620_GPIO_MODE_I2C           0
+#define MT7620_GPIO_MODE_UART1         5
+#define MT7620_GPIO_MODE_RGMII1                9
+#define MT7620_GPIO_MODE_RGMII2                10
+#define MT7620_GPIO_MODE_SPI           11
+#define MT7620_GPIO_MODE_SPI_REF_CLK   12
+#define MT7620_GPIO_MODE_WLED          13
+#define MT7620_GPIO_MODE_JTAG          15
+#define MT7620_GPIO_MODE_EPHY          15
+#define MT7620_GPIO_MODE_PA            20
+
+static struct mtmips_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct mtmips_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct mtmips_pmx_func mdio_grp[] = {
+       FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
+       FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
+};
+static struct mtmips_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
+static struct mtmips_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
+static struct mtmips_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
+static struct mtmips_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
+static struct mtmips_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
+static struct mtmips_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
+static struct mtmips_pmx_func uartf_grp[] = {
+       FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
+       FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
+       FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
+       FUNC("i2s uartf", MT7620_GPIO_MODE_I2S_UARTF, 7, 8),
+       FUNC("pcm gpio", MT7620_GPIO_MODE_PCM_GPIO, 11, 4),
+       FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
+       FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
+};
+static struct mtmips_pmx_func wdt_grp[] = {
+       FUNC("wdt rst", 0, 17, 1),
+       FUNC("wdt refclk", 0, 17, 1),
+       };
+static struct mtmips_pmx_func pcie_rst_grp[] = {
+       FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
+       FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
+};
+static struct mtmips_pmx_func nd_sd_grp[] = {
+       FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
+       FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
+};
+
+static struct mtmips_pmx_group mt7620a_pinmux_data[] = {
+       GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
+       GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
+               MT7620_GPIO_MODE_UART0_SHIFT),
+       GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
+       GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
+       GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
+               MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
+       GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
+               MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
+       GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
+       GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
+       GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
+               MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
+       GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
+               MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
+       GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
+       GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
+       GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
+       GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
+       { 0 }
+};
+
+static int mt7620_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtmips_pinctrl_init(pdev, mt7620a_pinmux_data);
+}
+
+static const struct of_device_id mt7620_pinctrl_match[] = {
+       { .compatible = "ralink,mt7620-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, mt7620_pinctrl_match);
+
+static struct platform_driver mt7620_pinctrl_driver = {
+       .probe = mt7620_pinctrl_probe,
+       .driver = {
+               .name = "mt7620-pinctrl",
+               .of_match_table = mt7620_pinctrl_match,
+       },
+};
+
+static int __init mt7620_pinctrl_init(void)
+{
+       return platform_driver_register(&mt7620_pinctrl_driver);
+}
+core_initcall_sync(mt7620_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7621.c b/drivers/pinctrl/mediatek/pinctrl-mt7621.c
new file mode 100644 (file)
index 0000000..b18c1a4
--- /dev/null
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define MT7621_GPIO_MODE_UART1         1
+#define MT7621_GPIO_MODE_I2C           2
+#define MT7621_GPIO_MODE_UART3_MASK    0x3
+#define MT7621_GPIO_MODE_UART3_SHIFT   3
+#define MT7621_GPIO_MODE_UART3_GPIO    1
+#define MT7621_GPIO_MODE_UART2_MASK    0x3
+#define MT7621_GPIO_MODE_UART2_SHIFT   5
+#define MT7621_GPIO_MODE_UART2_GPIO    1
+#define MT7621_GPIO_MODE_JTAG          7
+#define MT7621_GPIO_MODE_WDT_MASK      0x3
+#define MT7621_GPIO_MODE_WDT_SHIFT     8
+#define MT7621_GPIO_MODE_WDT_GPIO      1
+#define MT7621_GPIO_MODE_PCIE_RST      0
+#define MT7621_GPIO_MODE_PCIE_REF      2
+#define MT7621_GPIO_MODE_PCIE_MASK     0x3
+#define MT7621_GPIO_MODE_PCIE_SHIFT    10
+#define MT7621_GPIO_MODE_PCIE_GPIO     1
+#define MT7621_GPIO_MODE_MDIO_MASK     0x3
+#define MT7621_GPIO_MODE_MDIO_SHIFT    12
+#define MT7621_GPIO_MODE_MDIO_GPIO     1
+#define MT7621_GPIO_MODE_RGMII1                14
+#define MT7621_GPIO_MODE_RGMII2                15
+#define MT7621_GPIO_MODE_SPI_MASK      0x3
+#define MT7621_GPIO_MODE_SPI_SHIFT     16
+#define MT7621_GPIO_MODE_SPI_GPIO      1
+#define MT7621_GPIO_MODE_SDHCI_MASK    0x3
+#define MT7621_GPIO_MODE_SDHCI_SHIFT   18
+#define MT7621_GPIO_MODE_SDHCI_GPIO    1
+
+static struct mtmips_pmx_func uart1_grp[] =  { FUNC("uart1", 0, 1, 2) };
+static struct mtmips_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 3, 2) };
+static struct mtmips_pmx_func uart3_grp[] = {
+       FUNC("uart3", 0, 5, 4),
+       FUNC("i2s", 2, 5, 4),
+       FUNC("spdif3", 3, 5, 4),
+};
+static struct mtmips_pmx_func uart2_grp[] = {
+       FUNC("uart2", 0, 9, 4),
+       FUNC("pcm", 2, 9, 4),
+       FUNC("spdif2", 3, 9, 4),
+};
+static struct mtmips_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
+static struct mtmips_pmx_func wdt_grp[] = {
+       FUNC("wdt rst", 0, 18, 1),
+       FUNC("wdt refclk", 2, 18, 1),
+};
+static struct mtmips_pmx_func pcie_rst_grp[] = {
+       FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
+       FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
+};
+static struct mtmips_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
+static struct mtmips_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
+static struct mtmips_pmx_func spi_grp[] = {
+       FUNC("spi", 0, 34, 7),
+       FUNC("nand1", 2, 34, 7),
+};
+static struct mtmips_pmx_func sdhci_grp[] = {
+       FUNC("sdhci", 0, 41, 8),
+       FUNC("nand2", 2, 41, 8),
+};
+static struct mtmips_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
+
+static struct mtmips_pmx_group mt7621_pinmux_data[] = {
+       GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
+       GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
+       GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
+               MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
+       GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
+               MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
+       GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
+       GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
+               MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
+       GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
+               MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
+       GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
+               MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
+       GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
+       GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
+               MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
+       GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
+               MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
+       GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
+       { 0 }
+};
+
+static int mt7621_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtmips_pinctrl_init(pdev, mt7621_pinmux_data);
+}
+
+static const struct of_device_id mt7621_pinctrl_match[] = {
+       { .compatible = "ralink,mt7621-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, mt7621_pinctrl_match);
+
+static struct platform_driver mt7621_pinctrl_driver = {
+       .probe = mt7621_pinctrl_probe,
+       .driver = {
+               .name = "mt7621-pinctrl",
+               .of_match_table = mt7621_pinctrl_match,
+       },
+};
+
+static int __init mt7621_pinctrl_init(void)
+{
+       return platform_driver_register(&mt7621_pinctrl_driver);
+}
+core_initcall_sync(mt7621_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt76x8.c b/drivers/pinctrl/mediatek/pinctrl-mt76x8.c
new file mode 100644 (file)
index 0000000..e7d6ad2
--- /dev/null
@@ -0,0 +1,283 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define MT76X8_GPIO_MODE_MASK          0x3
+
+#define MT76X8_GPIO_MODE_P4LED_KN      58
+#define MT76X8_GPIO_MODE_P3LED_KN      56
+#define MT76X8_GPIO_MODE_P2LED_KN      54
+#define MT76X8_GPIO_MODE_P1LED_KN      52
+#define MT76X8_GPIO_MODE_P0LED_KN      50
+#define MT76X8_GPIO_MODE_WLED_KN       48
+#define MT76X8_GPIO_MODE_P4LED_AN      42
+#define MT76X8_GPIO_MODE_P3LED_AN      40
+#define MT76X8_GPIO_MODE_P2LED_AN      38
+#define MT76X8_GPIO_MODE_P1LED_AN      36
+#define MT76X8_GPIO_MODE_P0LED_AN      34
+#define MT76X8_GPIO_MODE_WLED_AN       32
+#define MT76X8_GPIO_MODE_PWM1          30
+#define MT76X8_GPIO_MODE_PWM0          28
+#define MT76X8_GPIO_MODE_UART2         26
+#define MT76X8_GPIO_MODE_UART1         24
+#define MT76X8_GPIO_MODE_I2C           20
+#define MT76X8_GPIO_MODE_REFCLK                18
+#define MT76X8_GPIO_MODE_PERST         16
+#define MT76X8_GPIO_MODE_WDT           14
+#define MT76X8_GPIO_MODE_SPI           12
+#define MT76X8_GPIO_MODE_SDMODE                10
+#define MT76X8_GPIO_MODE_UART0         8
+#define MT76X8_GPIO_MODE_I2S           6
+#define MT76X8_GPIO_MODE_CS1           4
+#define MT76X8_GPIO_MODE_SPIS          2
+#define MT76X8_GPIO_MODE_GPIO          0
+
+static struct mtmips_pmx_func pwm1_grp[] = {
+       FUNC("sdxc d6", 3, 19, 1),
+       FUNC("utif", 2, 19, 1),
+       FUNC("gpio", 1, 19, 1),
+       FUNC("pwm1", 0, 19, 1),
+};
+
+static struct mtmips_pmx_func pwm0_grp[] = {
+       FUNC("sdxc d7", 3, 18, 1),
+       FUNC("utif", 2, 18, 1),
+       FUNC("gpio", 1, 18, 1),
+       FUNC("pwm0", 0, 18, 1),
+};
+
+static struct mtmips_pmx_func uart2_grp[] = {
+       FUNC("sdxc d5 d4", 3, 20, 2),
+       FUNC("pwm", 2, 20, 2),
+       FUNC("gpio", 1, 20, 2),
+       FUNC("uart2", 0, 20, 2),
+};
+
+static struct mtmips_pmx_func uart1_grp[] = {
+       FUNC("sw_r", 3, 45, 2),
+       FUNC("pwm", 2, 45, 2),
+       FUNC("gpio", 1, 45, 2),
+       FUNC("uart1", 0, 45, 2),
+};
+
+static struct mtmips_pmx_func i2c_grp[] = {
+       FUNC("-", 3, 4, 2),
+       FUNC("debug", 2, 4, 2),
+       FUNC("gpio", 1, 4, 2),
+       FUNC("i2c", 0, 4, 2),
+};
+
+static struct mtmips_pmx_func refclk_grp[] = { FUNC("refclk", 0, 37, 1) };
+static struct mtmips_pmx_func perst_grp[] = { FUNC("perst", 0, 36, 1) };
+static struct mtmips_pmx_func wdt_grp[] = { FUNC("wdt", 0, 38, 1) };
+static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 7, 4) };
+
+static struct mtmips_pmx_func sd_mode_grp[] = {
+       FUNC("jtag", 3, 22, 8),
+       FUNC("utif", 2, 22, 8),
+       FUNC("gpio", 1, 22, 8),
+       FUNC("sdxc", 0, 22, 8),
+};
+
+static struct mtmips_pmx_func uart0_grp[] = {
+       FUNC("-", 3, 12, 2),
+       FUNC("-", 2, 12, 2),
+       FUNC("gpio", 1, 12, 2),
+       FUNC("uart0", 0, 12, 2),
+};
+
+static struct mtmips_pmx_func i2s_grp[] = {
+       FUNC("antenna", 3, 0, 4),
+       FUNC("pcm", 2, 0, 4),
+       FUNC("gpio", 1, 0, 4),
+       FUNC("i2s", 0, 0, 4),
+};
+
+static struct mtmips_pmx_func spi_cs1_grp[] = {
+       FUNC("-", 3, 6, 1),
+       FUNC("refclk", 2, 6, 1),
+       FUNC("gpio", 1, 6, 1),
+       FUNC("spi cs1", 0, 6, 1),
+};
+
+static struct mtmips_pmx_func spis_grp[] = {
+       FUNC("pwm_uart2", 3, 14, 4),
+       FUNC("utif", 2, 14, 4),
+       FUNC("gpio", 1, 14, 4),
+       FUNC("spis", 0, 14, 4),
+};
+
+static struct mtmips_pmx_func gpio_grp[] = {
+       FUNC("pcie", 3, 11, 1),
+       FUNC("refclk", 2, 11, 1),
+       FUNC("gpio", 1, 11, 1),
+       FUNC("gpio", 0, 11, 1),
+};
+
+static struct mtmips_pmx_func p4led_kn_grp[] = {
+       FUNC("jtag", 3, 30, 1),
+       FUNC("utif", 2, 30, 1),
+       FUNC("gpio", 1, 30, 1),
+       FUNC("p4led_kn", 0, 30, 1),
+};
+
+static struct mtmips_pmx_func p3led_kn_grp[] = {
+       FUNC("jtag", 3, 31, 1),
+       FUNC("utif", 2, 31, 1),
+       FUNC("gpio", 1, 31, 1),
+       FUNC("p3led_kn", 0, 31, 1),
+};
+
+static struct mtmips_pmx_func p2led_kn_grp[] = {
+       FUNC("jtag", 3, 32, 1),
+       FUNC("utif", 2, 32, 1),
+       FUNC("gpio", 1, 32, 1),
+       FUNC("p2led_kn", 0, 32, 1),
+};
+
+static struct mtmips_pmx_func p1led_kn_grp[] = {
+       FUNC("jtag", 3, 33, 1),
+       FUNC("utif", 2, 33, 1),
+       FUNC("gpio", 1, 33, 1),
+       FUNC("p1led_kn", 0, 33, 1),
+};
+
+static struct mtmips_pmx_func p0led_kn_grp[] = {
+       FUNC("jtag", 3, 34, 1),
+       FUNC("rsvd", 2, 34, 1),
+       FUNC("gpio", 1, 34, 1),
+       FUNC("p0led_kn", 0, 34, 1),
+};
+
+static struct mtmips_pmx_func wled_kn_grp[] = {
+       FUNC("rsvd", 3, 35, 1),
+       FUNC("rsvd", 2, 35, 1),
+       FUNC("gpio", 1, 35, 1),
+       FUNC("wled_kn", 0, 35, 1),
+};
+
+static struct mtmips_pmx_func p4led_an_grp[] = {
+       FUNC("jtag", 3, 39, 1),
+       FUNC("utif", 2, 39, 1),
+       FUNC("gpio", 1, 39, 1),
+       FUNC("p4led_an", 0, 39, 1),
+};
+
+static struct mtmips_pmx_func p3led_an_grp[] = {
+       FUNC("jtag", 3, 40, 1),
+       FUNC("utif", 2, 40, 1),
+       FUNC("gpio", 1, 40, 1),
+       FUNC("p3led_an", 0, 40, 1),
+};
+
+static struct mtmips_pmx_func p2led_an_grp[] = {
+       FUNC("jtag", 3, 41, 1),
+       FUNC("utif", 2, 41, 1),
+       FUNC("gpio", 1, 41, 1),
+       FUNC("p2led_an", 0, 41, 1),
+};
+
+static struct mtmips_pmx_func p1led_an_grp[] = {
+       FUNC("jtag", 3, 42, 1),
+       FUNC("utif", 2, 42, 1),
+       FUNC("gpio", 1, 42, 1),
+       FUNC("p1led_an", 0, 42, 1),
+};
+
+static struct mtmips_pmx_func p0led_an_grp[] = {
+       FUNC("jtag", 3, 43, 1),
+       FUNC("rsvd", 2, 43, 1),
+       FUNC("gpio", 1, 43, 1),
+       FUNC("p0led_an", 0, 43, 1),
+};
+
+static struct mtmips_pmx_func wled_an_grp[] = {
+       FUNC("rsvd", 3, 44, 1),
+       FUNC("rsvd", 2, 44, 1),
+       FUNC("gpio", 1, 44, 1),
+       FUNC("wled_an", 0, 44, 1),
+};
+
+static struct mtmips_pmx_group mt76x8_pinmux_data[] = {
+       GRP_G("pwm1", pwm1_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_PWM1),
+       GRP_G("pwm0", pwm0_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_PWM0),
+       GRP_G("uart2", uart2_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_UART2),
+       GRP_G("uart1", uart1_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_UART1),
+       GRP_G("i2c", i2c_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_I2C),
+       GRP("refclk", refclk_grp, 1, MT76X8_GPIO_MODE_REFCLK),
+       GRP("perst", perst_grp, 1, MT76X8_GPIO_MODE_PERST),
+       GRP("wdt", wdt_grp, 1, MT76X8_GPIO_MODE_WDT),
+       GRP("spi", spi_grp, 1, MT76X8_GPIO_MODE_SPI),
+       GRP_G("sdmode", sd_mode_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_SDMODE),
+       GRP_G("uart0", uart0_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_UART0),
+       GRP_G("i2s", i2s_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_I2S),
+       GRP_G("spi cs1", spi_cs1_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_CS1),
+       GRP_G("spis", spis_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_SPIS),
+       GRP_G("gpio", gpio_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_GPIO),
+       GRP_G("wled_an", wled_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_WLED_AN),
+       GRP_G("p0led_an", p0led_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P0LED_AN),
+       GRP_G("p1led_an", p1led_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P1LED_AN),
+       GRP_G("p2led_an", p2led_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P2LED_AN),
+       GRP_G("p3led_an", p3led_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P3LED_AN),
+       GRP_G("p4led_an", p4led_an_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P4LED_AN),
+       GRP_G("wled_kn", wled_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_WLED_KN),
+       GRP_G("p0led_kn", p0led_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P0LED_KN),
+       GRP_G("p1led_kn", p1led_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P1LED_KN),
+       GRP_G("p2led_kn", p2led_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P2LED_KN),
+       GRP_G("p3led_kn", p3led_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P3LED_KN),
+       GRP_G("p4led_kn", p4led_kn_grp, MT76X8_GPIO_MODE_MASK,
+                               1, MT76X8_GPIO_MODE_P4LED_KN),
+       { 0 }
+};
+
+static int mt76x8_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtmips_pinctrl_init(pdev, mt76x8_pinmux_data);
+}
+
+static const struct of_device_id mt76x8_pinctrl_match[] = {
+       { .compatible = "ralink,mt76x8-pinctrl" },
+       { .compatible = "ralink,mt7620-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, mt76x8_pinctrl_match);
+
+static struct platform_driver mt76x8_pinctrl_driver = {
+       .probe = mt76x8_pinctrl_probe,
+       .driver = {
+               .name = "mt76x8-pinctrl",
+               .of_match_table = mt76x8_pinctrl_match,
+       },
+};
+
+static int __init mt76x8_pinctrl_init(void)
+{
+       return platform_driver_register(&mt76x8_pinctrl_driver);
+}
+core_initcall_sync(mt76x8_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtmips.c b/drivers/pinctrl/mediatek/pinctrl-mtmips.c
new file mode 100644 (file)
index 0000000..efd77b6
--- /dev/null
@@ -0,0 +1,351 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ *  Copyright (C) 2013 John Crispin <blogic@openwrt.org>
+ */
+
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/pinctrl/pinconf.h>
+#include <linux/pinctrl/pinconf-generic.h>
+#include <linux/pinctrl/pinmux.h>
+#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/machine.h>
+
+#include <asm/mach-ralink/ralink_regs.h>
+#include <asm/mach-ralink/mt7620.h>
+
+#include "pinctrl-mtmips.h"
+#include "../core.h"
+#include "../pinctrl-utils.h"
+
+#define SYSC_REG_GPIO_MODE     0x60
+#define SYSC_REG_GPIO_MODE2    0x64
+
+struct mtmips_priv {
+       struct device *dev;
+
+       struct pinctrl_pin_desc *pads;
+       struct pinctrl_desc *desc;
+
+       struct mtmips_pmx_func **func;
+       int func_count;
+
+       struct mtmips_pmx_group *groups;
+       const char **group_names;
+       int group_count;
+
+       u8 *gpio;
+       int max_pins;
+};
+
+static int mtmips_get_group_count(struct pinctrl_dev *pctrldev)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       return p->group_count;
+}
+
+static const char *mtmips_get_group_name(struct pinctrl_dev *pctrldev,
+                                        unsigned int group)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       return (group >= p->group_count) ? NULL : p->group_names[group];
+}
+
+static int mtmips_get_group_pins(struct pinctrl_dev *pctrldev,
+                                unsigned int group,
+                                const unsigned int **pins,
+                                unsigned int *num_pins)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       if (group >= p->group_count)
+               return -EINVAL;
+
+       *pins = p->groups[group].func[0].pins;
+       *num_pins = p->groups[group].func[0].pin_count;
+
+       return 0;
+}
+
+static const struct pinctrl_ops mtmips_pctrl_ops = {
+       .get_groups_count       = mtmips_get_group_count,
+       .get_group_name         = mtmips_get_group_name,
+       .get_group_pins         = mtmips_get_group_pins,
+       .dt_node_to_map         = pinconf_generic_dt_node_to_map_all,
+       .dt_free_map            = pinconf_generic_dt_free_map,
+};
+
+static int mtmips_pmx_func_count(struct pinctrl_dev *pctrldev)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       return p->func_count;
+}
+
+static const char *mtmips_pmx_func_name(struct pinctrl_dev *pctrldev,
+                                       unsigned int func)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       return p->func[func]->name;
+}
+
+static int mtmips_pmx_group_get_groups(struct pinctrl_dev *pctrldev,
+                                      unsigned int func,
+                                      const char * const **groups,
+                                      unsigned int * const num_groups)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       if (p->func[func]->group_count == 1)
+               *groups = &p->group_names[p->func[func]->groups[0]];
+       else
+               *groups = p->group_names;
+
+       *num_groups = p->func[func]->group_count;
+
+       return 0;
+}
+
+static int mtmips_pmx_group_enable(struct pinctrl_dev *pctrldev,
+                                  unsigned int func, unsigned int group)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+       u32 mode = 0;
+       u32 reg = SYSC_REG_GPIO_MODE;
+       int i;
+       int shift;
+
+       /* dont allow double use */
+       if (p->groups[group].enabled) {
+               dev_err(p->dev, "%s is already enabled\n",
+                       p->groups[group].name);
+               return 0;
+       }
+
+       p->groups[group].enabled = 1;
+       p->func[func]->enabled = 1;
+
+       shift = p->groups[group].shift;
+       if (shift >= 32) {
+               shift -= 32;
+               reg = SYSC_REG_GPIO_MODE2;
+       }
+       mode = rt_sysc_r32(reg);
+       mode &= ~(p->groups[group].mask << shift);
+
+       /* mark the pins as gpio */
+       for (i = 0; i < p->groups[group].func[0].pin_count; i++)
+               p->gpio[p->groups[group].func[0].pins[i]] = 1;
+
+       /* function 0 is gpio and needs special handling */
+       if (func == 0) {
+               mode |= p->groups[group].gpio << shift;
+       } else {
+               for (i = 0; i < p->func[func]->pin_count; i++)
+                       p->gpio[p->func[func]->pins[i]] = 0;
+               mode |= p->func[func]->value << shift;
+       }
+       rt_sysc_w32(mode, reg);
+
+       return 0;
+}
+
+static int mtmips_pmx_group_gpio_request_enable(struct pinctrl_dev *pctrldev,
+                                               struct pinctrl_gpio_range *range,
+                                               unsigned int pin)
+{
+       struct mtmips_priv *p = pinctrl_dev_get_drvdata(pctrldev);
+
+       if (!p->gpio[pin]) {
+               dev_err(p->dev, "pin %d is not set to gpio mux\n", pin);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static const struct pinmux_ops mtmips_pmx_group_ops = {
+       .get_functions_count    = mtmips_pmx_func_count,
+       .get_function_name      = mtmips_pmx_func_name,
+       .get_function_groups    = mtmips_pmx_group_get_groups,
+       .set_mux                = mtmips_pmx_group_enable,
+       .gpio_request_enable    = mtmips_pmx_group_gpio_request_enable,
+};
+
+static struct pinctrl_desc mtmips_pctrl_desc = {
+       .owner          = THIS_MODULE,
+       .name           = "mtmips-pinctrl",
+       .pctlops        = &mtmips_pctrl_ops,
+       .pmxops         = &mtmips_pmx_group_ops,
+};
+
+static struct mtmips_pmx_func gpio_func = {
+       .name = "gpio",
+};
+
+static int mtmips_pinctrl_index(struct mtmips_priv *p)
+{
+       struct mtmips_pmx_group *mux = p->groups;
+       int i, j, c = 0;
+
+       /* count the mux functions */
+       while (mux->name) {
+               p->group_count++;
+               mux++;
+       }
+
+       /* allocate the group names array needed by the gpio function */
+       p->group_names = devm_kcalloc(p->dev, p->group_count,
+                                     sizeof(char *), GFP_KERNEL);
+       if (!p->group_names)
+               return -ENOMEM;
+
+       for (i = 0; i < p->group_count; i++) {
+               p->group_names[i] = p->groups[i].name;
+               p->func_count += p->groups[i].func_count;
+       }
+
+       /* we have a dummy function[0] for gpio */
+       p->func_count++;
+
+       /* allocate our function and group mapping index buffers */
+       p->func = devm_kcalloc(p->dev, p->func_count,
+                              sizeof(*p->func), GFP_KERNEL);
+       gpio_func.groups = devm_kcalloc(p->dev, p->group_count, sizeof(int),
+                                       GFP_KERNEL);
+       if (!p->func || !gpio_func.groups)
+               return -ENOMEM;
+
+       /* add a backpointer to the function so it knows its group */
+       gpio_func.group_count = p->group_count;
+       for (i = 0; i < gpio_func.group_count; i++)
+               gpio_func.groups[i] = i;
+
+       p->func[c] = &gpio_func;
+       c++;
+
+       /* add remaining functions */
+       for (i = 0; i < p->group_count; i++) {
+               for (j = 0; j < p->groups[i].func_count; j++) {
+                       p->func[c] = &p->groups[i].func[j];
+                       p->func[c]->groups = devm_kzalloc(p->dev, sizeof(int),
+                                                   GFP_KERNEL);
+                       if (!p->func[c]->groups)
+                               return -ENOMEM;
+                       p->func[c]->groups[0] = i;
+                       p->func[c]->group_count = 1;
+                       c++;
+               }
+       }
+       return 0;
+}
+
+static int mtmips_pinctrl_pins(struct mtmips_priv *p)
+{
+       int i, j;
+
+       /*
+        * loop over the functions and initialize the pins array.
+        * also work out the highest pin used.
+        */
+       for (i = 0; i < p->func_count; i++) {
+               int pin;
+
+               if (!p->func[i]->pin_count)
+                       continue;
+
+               p->func[i]->pins = devm_kcalloc(p->dev,
+                                               p->func[i]->pin_count,
+                                               sizeof(int),
+                                               GFP_KERNEL);
+               if (!p->func[i]->pins)
+                       return -ENOMEM;
+               for (j = 0; j < p->func[i]->pin_count; j++)
+                       p->func[i]->pins[j] = p->func[i]->pin_first + j;
+
+               pin = p->func[i]->pin_first + p->func[i]->pin_count;
+               if (pin > p->max_pins)
+                       p->max_pins = pin;
+       }
+
+       /* the buffer that tells us which pins are gpio */
+       p->gpio = devm_kcalloc(p->dev, p->max_pins, sizeof(u8), GFP_KERNEL);
+       /* the pads needed to tell pinctrl about our pins */
+       p->pads = devm_kcalloc(p->dev, p->max_pins,
+                              sizeof(struct pinctrl_pin_desc), GFP_KERNEL);
+       if (!p->pads || !p->gpio)
+               return -ENOMEM;
+
+       memset(p->gpio, 1, sizeof(u8) * p->max_pins);
+       for (i = 0; i < p->func_count; i++) {
+               if (!p->func[i]->pin_count)
+                       continue;
+
+               for (j = 0; j < p->func[i]->pin_count; j++)
+                       p->gpio[p->func[i]->pins[j]] = 0;
+       }
+
+       /* pin 0 is always a gpio */
+       p->gpio[0] = 1;
+
+       /* set the pads */
+       for (i = 0; i < p->max_pins; i++) {
+               /* strlen("ioXY") + 1 = 5 */
+               char *name = devm_kzalloc(p->dev, 5, GFP_KERNEL);
+
+               if (!name)
+                       return -ENOMEM;
+               snprintf(name, 5, "io%d", i);
+               p->pads[i].number = i;
+               p->pads[i].name = name;
+       }
+       p->desc->pins = p->pads;
+       p->desc->npins = p->max_pins;
+
+       return 0;
+}
+
+int mtmips_pinctrl_init(struct platform_device *pdev,
+                       struct mtmips_pmx_group *data)
+{
+       struct mtmips_priv *p;
+       struct pinctrl_dev *dev;
+       int err;
+
+       if (!data)
+               return -ENOTSUPP;
+
+       /* setup the private data */
+       p = devm_kzalloc(&pdev->dev, sizeof(struct mtmips_priv), GFP_KERNEL);
+       if (!p)
+               return -ENOMEM;
+
+       p->dev = &pdev->dev;
+       p->desc = &mtmips_pctrl_desc;
+       p->groups = data;
+       platform_set_drvdata(pdev, p);
+
+       /* init the device */
+       err = mtmips_pinctrl_index(p);
+       if (err) {
+               dev_err(&pdev->dev, "failed to load index\n");
+               return err;
+       }
+
+       err = mtmips_pinctrl_pins(p);
+       if (err) {
+               dev_err(&pdev->dev, "failed to load pins\n");
+               return err;
+       }
+       dev = pinctrl_register(p->desc, &pdev->dev, p);
+
+       return PTR_ERR_OR_ZERO(dev);
+}
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtmips.h b/drivers/pinctrl/mediatek/pinctrl-mtmips.h
new file mode 100644 (file)
index 0000000..a7c3dd7
--- /dev/null
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ *  Copyright (C) 2012 John Crispin <john@phrozen.org>
+ */
+
+#ifndef _PINCTRL_MTMIPS_H__
+#define _PINCTRL_MTMIPS_H__
+
+#define FUNC(name, value, pin_first, pin_count) \
+       { name, value, pin_first, pin_count }
+
+#define GRP(_name, _func, _mask, _shift) \
+       { .name = _name, .mask = _mask, .shift = _shift, \
+         .func = _func, .gpio = _mask, \
+         .func_count = ARRAY_SIZE(_func) }
+
+#define GRP_G(_name, _func, _mask, _gpio, _shift) \
+       { .name = _name, .mask = _mask, .shift = _shift, \
+         .func = _func, .gpio = _gpio, \
+         .func_count = ARRAY_SIZE(_func) }
+
+struct mtmips_pmx_group;
+
+struct mtmips_pmx_func {
+       const char *name;
+       const char value;
+
+       int pin_first;
+       int pin_count;
+       int *pins;
+
+       int *groups;
+       int group_count;
+
+       int enabled;
+};
+
+struct mtmips_pmx_group {
+       const char *name;
+       int enabled;
+
+       const u32 shift;
+       const char mask;
+       const char gpio;
+
+       struct mtmips_pmx_func *func;
+       int func_count;
+};
+
+int mtmips_pinctrl_init(struct platform_device *pdev,
+                       struct mtmips_pmx_group *data);
+
+#endif
diff --git a/drivers/pinctrl/mediatek/pinctrl-rt2880.c b/drivers/pinctrl/mediatek/pinctrl-rt2880.c
new file mode 100644 (file)
index 0000000..e036672
--- /dev/null
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/bitops.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define RT2880_GPIO_MODE_I2C           BIT(0)
+#define RT2880_GPIO_MODE_UART0         BIT(1)
+#define RT2880_GPIO_MODE_SPI           BIT(2)
+#define RT2880_GPIO_MODE_UART1         BIT(3)
+#define RT2880_GPIO_MODE_JTAG          BIT(4)
+#define RT2880_GPIO_MODE_MDIO          BIT(5)
+#define RT2880_GPIO_MODE_SDRAM         BIT(6)
+#define RT2880_GPIO_MODE_PCI           BIT(7)
+
+static struct mtmips_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
+static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct mtmips_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 7, 8) };
+static struct mtmips_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct mtmips_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct mtmips_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct mtmips_pmx_func pci_grp[] = { FUNC("pci", 0, 40, 32) };
+
+static struct mtmips_pmx_group rt2880_pinmux_data_act[] = {
+       GRP("i2c", i2c_grp, 1, RT2880_GPIO_MODE_I2C),
+       GRP("spi", spi_grp, 1, RT2880_GPIO_MODE_SPI),
+       GRP("uartlite", uartlite_grp, 1, RT2880_GPIO_MODE_UART0),
+       GRP("jtag", jtag_grp, 1, RT2880_GPIO_MODE_JTAG),
+       GRP("mdio", mdio_grp, 1, RT2880_GPIO_MODE_MDIO),
+       GRP("sdram", sdram_grp, 1, RT2880_GPIO_MODE_SDRAM),
+       GRP("pci", pci_grp, 1, RT2880_GPIO_MODE_PCI),
+       { 0 }
+};
+
+static int rt2880_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtmips_pinctrl_init(pdev, rt2880_pinmux_data_act);
+}
+
+static const struct of_device_id rt2880_pinctrl_match[] = {
+       { .compatible = "ralink,rt2880-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, rt2880_pinctrl_match);
+
+static struct platform_driver rt2880_pinctrl_driver = {
+       .probe = rt2880_pinctrl_probe,
+       .driver = {
+               .name = "rt2880-pinctrl",
+               .of_match_table = rt2880_pinctrl_match,
+       },
+};
+
+static int __init rt2880_pinctrl_init(void)
+{
+       return platform_driver_register(&rt2880_pinctrl_driver);
+}
+core_initcall_sync(rt2880_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-rt305x.c b/drivers/pinctrl/mediatek/pinctrl-rt305x.c
new file mode 100644 (file)
index 0000000..77bd4d1
--- /dev/null
@@ -0,0 +1,140 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <asm/mach-ralink/ralink_regs.h>
+#include <asm/mach-ralink/rt305x.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define RT305X_GPIO_MODE_UART0_SHIFT   2
+#define RT305X_GPIO_MODE_UART0_MASK    0x7
+#define RT305X_GPIO_MODE_UART0(x)      ((x) << RT305X_GPIO_MODE_UART0_SHIFT)
+#define RT305X_GPIO_MODE_UARTF         0
+#define RT305X_GPIO_MODE_PCM_UARTF     1
+#define RT305X_GPIO_MODE_PCM_I2S       2
+#define RT305X_GPIO_MODE_I2S_UARTF     3
+#define RT305X_GPIO_MODE_PCM_GPIO      4
+#define RT305X_GPIO_MODE_GPIO_UARTF    5
+#define RT305X_GPIO_MODE_GPIO_I2S      6
+#define RT305X_GPIO_MODE_GPIO          7
+
+#define RT305X_GPIO_MODE_I2C           0
+#define RT305X_GPIO_MODE_SPI           1
+#define RT305X_GPIO_MODE_UART1         5
+#define RT305X_GPIO_MODE_JTAG          6
+#define RT305X_GPIO_MODE_MDIO          7
+#define RT305X_GPIO_MODE_SDRAM         8
+#define RT305X_GPIO_MODE_RGMII         9
+#define RT5350_GPIO_MODE_PHY_LED       14
+#define RT5350_GPIO_MODE_SPI_CS1       21
+#define RT3352_GPIO_MODE_LNA           18
+#define RT3352_GPIO_MODE_PA            20
+
+static struct mtmips_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct mtmips_pmx_func uartf_grp[] = {
+       FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
+       FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
+       FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
+       FUNC("i2s uartf", RT305X_GPIO_MODE_I2S_UARTF, 7, 8),
+       FUNC("pcm gpio", RT305X_GPIO_MODE_PCM_GPIO, 11, 4),
+       FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
+       FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
+};
+static struct mtmips_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct mtmips_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct mtmips_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct mtmips_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };
+static struct mtmips_pmx_func rt5350_cs1_grp[] = {
+       FUNC("spi_cs1", 0, 27, 1),
+       FUNC("wdg_cs1", 1, 27, 1),
+};
+static struct mtmips_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct mtmips_pmx_func rt3352_rgmii_grp[] = {
+       FUNC("rgmii", 0, 24, 12)
+};
+static struct mtmips_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };
+static struct mtmips_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };
+static struct mtmips_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };
+static struct mtmips_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };
+static struct mtmips_pmx_func rt3352_cs1_grp[] = {
+       FUNC("spi_cs1", 0, 45, 1),
+       FUNC("wdg_cs1", 1, 45, 1),
+};
+
+static struct mtmips_pmx_group rt3050_pinmux_data[] = {
+       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
+               RT305X_GPIO_MODE_UART0_SHIFT),
+       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+       GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+       GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+       GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),
+       { 0 }
+};
+
+static struct mtmips_pmx_group rt3352_pinmux_data[] = {
+       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
+               RT305X_GPIO_MODE_UART0_SHIFT),
+       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+       GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+       GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+       GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),
+       GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),
+       GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+       GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
+       { 0 }
+};
+
+static struct mtmips_pmx_group rt5350_pinmux_data[] = {
+       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
+               RT305X_GPIO_MODE_UART0_SHIFT),
+       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+       GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+       GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
+       { 0 }
+};
+
+static int rt305x_pinctrl_probe(struct platform_device *pdev)
+{
+       if (soc_is_rt5350())
+               return mtmips_pinctrl_init(pdev, rt5350_pinmux_data);
+       else if (soc_is_rt305x() || soc_is_rt3350())
+               return mtmips_pinctrl_init(pdev, rt3050_pinmux_data);
+       else if (soc_is_rt3352())
+               return mtmips_pinctrl_init(pdev, rt3352_pinmux_data);
+       else
+               return -EINVAL;
+}
+
+static const struct of_device_id rt305x_pinctrl_match[] = {
+       { .compatible = "ralink,rt305x-pinctrl" },
+       { .compatible = "ralink,rt3352-pinctrl" },
+       { .compatible = "ralink,rt5350-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, rt305x_pinctrl_match);
+
+static struct platform_driver rt305x_pinctrl_driver = {
+       .probe = rt305x_pinctrl_probe,
+       .driver = {
+               .name = "rt305x-pinctrl",
+               .of_match_table = rt305x_pinctrl_match,
+       },
+};
+
+static int __init rt305x_pinctrl_init(void)
+{
+       return platform_driver_register(&rt305x_pinctrl_driver);
+}
+core_initcall_sync(rt305x_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-rt3883.c b/drivers/pinctrl/mediatek/pinctrl-rt3883.c
new file mode 100644 (file)
index 0000000..eeaf344
--- /dev/null
@@ -0,0 +1,108 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include "pinctrl-mtmips.h"
+
+#define RT3883_GPIO_MODE_UART0_SHIFT   2
+#define RT3883_GPIO_MODE_UART0_MASK    0x7
+#define RT3883_GPIO_MODE_UART0(x)      ((x) << RT3883_GPIO_MODE_UART0_SHIFT)
+#define RT3883_GPIO_MODE_UARTF         0x0
+#define RT3883_GPIO_MODE_PCM_UARTF     0x1
+#define RT3883_GPIO_MODE_PCM_I2S       0x2
+#define RT3883_GPIO_MODE_I2S_UARTF     0x3
+#define RT3883_GPIO_MODE_PCM_GPIO      0x4
+#define RT3883_GPIO_MODE_GPIO_UARTF    0x5
+#define RT3883_GPIO_MODE_GPIO_I2S      0x6
+#define RT3883_GPIO_MODE_GPIO          0x7
+
+#define RT3883_GPIO_MODE_I2C           0
+#define RT3883_GPIO_MODE_SPI           1
+#define RT3883_GPIO_MODE_UART1         5
+#define RT3883_GPIO_MODE_JTAG          6
+#define RT3883_GPIO_MODE_MDIO          7
+#define RT3883_GPIO_MODE_GE1           9
+#define RT3883_GPIO_MODE_GE2           10
+
+#define RT3883_GPIO_MODE_PCI_SHIFT     11
+#define RT3883_GPIO_MODE_PCI_MASK      0x7
+#define RT3883_GPIO_MODE_PCI           (RT3883_GPIO_MODE_PCI_MASK << RT3883_GPIO_MODE_PCI_SHIFT)
+#define RT3883_GPIO_MODE_LNA_A_SHIFT   16
+#define RT3883_GPIO_MODE_LNA_A_MASK    0x3
+#define _RT3883_GPIO_MODE_LNA_A(_x)    ((_x) << RT3883_GPIO_MODE_LNA_A_SHIFT)
+#define RT3883_GPIO_MODE_LNA_A_GPIO    0x3
+#define RT3883_GPIO_MODE_LNA_A         _RT3883_GPIO_MODE_LNA_A(RT3883_GPIO_MODE_LNA_A_MASK)
+#define RT3883_GPIO_MODE_LNA_G_SHIFT   18
+#define RT3883_GPIO_MODE_LNA_G_MASK    0x3
+#define _RT3883_GPIO_MODE_LNA_G(_x)    ((_x) << RT3883_GPIO_MODE_LNA_G_SHIFT)
+#define RT3883_GPIO_MODE_LNA_G_GPIO    0x3
+#define RT3883_GPIO_MODE_LNA_G         _RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
+
+static struct mtmips_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct mtmips_pmx_func uartf_grp[] = {
+       FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
+       FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
+       FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
+       FUNC("i2s uartf", RT3883_GPIO_MODE_I2S_UARTF, 7, 8),
+       FUNC("pcm gpio", RT3883_GPIO_MODE_PCM_GPIO, 11, 4),
+       FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
+       FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
+};
+static struct mtmips_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct mtmips_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct mtmips_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct mtmips_pmx_func lna_a_grp[] = { FUNC("lna a", 0, 32, 3) };
+static struct mtmips_pmx_func lna_g_grp[] = { FUNC("lna g", 0, 35, 3) };
+static struct mtmips_pmx_func pci_grp[] = {
+       FUNC("pci-dev", 0, 40, 32),
+       FUNC("pci-host2", 1, 40, 32),
+       FUNC("pci-host1", 2, 40, 32),
+       FUNC("pci-fnc", 3, 40, 32)
+};
+static struct mtmips_pmx_func ge1_grp[] = { FUNC("ge1", 0, 72, 12) };
+static struct mtmips_pmx_func ge2_grp[] = { FUNC("ge2", 0, 84, 12) };
+
+static struct mtmips_pmx_group rt3883_pinmux_data[] = {
+       GRP("i2c", i2c_grp, 1, RT3883_GPIO_MODE_I2C),
+       GRP("spi", spi_grp, 1, RT3883_GPIO_MODE_SPI),
+       GRP("uartf", uartf_grp, RT3883_GPIO_MODE_UART0_MASK,
+               RT3883_GPIO_MODE_UART0_SHIFT),
+       GRP("uartlite", uartlite_grp, 1, RT3883_GPIO_MODE_UART1),
+       GRP("jtag", jtag_grp, 1, RT3883_GPIO_MODE_JTAG),
+       GRP("mdio", mdio_grp, 1, RT3883_GPIO_MODE_MDIO),
+       GRP("lna a", lna_a_grp, 1, RT3883_GPIO_MODE_LNA_A),
+       GRP("lna g", lna_g_grp, 1, RT3883_GPIO_MODE_LNA_G),
+       GRP("pci", pci_grp, RT3883_GPIO_MODE_PCI_MASK,
+               RT3883_GPIO_MODE_PCI_SHIFT),
+       GRP("ge1", ge1_grp, 1, RT3883_GPIO_MODE_GE1),
+       GRP("ge2", ge2_grp, 1, RT3883_GPIO_MODE_GE2),
+       { 0 }
+};
+
+static int rt3883_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtmips_pinctrl_init(pdev, rt3883_pinmux_data);
+}
+
+static const struct of_device_id rt3883_pinctrl_match[] = {
+       { .compatible = "ralink,rt3883-pinctrl" },
+       { .compatible = "ralink,rt2880-pinmux" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, rt3883_pinctrl_match);
+
+static struct platform_driver rt3883_pinctrl_driver = {
+       .probe = rt3883_pinctrl_probe,
+       .driver = {
+               .name = "rt3883-pinctrl",
+               .of_match_table = rt3883_pinctrl_match,
+       },
+};
+
+static int __init rt3883_pinctrl_init(void)
+{
+       return platform_driver_register(&rt3883_pinctrl_driver);
+}
+core_initcall_sync(rt3883_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/Kconfig b/drivers/pinctrl/ralink/Kconfig
deleted file mode 100644 (file)
index c5fe4c3..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-menu "Ralink pinctrl drivers"
-        depends on RALINK
-
-config PINCTRL_RALINK
-        bool "Ralink pinctrl driver"
-        select PINMUX
-        select GENERIC_PINCONF
-
-config PINCTRL_MT7620
-        bool "MT7620 pinctrl subdriver"
-        depends on RALINK && SOC_MT7620
-        select PINCTRL_RALINK
-
-config PINCTRL_MT7621
-        bool "MT7621 pinctrl subdriver"
-        depends on RALINK && SOC_MT7621
-        select PINCTRL_RALINK
-
-config PINCTRL_MT76X8
-        bool "MT76X8 pinctrl subdriver"
-        depends on RALINK && SOC_MT7620
-        select PINCTRL_RALINK
-
-config PINCTRL_RT2880
-        bool "RT2880 pinctrl subdriver"
-        depends on RALINK && SOC_RT288X
-        select PINCTRL_RALINK
-
-config PINCTRL_RT305X
-        bool "RT305X pinctrl subdriver"
-        depends on RALINK && SOC_RT305X
-        select PINCTRL_RALINK
-
-config PINCTRL_RT3883
-        bool "RT3883 pinctrl subdriver"
-        depends on RALINK && SOC_RT3883
-        select PINCTRL_RALINK
-
-endmenu
diff --git a/drivers/pinctrl/ralink/Makefile b/drivers/pinctrl/ralink/Makefile
deleted file mode 100644 (file)
index be9acf2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_PINCTRL_RALINK)   += pinctrl-ralink.o
-
-obj-$(CONFIG_PINCTRL_MT7620)   += pinctrl-mt7620.o
-obj-$(CONFIG_PINCTRL_MT7621)   += pinctrl-mt7621.o
-obj-$(CONFIG_PINCTRL_MT76X8)   += pinctrl-mt76x8.o
-obj-$(CONFIG_PINCTRL_RT2880)   += pinctrl-rt2880.o
-obj-$(CONFIG_PINCTRL_RT305X)   += pinctrl-rt305x.o
-obj-$(CONFIG_PINCTRL_RT3883)   += pinctrl-rt3883.o
diff --git a/drivers/pinctrl/ralink/pinctrl-mt7620.c b/drivers/pinctrl/ralink/pinctrl-mt7620.c
deleted file mode 100644 (file)
index 3f6ffcc..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define MT7620_GPIO_MODE_UART0_SHIFT   2
-#define MT7620_GPIO_MODE_UART0_MASK    0x7
-#define MT7620_GPIO_MODE_UART0(x)      ((x) << MT7620_GPIO_MODE_UART0_SHIFT)
-#define MT7620_GPIO_MODE_UARTF         0x0
-#define MT7620_GPIO_MODE_PCM_UARTF     0x1
-#define MT7620_GPIO_MODE_PCM_I2S       0x2
-#define MT7620_GPIO_MODE_I2S_UARTF     0x3
-#define MT7620_GPIO_MODE_PCM_GPIO      0x4
-#define MT7620_GPIO_MODE_GPIO_UARTF    0x5
-#define MT7620_GPIO_MODE_GPIO_I2S      0x6
-#define MT7620_GPIO_MODE_GPIO          0x7
-
-#define MT7620_GPIO_MODE_NAND          0
-#define MT7620_GPIO_MODE_SD            1
-#define MT7620_GPIO_MODE_ND_SD_GPIO    2
-#define MT7620_GPIO_MODE_ND_SD_MASK    0x3
-#define MT7620_GPIO_MODE_ND_SD_SHIFT   18
-
-#define MT7620_GPIO_MODE_PCIE_RST      0
-#define MT7620_GPIO_MODE_PCIE_REF      1
-#define MT7620_GPIO_MODE_PCIE_GPIO     2
-#define MT7620_GPIO_MODE_PCIE_MASK     0x3
-#define MT7620_GPIO_MODE_PCIE_SHIFT    16
-
-#define MT7620_GPIO_MODE_WDT_RST       0
-#define MT7620_GPIO_MODE_WDT_REF       1
-#define MT7620_GPIO_MODE_WDT_GPIO      2
-#define MT7620_GPIO_MODE_WDT_MASK      0x3
-#define MT7620_GPIO_MODE_WDT_SHIFT     21
-
-#define MT7620_GPIO_MODE_MDIO          0
-#define MT7620_GPIO_MODE_MDIO_REFCLK   1
-#define MT7620_GPIO_MODE_MDIO_GPIO     2
-#define MT7620_GPIO_MODE_MDIO_MASK     0x3
-#define MT7620_GPIO_MODE_MDIO_SHIFT    7
-
-#define MT7620_GPIO_MODE_I2C           0
-#define MT7620_GPIO_MODE_UART1         5
-#define MT7620_GPIO_MODE_RGMII1                9
-#define MT7620_GPIO_MODE_RGMII2                10
-#define MT7620_GPIO_MODE_SPI           11
-#define MT7620_GPIO_MODE_SPI_REF_CLK   12
-#define MT7620_GPIO_MODE_WLED          13
-#define MT7620_GPIO_MODE_JTAG          15
-#define MT7620_GPIO_MODE_EPHY          15
-#define MT7620_GPIO_MODE_PA            20
-
-static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func mdio_grp[] = {
-       FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
-       FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
-};
-static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
-static struct ralink_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
-static struct ralink_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
-static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
-static struct ralink_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
-static struct ralink_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
-static struct ralink_pmx_func uartf_grp[] = {
-       FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
-       FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
-       FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
-       FUNC("i2s uartf", MT7620_GPIO_MODE_I2S_UARTF, 7, 8),
-       FUNC("pcm gpio", MT7620_GPIO_MODE_PCM_GPIO, 11, 4),
-       FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
-       FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
-};
-static struct ralink_pmx_func wdt_grp[] = {
-       FUNC("wdt rst", 0, 17, 1),
-       FUNC("wdt refclk", 0, 17, 1),
-       };
-static struct ralink_pmx_func pcie_rst_grp[] = {
-       FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
-       FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
-};
-static struct ralink_pmx_func nd_sd_grp[] = {
-       FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
-       FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
-};
-
-static struct ralink_pmx_group mt7620a_pinmux_data[] = {
-       GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
-       GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
-               MT7620_GPIO_MODE_UART0_SHIFT),
-       GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
-       GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
-       GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
-               MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
-       GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
-               MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
-       GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
-       GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
-       GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
-               MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
-       GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
-               MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
-       GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
-       GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
-       GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
-       GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
-       { 0 }
-};
-
-static int mt7620_pinctrl_probe(struct platform_device *pdev)
-{
-       return ralink_pinctrl_init(pdev, mt7620a_pinmux_data);
-}
-
-static const struct of_device_id mt7620_pinctrl_match[] = {
-       { .compatible = "ralink,mt7620-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, mt7620_pinctrl_match);
-
-static struct platform_driver mt7620_pinctrl_driver = {
-       .probe = mt7620_pinctrl_probe,
-       .driver = {
-               .name = "mt7620-pinctrl",
-               .of_match_table = mt7620_pinctrl_match,
-       },
-};
-
-static int __init mt7620_pinctrl_init(void)
-{
-       return platform_driver_register(&mt7620_pinctrl_driver);
-}
-core_initcall_sync(mt7620_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/pinctrl-mt7621.c b/drivers/pinctrl/ralink/pinctrl-mt7621.c
deleted file mode 100644 (file)
index fb58249..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define MT7621_GPIO_MODE_UART1         1
-#define MT7621_GPIO_MODE_I2C           2
-#define MT7621_GPIO_MODE_UART3_MASK    0x3
-#define MT7621_GPIO_MODE_UART3_SHIFT   3
-#define MT7621_GPIO_MODE_UART3_GPIO    1
-#define MT7621_GPIO_MODE_UART2_MASK    0x3
-#define MT7621_GPIO_MODE_UART2_SHIFT   5
-#define MT7621_GPIO_MODE_UART2_GPIO    1
-#define MT7621_GPIO_MODE_JTAG          7
-#define MT7621_GPIO_MODE_WDT_MASK      0x3
-#define MT7621_GPIO_MODE_WDT_SHIFT     8
-#define MT7621_GPIO_MODE_WDT_GPIO      1
-#define MT7621_GPIO_MODE_PCIE_RST      0
-#define MT7621_GPIO_MODE_PCIE_REF      2
-#define MT7621_GPIO_MODE_PCIE_MASK     0x3
-#define MT7621_GPIO_MODE_PCIE_SHIFT    10
-#define MT7621_GPIO_MODE_PCIE_GPIO     1
-#define MT7621_GPIO_MODE_MDIO_MASK     0x3
-#define MT7621_GPIO_MODE_MDIO_SHIFT    12
-#define MT7621_GPIO_MODE_MDIO_GPIO     1
-#define MT7621_GPIO_MODE_RGMII1                14
-#define MT7621_GPIO_MODE_RGMII2                15
-#define MT7621_GPIO_MODE_SPI_MASK      0x3
-#define MT7621_GPIO_MODE_SPI_SHIFT     16
-#define MT7621_GPIO_MODE_SPI_GPIO      1
-#define MT7621_GPIO_MODE_SDHCI_MASK    0x3
-#define MT7621_GPIO_MODE_SDHCI_SHIFT   18
-#define MT7621_GPIO_MODE_SDHCI_GPIO    1
-
-static struct ralink_pmx_func uart1_grp[] =  { FUNC("uart1", 0, 1, 2) };
-static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 3, 2) };
-static struct ralink_pmx_func uart3_grp[] = {
-       FUNC("uart3", 0, 5, 4),
-       FUNC("i2s", 2, 5, 4),
-       FUNC("spdif3", 3, 5, 4),
-};
-static struct ralink_pmx_func uart2_grp[] = {
-       FUNC("uart2", 0, 9, 4),
-       FUNC("pcm", 2, 9, 4),
-       FUNC("spdif2", 3, 9, 4),
-};
-static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
-static struct ralink_pmx_func wdt_grp[] = {
-       FUNC("wdt rst", 0, 18, 1),
-       FUNC("wdt refclk", 2, 18, 1),
-};
-static struct ralink_pmx_func pcie_rst_grp[] = {
-       FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
-       FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
-};
-static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
-static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
-static struct ralink_pmx_func spi_grp[] = {
-       FUNC("spi", 0, 34, 7),
-       FUNC("nand1", 2, 34, 7),
-};
-static struct ralink_pmx_func sdhci_grp[] = {
-       FUNC("sdhci", 0, 41, 8),
-       FUNC("nand2", 2, 41, 8),
-};
-static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
-
-static struct ralink_pmx_group mt7621_pinmux_data[] = {
-       GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
-       GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
-       GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
-               MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
-       GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
-               MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
-       GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
-       GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
-               MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
-       GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
-               MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
-       GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
-               MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
-       GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
-       GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
-               MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
-       GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
-               MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
-       GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
-       { 0 }
-};
-
-static int mt7621_pinctrl_probe(struct platform_device *pdev)
-{
-       return ralink_pinctrl_init(pdev, mt7621_pinmux_data);
-}
-
-static const struct of_device_id mt7621_pinctrl_match[] = {
-       { .compatible = "ralink,mt7621-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, mt7621_pinctrl_match);
-
-static struct platform_driver mt7621_pinctrl_driver = {
-       .probe = mt7621_pinctrl_probe,
-       .driver = {
-               .name = "mt7621-pinctrl",
-               .of_match_table = mt7621_pinctrl_match,
-       },
-};
-
-static int __init mt7621_pinctrl_init(void)
-{
-       return platform_driver_register(&mt7621_pinctrl_driver);
-}
-core_initcall_sync(mt7621_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/pinctrl-mt76x8.c b/drivers/pinctrl/ralink/pinctrl-mt76x8.c
deleted file mode 100644 (file)
index 4283a54..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define MT76X8_GPIO_MODE_MASK          0x3
-
-#define MT76X8_GPIO_MODE_P4LED_KN      58
-#define MT76X8_GPIO_MODE_P3LED_KN      56
-#define MT76X8_GPIO_MODE_P2LED_KN      54
-#define MT76X8_GPIO_MODE_P1LED_KN      52
-#define MT76X8_GPIO_MODE_P0LED_KN      50
-#define MT76X8_GPIO_MODE_WLED_KN       48
-#define MT76X8_GPIO_MODE_P4LED_AN      42
-#define MT76X8_GPIO_MODE_P3LED_AN      40
-#define MT76X8_GPIO_MODE_P2LED_AN      38
-#define MT76X8_GPIO_MODE_P1LED_AN      36
-#define MT76X8_GPIO_MODE_P0LED_AN      34
-#define MT76X8_GPIO_MODE_WLED_AN       32
-#define MT76X8_GPIO_MODE_PWM1          30
-#define MT76X8_GPIO_MODE_PWM0          28
-#define MT76X8_GPIO_MODE_UART2         26
-#define MT76X8_GPIO_MODE_UART1         24
-#define MT76X8_GPIO_MODE_I2C           20
-#define MT76X8_GPIO_MODE_REFCLK                18
-#define MT76X8_GPIO_MODE_PERST         16
-#define MT76X8_GPIO_MODE_WDT           14
-#define MT76X8_GPIO_MODE_SPI           12
-#define MT76X8_GPIO_MODE_SDMODE                10
-#define MT76X8_GPIO_MODE_UART0         8
-#define MT76X8_GPIO_MODE_I2S           6
-#define MT76X8_GPIO_MODE_CS1           4
-#define MT76X8_GPIO_MODE_SPIS          2
-#define MT76X8_GPIO_MODE_GPIO          0
-
-static struct ralink_pmx_func pwm1_grp[] = {
-       FUNC("sdxc d6", 3, 19, 1),
-       FUNC("utif", 2, 19, 1),
-       FUNC("gpio", 1, 19, 1),
-       FUNC("pwm1", 0, 19, 1),
-};
-
-static struct ralink_pmx_func pwm0_grp[] = {
-       FUNC("sdxc d7", 3, 18, 1),
-       FUNC("utif", 2, 18, 1),
-       FUNC("gpio", 1, 18, 1),
-       FUNC("pwm0", 0, 18, 1),
-};
-
-static struct ralink_pmx_func uart2_grp[] = {
-       FUNC("sdxc d5 d4", 3, 20, 2),
-       FUNC("pwm", 2, 20, 2),
-       FUNC("gpio", 1, 20, 2),
-       FUNC("uart2", 0, 20, 2),
-};
-
-static struct ralink_pmx_func uart1_grp[] = {
-       FUNC("sw_r", 3, 45, 2),
-       FUNC("pwm", 2, 45, 2),
-       FUNC("gpio", 1, 45, 2),
-       FUNC("uart1", 0, 45, 2),
-};
-
-static struct ralink_pmx_func i2c_grp[] = {
-       FUNC("-", 3, 4, 2),
-       FUNC("debug", 2, 4, 2),
-       FUNC("gpio", 1, 4, 2),
-       FUNC("i2c", 0, 4, 2),
-};
-
-static struct ralink_pmx_func refclk_grp[] = { FUNC("refclk", 0, 37, 1) };
-static struct ralink_pmx_func perst_grp[] = { FUNC("perst", 0, 36, 1) };
-static struct ralink_pmx_func wdt_grp[] = { FUNC("wdt", 0, 38, 1) };
-static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 7, 4) };
-
-static struct ralink_pmx_func sd_mode_grp[] = {
-       FUNC("jtag", 3, 22, 8),
-       FUNC("utif", 2, 22, 8),
-       FUNC("gpio", 1, 22, 8),
-       FUNC("sdxc", 0, 22, 8),
-};
-
-static struct ralink_pmx_func uart0_grp[] = {
-       FUNC("-", 3, 12, 2),
-       FUNC("-", 2, 12, 2),
-       FUNC("gpio", 1, 12, 2),
-       FUNC("uart0", 0, 12, 2),
-};
-
-static struct ralink_pmx_func i2s_grp[] = {
-       FUNC("antenna", 3, 0, 4),
-       FUNC("pcm", 2, 0, 4),
-       FUNC("gpio", 1, 0, 4),
-       FUNC("i2s", 0, 0, 4),
-};
-
-static struct ralink_pmx_func spi_cs1_grp[] = {
-       FUNC("-", 3, 6, 1),
-       FUNC("refclk", 2, 6, 1),
-       FUNC("gpio", 1, 6, 1),
-       FUNC("spi cs1", 0, 6, 1),
-};
-
-static struct ralink_pmx_func spis_grp[] = {
-       FUNC("pwm_uart2", 3, 14, 4),
-       FUNC("utif", 2, 14, 4),
-       FUNC("gpio", 1, 14, 4),
-       FUNC("spis", 0, 14, 4),
-};
-
-static struct ralink_pmx_func gpio_grp[] = {
-       FUNC("pcie", 3, 11, 1),
-       FUNC("refclk", 2, 11, 1),
-       FUNC("gpio", 1, 11, 1),
-       FUNC("gpio", 0, 11, 1),
-};
-
-static struct ralink_pmx_func p4led_kn_grp[] = {
-       FUNC("jtag", 3, 30, 1),
-       FUNC("utif", 2, 30, 1),
-       FUNC("gpio", 1, 30, 1),
-       FUNC("p4led_kn", 0, 30, 1),
-};
-
-static struct ralink_pmx_func p3led_kn_grp[] = {
-       FUNC("jtag", 3, 31, 1),
-       FUNC("utif", 2, 31, 1),
-       FUNC("gpio", 1, 31, 1),
-       FUNC("p3led_kn", 0, 31, 1),
-};
-
-static struct ralink_pmx_func p2led_kn_grp[] = {
-       FUNC("jtag", 3, 32, 1),
-       FUNC("utif", 2, 32, 1),
-       FUNC("gpio", 1, 32, 1),
-       FUNC("p2led_kn", 0, 32, 1),
-};
-
-static struct ralink_pmx_func p1led_kn_grp[] = {
-       FUNC("jtag", 3, 33, 1),
-       FUNC("utif", 2, 33, 1),
-       FUNC("gpio", 1, 33, 1),
-       FUNC("p1led_kn", 0, 33, 1),
-};
-
-static struct ralink_pmx_func p0led_kn_grp[] = {
-       FUNC("jtag", 3, 34, 1),
-       FUNC("rsvd", 2, 34, 1),
-       FUNC("gpio", 1, 34, 1),
-       FUNC("p0led_kn", 0, 34, 1),
-};
-
-static struct ralink_pmx_func wled_kn_grp[] = {
-       FUNC("rsvd", 3, 35, 1),
-       FUNC("rsvd", 2, 35, 1),
-       FUNC("gpio", 1, 35, 1),
-       FUNC("wled_kn", 0, 35, 1),
-};
-
-static struct ralink_pmx_func p4led_an_grp[] = {
-       FUNC("jtag", 3, 39, 1),
-       FUNC("utif", 2, 39, 1),
-       FUNC("gpio", 1, 39, 1),
-       FUNC("p4led_an", 0, 39, 1),
-};
-
-static struct ralink_pmx_func p3led_an_grp[] = {
-       FUNC("jtag", 3, 40, 1),
-       FUNC("utif", 2, 40, 1),
-       FUNC("gpio", 1, 40, 1),
-       FUNC("p3led_an", 0, 40, 1),
-};
-
-static struct ralink_pmx_func p2led_an_grp[] = {
-       FUNC("jtag", 3, 41, 1),
-       FUNC("utif", 2, 41, 1),
-       FUNC("gpio", 1, 41, 1),
-       FUNC("p2led_an", 0, 41, 1),
-};
-
-static struct ralink_pmx_func p1led_an_grp[] = {
-       FUNC("jtag", 3, 42, 1),
-       FUNC("utif", 2, 42, 1),
-       FUNC("gpio", 1, 42, 1),
-       FUNC("p1led_an", 0, 42, 1),
-};
-
-static struct ralink_pmx_func p0led_an_grp[] = {
-       FUNC("jtag", 3, 43, 1),
-       FUNC("rsvd", 2, 43, 1),
-       FUNC("gpio", 1, 43, 1),
-       FUNC("p0led_an", 0, 43, 1),
-};
-
-static struct ralink_pmx_func wled_an_grp[] = {
-       FUNC("rsvd", 3, 44, 1),
-       FUNC("rsvd", 2, 44, 1),
-       FUNC("gpio", 1, 44, 1),
-       FUNC("wled_an", 0, 44, 1),
-};
-
-static struct ralink_pmx_group mt76x8_pinmux_data[] = {
-       GRP_G("pwm1", pwm1_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_PWM1),
-       GRP_G("pwm0", pwm0_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_PWM0),
-       GRP_G("uart2", uart2_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_UART2),
-       GRP_G("uart1", uart1_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_UART1),
-       GRP_G("i2c", i2c_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_I2C),
-       GRP("refclk", refclk_grp, 1, MT76X8_GPIO_MODE_REFCLK),
-       GRP("perst", perst_grp, 1, MT76X8_GPIO_MODE_PERST),
-       GRP("wdt", wdt_grp, 1, MT76X8_GPIO_MODE_WDT),
-       GRP("spi", spi_grp, 1, MT76X8_GPIO_MODE_SPI),
-       GRP_G("sdmode", sd_mode_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_SDMODE),
-       GRP_G("uart0", uart0_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_UART0),
-       GRP_G("i2s", i2s_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_I2S),
-       GRP_G("spi cs1", spi_cs1_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_CS1),
-       GRP_G("spis", spis_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_SPIS),
-       GRP_G("gpio", gpio_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_GPIO),
-       GRP_G("wled_an", wled_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_WLED_AN),
-       GRP_G("p0led_an", p0led_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P0LED_AN),
-       GRP_G("p1led_an", p1led_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P1LED_AN),
-       GRP_G("p2led_an", p2led_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P2LED_AN),
-       GRP_G("p3led_an", p3led_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P3LED_AN),
-       GRP_G("p4led_an", p4led_an_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P4LED_AN),
-       GRP_G("wled_kn", wled_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_WLED_KN),
-       GRP_G("p0led_kn", p0led_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P0LED_KN),
-       GRP_G("p1led_kn", p1led_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P1LED_KN),
-       GRP_G("p2led_kn", p2led_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P2LED_KN),
-       GRP_G("p3led_kn", p3led_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P3LED_KN),
-       GRP_G("p4led_kn", p4led_kn_grp, MT76X8_GPIO_MODE_MASK,
-                               1, MT76X8_GPIO_MODE_P4LED_KN),
-       { 0 }
-};
-
-static int mt76x8_pinctrl_probe(struct platform_device *pdev)
-{
-       return ralink_pinctrl_init(pdev, mt76x8_pinmux_data);
-}
-
-static const struct of_device_id mt76x8_pinctrl_match[] = {
-       { .compatible = "ralink,mt76x8-pinctrl" },
-       { .compatible = "ralink,mt7620-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, mt76x8_pinctrl_match);
-
-static struct platform_driver mt76x8_pinctrl_driver = {
-       .probe = mt76x8_pinctrl_probe,
-       .driver = {
-               .name = "mt76x8-pinctrl",
-               .of_match_table = mt76x8_pinctrl_match,
-       },
-};
-
-static int __init mt76x8_pinctrl_init(void)
-{
-       return platform_driver_register(&mt76x8_pinctrl_driver);
-}
-core_initcall_sync(mt76x8_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/pinctrl-ralink.c b/drivers/pinctrl/ralink/pinctrl-ralink.c
deleted file mode 100644 (file)
index 770862f..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- *  Copyright (C) 2013 John Crispin <blogic@openwrt.org>
- */
-
-#include <linux/module.h>
-#include <linux/device.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-#include <linux/of.h>
-#include <linux/pinctrl/pinctrl.h>
-#include <linux/pinctrl/pinconf.h>
-#include <linux/pinctrl/pinconf-generic.h>
-#include <linux/pinctrl/pinmux.h>
-#include <linux/pinctrl/consumer.h>
-#include <linux/pinctrl/machine.h>
-
-#include <asm/mach-ralink/ralink_regs.h>
-#include <asm/mach-ralink/mt7620.h>
-
-#include "pinctrl-ralink.h"
-#include "../core.h"
-#include "../pinctrl-utils.h"
-
-#define SYSC_REG_GPIO_MODE     0x60
-#define SYSC_REG_GPIO_MODE2    0x64
-
-struct ralink_priv {
-       struct device *dev;
-
-       struct pinctrl_pin_desc *pads;
-       struct pinctrl_desc *desc;
-
-       struct ralink_pmx_func **func;
-       int func_count;
-
-       struct ralink_pmx_group *groups;
-       const char **group_names;
-       int group_count;
-
-       u8 *gpio;
-       int max_pins;
-};
-
-static int ralink_get_group_count(struct pinctrl_dev *pctrldev)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       return p->group_count;
-}
-
-static const char *ralink_get_group_name(struct pinctrl_dev *pctrldev,
-                                        unsigned int group)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       return (group >= p->group_count) ? NULL : p->group_names[group];
-}
-
-static int ralink_get_group_pins(struct pinctrl_dev *pctrldev,
-                                unsigned int group,
-                                const unsigned int **pins,
-                                unsigned int *num_pins)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       if (group >= p->group_count)
-               return -EINVAL;
-
-       *pins = p->groups[group].func[0].pins;
-       *num_pins = p->groups[group].func[0].pin_count;
-
-       return 0;
-}
-
-static const struct pinctrl_ops ralink_pctrl_ops = {
-       .get_groups_count       = ralink_get_group_count,
-       .get_group_name         = ralink_get_group_name,
-       .get_group_pins         = ralink_get_group_pins,
-       .dt_node_to_map         = pinconf_generic_dt_node_to_map_all,
-       .dt_free_map            = pinconf_generic_dt_free_map,
-};
-
-static int ralink_pmx_func_count(struct pinctrl_dev *pctrldev)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       return p->func_count;
-}
-
-static const char *ralink_pmx_func_name(struct pinctrl_dev *pctrldev,
-                                       unsigned int func)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       return p->func[func]->name;
-}
-
-static int ralink_pmx_group_get_groups(struct pinctrl_dev *pctrldev,
-                                      unsigned int func,
-                                      const char * const **groups,
-                                      unsigned int * const num_groups)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       if (p->func[func]->group_count == 1)
-               *groups = &p->group_names[p->func[func]->groups[0]];
-       else
-               *groups = p->group_names;
-
-       *num_groups = p->func[func]->group_count;
-
-       return 0;
-}
-
-static int ralink_pmx_group_enable(struct pinctrl_dev *pctrldev,
-                                  unsigned int func, unsigned int group)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-       u32 mode = 0;
-       u32 reg = SYSC_REG_GPIO_MODE;
-       int i;
-       int shift;
-
-       /* dont allow double use */
-       if (p->groups[group].enabled) {
-               dev_err(p->dev, "%s is already enabled\n",
-                       p->groups[group].name);
-               return 0;
-       }
-
-       p->groups[group].enabled = 1;
-       p->func[func]->enabled = 1;
-
-       shift = p->groups[group].shift;
-       if (shift >= 32) {
-               shift -= 32;
-               reg = SYSC_REG_GPIO_MODE2;
-       }
-       mode = rt_sysc_r32(reg);
-       mode &= ~(p->groups[group].mask << shift);
-
-       /* mark the pins as gpio */
-       for (i = 0; i < p->groups[group].func[0].pin_count; i++)
-               p->gpio[p->groups[group].func[0].pins[i]] = 1;
-
-       /* function 0 is gpio and needs special handling */
-       if (func == 0) {
-               mode |= p->groups[group].gpio << shift;
-       } else {
-               for (i = 0; i < p->func[func]->pin_count; i++)
-                       p->gpio[p->func[func]->pins[i]] = 0;
-               mode |= p->func[func]->value << shift;
-       }
-       rt_sysc_w32(mode, reg);
-
-       return 0;
-}
-
-static int ralink_pmx_group_gpio_request_enable(struct pinctrl_dev *pctrldev,
-                                               struct pinctrl_gpio_range *range,
-                                               unsigned int pin)
-{
-       struct ralink_priv *p = pinctrl_dev_get_drvdata(pctrldev);
-
-       if (!p->gpio[pin]) {
-               dev_err(p->dev, "pin %d is not set to gpio mux\n", pin);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static const struct pinmux_ops ralink_pmx_group_ops = {
-       .get_functions_count    = ralink_pmx_func_count,
-       .get_function_name      = ralink_pmx_func_name,
-       .get_function_groups    = ralink_pmx_group_get_groups,
-       .set_mux                = ralink_pmx_group_enable,
-       .gpio_request_enable    = ralink_pmx_group_gpio_request_enable,
-};
-
-static struct pinctrl_desc ralink_pctrl_desc = {
-       .owner          = THIS_MODULE,
-       .name           = "ralink-pinctrl",
-       .pctlops        = &ralink_pctrl_ops,
-       .pmxops         = &ralink_pmx_group_ops,
-};
-
-static struct ralink_pmx_func gpio_func = {
-       .name = "gpio",
-};
-
-static int ralink_pinctrl_index(struct ralink_priv *p)
-{
-       struct ralink_pmx_group *mux = p->groups;
-       int i, j, c = 0;
-
-       /* count the mux functions */
-       while (mux->name) {
-               p->group_count++;
-               mux++;
-       }
-
-       /* allocate the group names array needed by the gpio function */
-       p->group_names = devm_kcalloc(p->dev, p->group_count,
-                                     sizeof(char *), GFP_KERNEL);
-       if (!p->group_names)
-               return -ENOMEM;
-
-       for (i = 0; i < p->group_count; i++) {
-               p->group_names[i] = p->groups[i].name;
-               p->func_count += p->groups[i].func_count;
-       }
-
-       /* we have a dummy function[0] for gpio */
-       p->func_count++;
-
-       /* allocate our function and group mapping index buffers */
-       p->func = devm_kcalloc(p->dev, p->func_count,
-                              sizeof(*p->func), GFP_KERNEL);
-       gpio_func.groups = devm_kcalloc(p->dev, p->group_count, sizeof(int),
-                                       GFP_KERNEL);
-       if (!p->func || !gpio_func.groups)
-               return -ENOMEM;
-
-       /* add a backpointer to the function so it knows its group */
-       gpio_func.group_count = p->group_count;
-       for (i = 0; i < gpio_func.group_count; i++)
-               gpio_func.groups[i] = i;
-
-       p->func[c] = &gpio_func;
-       c++;
-
-       /* add remaining functions */
-       for (i = 0; i < p->group_count; i++) {
-               for (j = 0; j < p->groups[i].func_count; j++) {
-                       p->func[c] = &p->groups[i].func[j];
-                       p->func[c]->groups = devm_kzalloc(p->dev, sizeof(int),
-                                                   GFP_KERNEL);
-                       if (!p->func[c]->groups)
-                               return -ENOMEM;
-                       p->func[c]->groups[0] = i;
-                       p->func[c]->group_count = 1;
-                       c++;
-               }
-       }
-       return 0;
-}
-
-static int ralink_pinctrl_pins(struct ralink_priv *p)
-{
-       int i, j;
-
-       /*
-        * loop over the functions and initialize the pins array.
-        * also work out the highest pin used.
-        */
-       for (i = 0; i < p->func_count; i++) {
-               int pin;
-
-               if (!p->func[i]->pin_count)
-                       continue;
-
-               p->func[i]->pins = devm_kcalloc(p->dev,
-                                               p->func[i]->pin_count,
-                                               sizeof(int),
-                                               GFP_KERNEL);
-               if (!p->func[i]->pins)
-                       return -ENOMEM;
-               for (j = 0; j < p->func[i]->pin_count; j++)
-                       p->func[i]->pins[j] = p->func[i]->pin_first + j;
-
-               pin = p->func[i]->pin_first + p->func[i]->pin_count;
-               if (pin > p->max_pins)
-                       p->max_pins = pin;
-       }
-
-       /* the buffer that tells us which pins are gpio */
-       p->gpio = devm_kcalloc(p->dev, p->max_pins, sizeof(u8), GFP_KERNEL);
-       /* the pads needed to tell pinctrl about our pins */
-       p->pads = devm_kcalloc(p->dev, p->max_pins,
-                              sizeof(struct pinctrl_pin_desc), GFP_KERNEL);
-       if (!p->pads || !p->gpio)
-               return -ENOMEM;
-
-       memset(p->gpio, 1, sizeof(u8) * p->max_pins);
-       for (i = 0; i < p->func_count; i++) {
-               if (!p->func[i]->pin_count)
-                       continue;
-
-               for (j = 0; j < p->func[i]->pin_count; j++)
-                       p->gpio[p->func[i]->pins[j]] = 0;
-       }
-
-       /* pin 0 is always a gpio */
-       p->gpio[0] = 1;
-
-       /* set the pads */
-       for (i = 0; i < p->max_pins; i++) {
-               /* strlen("ioXY") + 1 = 5 */
-               char *name = devm_kzalloc(p->dev, 5, GFP_KERNEL);
-
-               if (!name)
-                       return -ENOMEM;
-               snprintf(name, 5, "io%d", i);
-               p->pads[i].number = i;
-               p->pads[i].name = name;
-       }
-       p->desc->pins = p->pads;
-       p->desc->npins = p->max_pins;
-
-       return 0;
-}
-
-int ralink_pinctrl_init(struct platform_device *pdev,
-                       struct ralink_pmx_group *data)
-{
-       struct ralink_priv *p;
-       struct pinctrl_dev *dev;
-       int err;
-
-       if (!data)
-               return -ENOTSUPP;
-
-       /* setup the private data */
-       p = devm_kzalloc(&pdev->dev, sizeof(struct ralink_priv), GFP_KERNEL);
-       if (!p)
-               return -ENOMEM;
-
-       p->dev = &pdev->dev;
-       p->desc = &ralink_pctrl_desc;
-       p->groups = data;
-       platform_set_drvdata(pdev, p);
-
-       /* init the device */
-       err = ralink_pinctrl_index(p);
-       if (err) {
-               dev_err(&pdev->dev, "failed to load index\n");
-               return err;
-       }
-
-       err = ralink_pinctrl_pins(p);
-       if (err) {
-               dev_err(&pdev->dev, "failed to load pins\n");
-               return err;
-       }
-       dev = pinctrl_register(p->desc, &pdev->dev, p);
-
-       return PTR_ERR_OR_ZERO(dev);
-}
diff --git a/drivers/pinctrl/ralink/pinctrl-ralink.h b/drivers/pinctrl/ralink/pinctrl-ralink.h
deleted file mode 100644 (file)
index e6037be..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- *  Copyright (C) 2012 John Crispin <john@phrozen.org>
- */
-
-#ifndef _PINCTRL_RALINK_H__
-#define _PINCTRL_RALINK_H__
-
-#define FUNC(name, value, pin_first, pin_count) \
-       { name, value, pin_first, pin_count }
-
-#define GRP(_name, _func, _mask, _shift) \
-       { .name = _name, .mask = _mask, .shift = _shift, \
-         .func = _func, .gpio = _mask, \
-         .func_count = ARRAY_SIZE(_func) }
-
-#define GRP_G(_name, _func, _mask, _gpio, _shift) \
-       { .name = _name, .mask = _mask, .shift = _shift, \
-         .func = _func, .gpio = _gpio, \
-         .func_count = ARRAY_SIZE(_func) }
-
-struct ralink_pmx_group;
-
-struct ralink_pmx_func {
-       const char *name;
-       const char value;
-
-       int pin_first;
-       int pin_count;
-       int *pins;
-
-       int *groups;
-       int group_count;
-
-       int enabled;
-};
-
-struct ralink_pmx_group {
-       const char *name;
-       int enabled;
-
-       const u32 shift;
-       const char mask;
-       const char gpio;
-
-       struct ralink_pmx_func *func;
-       int func_count;
-};
-
-int ralink_pinctrl_init(struct platform_device *pdev,
-                       struct ralink_pmx_group *data);
-
-#endif
diff --git a/drivers/pinctrl/ralink/pinctrl-rt2880.c b/drivers/pinctrl/ralink/pinctrl-rt2880.c
deleted file mode 100644 (file)
index d7a65fc..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <linux/bitops.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define RT2880_GPIO_MODE_I2C           BIT(0)
-#define RT2880_GPIO_MODE_UART0         BIT(1)
-#define RT2880_GPIO_MODE_SPI           BIT(2)
-#define RT2880_GPIO_MODE_UART1         BIT(3)
-#define RT2880_GPIO_MODE_JTAG          BIT(4)
-#define RT2880_GPIO_MODE_MDIO          BIT(5)
-#define RT2880_GPIO_MODE_SDRAM         BIT(6)
-#define RT2880_GPIO_MODE_PCI           BIT(7)
-
-static struct ralink_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 7, 8) };
-static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func pci_grp[] = { FUNC("pci", 0, 40, 32) };
-
-static struct ralink_pmx_group rt2880_pinmux_data_act[] = {
-       GRP("i2c", i2c_grp, 1, RT2880_GPIO_MODE_I2C),
-       GRP("spi", spi_grp, 1, RT2880_GPIO_MODE_SPI),
-       GRP("uartlite", uartlite_grp, 1, RT2880_GPIO_MODE_UART0),
-       GRP("jtag", jtag_grp, 1, RT2880_GPIO_MODE_JTAG),
-       GRP("mdio", mdio_grp, 1, RT2880_GPIO_MODE_MDIO),
-       GRP("sdram", sdram_grp, 1, RT2880_GPIO_MODE_SDRAM),
-       GRP("pci", pci_grp, 1, RT2880_GPIO_MODE_PCI),
-       { 0 }
-};
-
-static int rt2880_pinctrl_probe(struct platform_device *pdev)
-{
-       return ralink_pinctrl_init(pdev, rt2880_pinmux_data_act);
-}
-
-static const struct of_device_id rt2880_pinctrl_match[] = {
-       { .compatible = "ralink,rt2880-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, rt2880_pinctrl_match);
-
-static struct platform_driver rt2880_pinctrl_driver = {
-       .probe = rt2880_pinctrl_probe,
-       .driver = {
-               .name = "rt2880-pinctrl",
-               .of_match_table = rt2880_pinctrl_match,
-       },
-};
-
-static int __init rt2880_pinctrl_init(void)
-{
-       return platform_driver_register(&rt2880_pinctrl_driver);
-}
-core_initcall_sync(rt2880_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/pinctrl-rt305x.c b/drivers/pinctrl/ralink/pinctrl-rt305x.c
deleted file mode 100644 (file)
index fa3743c..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <asm/mach-ralink/ralink_regs.h>
-#include <asm/mach-ralink/rt305x.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define RT305X_GPIO_MODE_UART0_SHIFT   2
-#define RT305X_GPIO_MODE_UART0_MASK    0x7
-#define RT305X_GPIO_MODE_UART0(x)      ((x) << RT305X_GPIO_MODE_UART0_SHIFT)
-#define RT305X_GPIO_MODE_UARTF         0
-#define RT305X_GPIO_MODE_PCM_UARTF     1
-#define RT305X_GPIO_MODE_PCM_I2S       2
-#define RT305X_GPIO_MODE_I2S_UARTF     3
-#define RT305X_GPIO_MODE_PCM_GPIO      4
-#define RT305X_GPIO_MODE_GPIO_UARTF    5
-#define RT305X_GPIO_MODE_GPIO_I2S      6
-#define RT305X_GPIO_MODE_GPIO          7
-
-#define RT305X_GPIO_MODE_I2C           0
-#define RT305X_GPIO_MODE_SPI           1
-#define RT305X_GPIO_MODE_UART1         5
-#define RT305X_GPIO_MODE_JTAG          6
-#define RT305X_GPIO_MODE_MDIO          7
-#define RT305X_GPIO_MODE_SDRAM         8
-#define RT305X_GPIO_MODE_RGMII         9
-#define RT5350_GPIO_MODE_PHY_LED       14
-#define RT5350_GPIO_MODE_SPI_CS1       21
-#define RT3352_GPIO_MODE_LNA           18
-#define RT3352_GPIO_MODE_PA            20
-
-static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_grp[] = {
-       FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
-       FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
-       FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
-       FUNC("i2s uartf", RT305X_GPIO_MODE_I2S_UARTF, 7, 8),
-       FUNC("pcm gpio", RT305X_GPIO_MODE_PCM_GPIO, 11, 4),
-       FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
-       FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
-};
-static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };
-static struct ralink_pmx_func rt5350_cs1_grp[] = {
-       FUNC("spi_cs1", 0, 27, 1),
-       FUNC("wdg_cs1", 1, 27, 1),
-};
-static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func rt3352_rgmii_grp[] = {
-       FUNC("rgmii", 0, 24, 12)
-};
-static struct ralink_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };
-static struct ralink_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };
-static struct ralink_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };
-static struct ralink_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };
-static struct ralink_pmx_func rt3352_cs1_grp[] = {
-       FUNC("spi_cs1", 0, 45, 1),
-       FUNC("wdg_cs1", 1, 45, 1),
-};
-
-static struct ralink_pmx_group rt3050_pinmux_data[] = {
-       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
-       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
-       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
-               RT305X_GPIO_MODE_UART0_SHIFT),
-       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
-       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
-       GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
-       GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
-       GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),
-       { 0 }
-};
-
-static struct ralink_pmx_group rt3352_pinmux_data[] = {
-       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
-       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
-       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
-               RT305X_GPIO_MODE_UART0_SHIFT),
-       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
-       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
-       GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
-       GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
-       GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),
-       GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),
-       GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
-       GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
-       { 0 }
-};
-
-static struct ralink_pmx_group rt5350_pinmux_data[] = {
-       GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
-       GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
-       GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
-               RT305X_GPIO_MODE_UART0_SHIFT),
-       GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
-       GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
-       GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
-       GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
-       { 0 }
-};
-
-static int rt305x_pinctrl_probe(struct platform_device *pdev)
-{
-       if (soc_is_rt5350())
-               return ralink_pinctrl_init(pdev, rt5350_pinmux_data);
-       else if (soc_is_rt305x() || soc_is_rt3350())
-               return ralink_pinctrl_init(pdev, rt3050_pinmux_data);
-       else if (soc_is_rt3352())
-               return ralink_pinctrl_init(pdev, rt3352_pinmux_data);
-       else
-               return -EINVAL;
-}
-
-static const struct of_device_id rt305x_pinctrl_match[] = {
-       { .compatible = "ralink,rt305x-pinctrl" },
-       { .compatible = "ralink,rt3352-pinctrl" },
-       { .compatible = "ralink,rt5350-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, rt305x_pinctrl_match);
-
-static struct platform_driver rt305x_pinctrl_driver = {
-       .probe = rt305x_pinctrl_probe,
-       .driver = {
-               .name = "rt305x-pinctrl",
-               .of_match_table = rt305x_pinctrl_match,
-       },
-};
-
-static int __init rt305x_pinctrl_init(void)
-{
-       return platform_driver_register(&rt305x_pinctrl_driver);
-}
-core_initcall_sync(rt305x_pinctrl_init);
diff --git a/drivers/pinctrl/ralink/pinctrl-rt3883.c b/drivers/pinctrl/ralink/pinctrl-rt3883.c
deleted file mode 100644 (file)
index 5f766d7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include "pinctrl-ralink.h"
-
-#define RT3883_GPIO_MODE_UART0_SHIFT   2
-#define RT3883_GPIO_MODE_UART0_MASK    0x7
-#define RT3883_GPIO_MODE_UART0(x)      ((x) << RT3883_GPIO_MODE_UART0_SHIFT)
-#define RT3883_GPIO_MODE_UARTF         0x0
-#define RT3883_GPIO_MODE_PCM_UARTF     0x1
-#define RT3883_GPIO_MODE_PCM_I2S       0x2
-#define RT3883_GPIO_MODE_I2S_UARTF     0x3
-#define RT3883_GPIO_MODE_PCM_GPIO      0x4
-#define RT3883_GPIO_MODE_GPIO_UARTF    0x5
-#define RT3883_GPIO_MODE_GPIO_I2S      0x6
-#define RT3883_GPIO_MODE_GPIO          0x7
-
-#define RT3883_GPIO_MODE_I2C           0
-#define RT3883_GPIO_MODE_SPI           1
-#define RT3883_GPIO_MODE_UART1         5
-#define RT3883_GPIO_MODE_JTAG          6
-#define RT3883_GPIO_MODE_MDIO          7
-#define RT3883_GPIO_MODE_GE1           9
-#define RT3883_GPIO_MODE_GE2           10
-
-#define RT3883_GPIO_MODE_PCI_SHIFT     11
-#define RT3883_GPIO_MODE_PCI_MASK      0x7
-#define RT3883_GPIO_MODE_PCI           (RT3883_GPIO_MODE_PCI_MASK << RT3883_GPIO_MODE_PCI_SHIFT)
-#define RT3883_GPIO_MODE_LNA_A_SHIFT   16
-#define RT3883_GPIO_MODE_LNA_A_MASK    0x3
-#define _RT3883_GPIO_MODE_LNA_A(_x)    ((_x) << RT3883_GPIO_MODE_LNA_A_SHIFT)
-#define RT3883_GPIO_MODE_LNA_A_GPIO    0x3
-#define RT3883_GPIO_MODE_LNA_A         _RT3883_GPIO_MODE_LNA_A(RT3883_GPIO_MODE_LNA_A_MASK)
-#define RT3883_GPIO_MODE_LNA_G_SHIFT   18
-#define RT3883_GPIO_MODE_LNA_G_MASK    0x3
-#define _RT3883_GPIO_MODE_LNA_G(_x)    ((_x) << RT3883_GPIO_MODE_LNA_G_SHIFT)
-#define RT3883_GPIO_MODE_LNA_G_GPIO    0x3
-#define RT3883_GPIO_MODE_LNA_G         _RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
-
-static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_grp[] = {
-       FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
-       FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
-       FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
-       FUNC("i2s uartf", RT3883_GPIO_MODE_I2S_UARTF, 7, 8),
-       FUNC("pcm gpio", RT3883_GPIO_MODE_PCM_GPIO, 11, 4),
-       FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
-       FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
-};
-static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func lna_a_grp[] = { FUNC("lna a", 0, 32, 3) };
-static struct ralink_pmx_func lna_g_grp[] = { FUNC("lna g", 0, 35, 3) };
-static struct ralink_pmx_func pci_grp[] = {
-       FUNC("pci-dev", 0, 40, 32),
-       FUNC("pci-host2", 1, 40, 32),
-       FUNC("pci-host1", 2, 40, 32),
-       FUNC("pci-fnc", 3, 40, 32)
-};
-static struct ralink_pmx_func ge1_grp[] = { FUNC("ge1", 0, 72, 12) };
-static struct ralink_pmx_func ge2_grp[] = { FUNC("ge2", 0, 84, 12) };
-
-static struct ralink_pmx_group rt3883_pinmux_data[] = {
-       GRP("i2c", i2c_grp, 1, RT3883_GPIO_MODE_I2C),
-       GRP("spi", spi_grp, 1, RT3883_GPIO_MODE_SPI),
-       GRP("uartf", uartf_grp, RT3883_GPIO_MODE_UART0_MASK,
-               RT3883_GPIO_MODE_UART0_SHIFT),
-       GRP("uartlite", uartlite_grp, 1, RT3883_GPIO_MODE_UART1),
-       GRP("jtag", jtag_grp, 1, RT3883_GPIO_MODE_JTAG),
-       GRP("mdio", mdio_grp, 1, RT3883_GPIO_MODE_MDIO),
-       GRP("lna a", lna_a_grp, 1, RT3883_GPIO_MODE_LNA_A),
-       GRP("lna g", lna_g_grp, 1, RT3883_GPIO_MODE_LNA_G),
-       GRP("pci", pci_grp, RT3883_GPIO_MODE_PCI_MASK,
-               RT3883_GPIO_MODE_PCI_SHIFT),
-       GRP("ge1", ge1_grp, 1, RT3883_GPIO_MODE_GE1),
-       GRP("ge2", ge2_grp, 1, RT3883_GPIO_MODE_GE2),
-       { 0 }
-};
-
-static int rt3883_pinctrl_probe(struct platform_device *pdev)
-{
-       return ralink_pinctrl_init(pdev, rt3883_pinmux_data);
-}
-
-static const struct of_device_id rt3883_pinctrl_match[] = {
-       { .compatible = "ralink,rt3883-pinctrl" },
-       { .compatible = "ralink,rt2880-pinmux" },
-       {}
-};
-MODULE_DEVICE_TABLE(of, rt3883_pinctrl_match);
-
-static struct platform_driver rt3883_pinctrl_driver = {
-       .probe = rt3883_pinctrl_probe,
-       .driver = {
-               .name = "rt3883-pinctrl",
-               .of_match_table = rt3883_pinctrl_match,
-       },
-};
-
-static int __init rt3883_pinctrl_init(void)
-{
-       return platform_driver_register(&rt3883_pinctrl_driver);
-}
-core_initcall_sync(rt3883_pinctrl_init);