Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 11/20] arm: sun8i: orangepi-2: Enable dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i hardware is present on the Orange PI 2.
It uses the internal PHY.

This patch create the needed emac node.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
index 5b6d145..cedd326 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
@@ -54,6 +54,7 @@
 	aliases {
 		serial0 = &uart0;
 		/* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
+		ethernet0 = &emac;
 		ethernet1 = &rtl8189;
 	};
 
@@ -108,6 +109,13 @@
 	status = "okay";
 };
 
+&emac {
+	phy-handle = <&int_mii_phy>;
+	phy-mode = "mii";
+	allwinner,leds-active-low;
+	status = "okay";
+};
+
 &ir {
 	pinctrl-names = "default";
 	pinctrl-0 = <&ir_pins_a>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 10/20] arm: sun8i: orangepi-one: Enable dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i hardware is present on the Orange PI One.
It uses the internal PHY.

This patch create the needed emac node.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sun8i-h3-orangepi-one.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
index 5fea430..6880268 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
@@ -52,6 +52,7 @@
 	compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
 
 	aliases {
+		ethernet0 = &emac;
 		serial0 = &uart0;
 	};
 
@@ -97,6 +98,13 @@
 	status = "okay";
 };
 
+&emac {
+	phy-handle = <&int_mii_phy>;
+	phy-mode = "mii";
+	allwinner,leds-active-low;
+	status = "okay";
+};
+
 &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 09/20] arm: sun8i: orangepi-zero: Enable dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i hardware is present on the Orange PI Zero.
It uses the internal PHY.

This patch create the needed emac node.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
index 9e8b082..dd3525a 100644
--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
@@ -57,6 +57,7 @@
 	aliases {
 		serial0 = &uart0;
 		/* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
+		ethernet0 = &emac;
 		ethernet1 = &xr819;
 	};
 
@@ -103,6 +104,13 @@
 	status = "okay";
 };
 
+&emac {
+	phy-handle = <&int_mii_phy>;
+	phy-mode = "mii";
+	allwinner,leds-active-low;
+	status = "okay";
+};
+
 &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins_a>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 08/20] arm: sun8i: orangepi-pc: Enable dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i hardware is present on the Orange PI PC.
It uses the internal PHY.

This patch create the needed emac node.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
index f148111..52e6575 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
@@ -52,6 +52,7 @@
 	compatible = "xunlong,orangepi-pc", "allwinner,sun8i-h3";
 
 	aliases {
+		ethernet0 = &emac;
 		serial0 = &uart0;
 	};
 
@@ -109,6 +110,13 @@
 	status = "okay";
 };
 
+&emac {
+	phy-handle = <&int_mii_phy>;
+	phy-mode = "mii";
+	allwinner,leds-active-low;
+	status = "okay";
+};
+
 &ir {
 	pinctrl-names = "default";
 	pinctrl-0 = <&ir_pins_a>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 07/20] arm: sun8i: sunxi-h3-h5: add dwmac-sun8i ethernet driver
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i is an ethernet MAC hardware that support 10/100/1000
speed.

This patch enable the dwmac-sun8i on Allwinner H3/H5 SoC Device-tree.
SoC H3/H5 have an internal PHY, so optionals syscon and ephy are set.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sunxi-h3-h5.dtsi | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
index d9691fc..45a9a30 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
@@ -285,6 +285,14 @@
 			interrupt-controller;
 			#interrupt-cells = <3>;
 
+			emac_rgmii_pins: emac0 {
+				pins = "PD0", "PD1", "PD2", "PD3", "PD4",
+				       "PD5", "PD7", "PD8", "PD9", "PD10",
+				       "PD12", "PD13", "PD15", "PD16", "PD17";
+				function = "emac";
+				drive-strength = <40>;
+			};
+
 			i2c0_pins: i2c0 {
 				pins = "PA11", "PA12";
 				function = "i2c0";
@@ -381,6 +389,32 @@
 			clocks = <&osc24M>;
 		};
 
+		emac: ethernet at 1c30000 {
+			compatible = "allwinner,sun8i-h3-emac";
+			syscon = <&syscon>;
+			reg = <0x01c30000 0x104>;
+			interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "macirq";
+			resets = <&ccu RST_BUS_EMAC>;
+			reset-names = "stmmaceth";
+			clocks = <&ccu CLK_BUS_EMAC>;
+			clock-names = "stmmaceth";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			mdio: mdio {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				int_mii_phy: ethernet-phy at 1 {
+					compatible = "ethernet-phy-ieee802.3-c22";
+					reg = <1>;
+					clocks = <&ccu CLK_BUS_EPHY>;
+					resets = <&ccu RST_BUS_EPHY>;
+				};
+			};
+		};
+
 		spi0: spi at 01c68000 {
 			compatible = "allwinner,sun8i-h3-spi";
 			reg = <0x01c68000 0x1000>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 06/20] arm: sun8i: sunxi-h3-h5: Add dt node for the syscon control module
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

This patch add the dt node for the syscon register present on the
Allwinner H3/H5

Only two register are present in this syscon and the only one useful is
the one dedicated to EMAC clock..

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 arch/arm/boot/dts/sunxi-h3-h5.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
index 1aeeacb..d9691fc 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
@@ -83,6 +83,12 @@
 		#size-cells = <1>;
 		ranges;
 
+		syscon: syscon at 1c00000 {
+			compatible = "allwinner,sun8i-h3-system-controller",
+				"syscon";
+			reg = <0x01c00000 0x1000>;
+		};
+
 		dma: dma-controller at 01c02000 {
 			compatible = "allwinner,sun8i-h3-dma";
 			reg = <0x01c02000 0x1000>;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 05/20] net: stmmac: Add dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

The dwmac-sun8i is a heavy hacked version of stmmac hardware by
allwinner.
In fact the only common part is the descriptor management and the first
register function.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 drivers/net/ethernet/stmicro/stmmac/Kconfig        |  11 +
 drivers/net/ethernet/stmicro/stmmac/Makefile       |   1 +
 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c  | 973 +++++++++++++++++++++
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  |  29 +
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   9 +-
 include/linux/stmmac.h                             |   1 +
 6 files changed, 1022 insertions(+), 2 deletions(-)
 create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c

diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index cfbe363..85c0e41 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -145,6 +145,17 @@ config DWMAC_SUNXI
 	  This selects Allwinner SoC glue layer support for the
 	  stmmac device driver. This driver is used for A20/A31
 	  GMAC ethernet controller.
+
+config DWMAC_SUN8I
+	tristate "Allwinner sun8i GMAC support"
+	default ARCH_SUNXI
+	depends on OF && (ARCH_SUNXI || COMPILE_TEST)
+	---help---
+	  Support for Allwinner H3 A83T A64 EMAC ethernet controllers.
+
+	  This selects Allwinner SoC glue layer support for the
+	  stmmac device driver. This driver is used for H3/A83T/A64
+	  EMAC ethernet controller.
 endif
 
 config STMMAC_PCI
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 700c603..fd4937a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_DWMAC_SOCFPGA)	+= dwmac-altr-socfpga.o
 obj-$(CONFIG_DWMAC_STI)		+= dwmac-sti.o
 obj-$(CONFIG_DWMAC_STM32)	+= dwmac-stm32.o
 obj-$(CONFIG_DWMAC_SUNXI)	+= dwmac-sunxi.o
+obj-$(CONFIG_DWMAC_SUN8I)	+= dwmac-sun8i.o
 obj-$(CONFIG_DWMAC_DWC_QOS_ETH)	+= dwmac-dwc-qos-eth.o
 obj-$(CONFIG_DWMAC_GENERIC)	+= dwmac-generic.o
 stmmac-platform-objs:= stmmac_platform.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
new file mode 100644
index 0000000..66eb980
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
@@ -0,0 +1,973 @@
+/*
+ * dwmac-sun8i.c - Allwinner sun8i DWMAC specific glue layer
+ *
+ * Copyright (C) 2017 Corentin Labbe <clabbe.montjoie@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of_mdio.h>
+#include <linux/of_net.h>
+#include <linux/phy.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/regmap.h>
+#include <linux/stmmac.h>
+
+#include "stmmac.h"
+#include "stmmac_platform.h"
+
+/* General notes on dwmac-sun8i:
+ * Locking: no locking is necessary in this file because all necessary locking
+ *		is done in the "stmmac files"
+ */
+
+/* struct emac_variant - Descrive dwmac-sun8i hardware variant
+ * @default_syscon_value:	The default value of the EMAC register in syscon
+ *				This value is used for disabling properly EMAC
+ *				and used as a good starting value in case of the
+ *				boot process(uboot) leave some stuff.
+ * @internal_phy:		Does the MAC embed an internal PHY
+ * @support_mii:		Does the MAC handle MII
+ * @support_rmii:		Does the MAC handle RMII
+ * @support_rgmii:		Does the MAC handle RGMII
+ */
+struct emac_variant {
+	u32 default_syscon_value;
+	int internal_phy;
+	bool support_mii;
+	bool support_rmii;
+	bool support_rgmii;
+};
+
+/* struct sunxi_priv_data - hold all sunxi private data
+ * @tx_clk:	reference to MAC TX clock
+ * @ephy_clk:	reference to the optional EPHY clock for the internal PHY
+ * @regulator:	reference to the optional regulator
+ * @rst_ephy:	reference to the optional EPHY reset for the internal PHY
+ * @variant:	reference to the current board variant
+ * @regmap:	regmap for using the syscon
+ * @use_internal_phy: Does the current PHY choice imply using the internal PHY
+ */
+struct sunxi_priv_data {
+	struct clk *tx_clk;
+	struct clk *ephy_clk;
+	struct regulator *regulator;
+	struct reset_control *rst_ephy;
+	const struct emac_variant *variant;
+	struct regmap *regmap;
+	bool use_internal_phy;
+};
+
+static const struct emac_variant emac_variant_h3 = {
+	.default_syscon_value = 0x58000,
+	.internal_phy = PHY_INTERFACE_MODE_MII,
+	.support_mii = true,
+	.support_rmii = true,
+	.support_rgmii = true
+};
+
+static const struct emac_variant emac_variant_a83t = {
+	.default_syscon_value = 0,
+	.internal_phy = 0,
+	.support_mii = true,
+	.support_rgmii = true
+};
+
+static const struct emac_variant emac_variant_a64 = {
+	.default_syscon_value = 0,
+	.internal_phy = 0,
+	.support_mii = true,
+	.support_rmii = true,
+	.support_rgmii = true
+};
+
+#define EMAC_BASIC_CTL0 0x00
+#define EMAC_BASIC_CTL1 0x04
+#define EMAC_INT_STA    0x08
+#define EMAC_INT_EN     0x0C
+#define EMAC_TX_CTL0    0x10
+#define EMAC_TX_CTL1    0x14
+#define EMAC_TX_FLOW_CTL        0x1C
+#define EMAC_TX_DESC_LIST 0x20
+#define EMAC_RX_CTL0    0x24
+#define EMAC_RX_CTL1    0x28
+#define EMAC_RX_DESC_LIST 0x34
+#define EMAC_RX_FRM_FLT 0x38
+#define EMAC_MDIO_CMD   0x48
+#define EMAC_MDIO_DATA  0x4C
+#define EMAC_MACADDR_HI(reg) (0x50 + (reg) * 8)
+#define EMAC_MACADDR_LO(reg) (0x54 + (reg) * 8)
+#define EMAC_TX_DMA_STA 0xB0
+#define EMAC_TX_CUR_DESC        0xB4
+#define EMAC_TX_CUR_BUF 0xB8
+#define EMAC_RX_DMA_STA 0xC0
+#define EMAC_RX_CUR_DESC        0xC4
+#define EMAC_RX_CUR_BUF 0xC8
+
+/* Use in EMAC_BASIC_CTL1 */
+#define EMAC_BURSTLEN_SHIFT		24
+
+/* Used in EMAC_RX_FRM_FLT */
+#define EMAC_FRM_FLT_RXALL              BIT(0)
+#define EMAC_FRM_FLT_CTL                BIT(13)
+#define EMAC_FRM_FLT_MULTICAST          BIT(16)
+
+/* Used in RX_CTL1*/
+#define EMAC_RX_MD              BIT(1)
+#define EMAC_RX_TH_MASK		GENMASK(4, 5)
+#define EMAC_RX_TH_32		0
+#define EMAC_RX_TH_64		(0x1 << 4)
+#define EMAC_RX_TH_96		(0x2 << 4)
+#define EMAC_RX_TH_128		(0x3 << 4)
+#define EMAC_RX_DMA_EN  BIT(30)
+#define EMAC_RX_DMA_START       BIT(31)
+
+/* Used in TX_CTL1*/
+#define EMAC_TX_MD              BIT(1)
+#define EMAC_TX_NEXT_FRM        BIT(2)
+#define EMAC_TX_TH_MASK		GENMASK(8, 10)
+#define EMAC_TX_TH_64		0
+#define EMAC_TX_TH_128		(0x1 << 8)
+#define EMAC_TX_TH_192		(0x2 << 8)
+#define EMAC_TX_TH_256		(0x3 << 8)
+#define EMAC_TX_DMA_EN  BIT(30)
+#define EMAC_TX_DMA_START       BIT(31)
+
+/* Used in RX_CTL0 */
+#define EMAC_RX_RECEIVER_EN             BIT(31)
+#define EMAC_RX_DO_CRC BIT(27)
+#define EMAC_RX_FLOW_CTL_EN             BIT(16)
+
+/* Used in TX_CTL0 */
+#define EMAC_TX_TRANSMITTER_EN  BIT(31)
+
+/* Used in EMAC_TX_FLOW_CTL */
+#define EMAC_TX_FLOW_CTL_EN             BIT(0)
+
+/* Used in EMAC_INT_STA */
+#define EMAC_TX_INT             BIT(0)
+#define EMAC_TX_DMA_STOP_INT    BIT(1)
+#define EMAC_TX_BUF_UA_INT      BIT(2)
+#define EMAC_TX_TIMEOUT_INT     BIT(3)
+#define EMAC_TX_UNDERFLOW_INT   BIT(4)
+#define EMAC_TX_EARLY_INT       BIT(5)
+#define EMAC_RX_INT             BIT(8)
+#define EMAC_RX_BUF_UA_INT      BIT(9)
+#define EMAC_RX_DMA_STOP_INT    BIT(10)
+#define EMAC_RX_TIMEOUT_INT     BIT(11)
+#define EMAC_RX_OVERFLOW_INT    BIT(12)
+#define EMAC_RX_EARLY_INT       BIT(13)
+#define EMAC_RGMII_STA_INT      BIT(16)
+
+#define MAC_ADDR_TYPE_DST BIT(31)
+
+/* H3 specific bits for EPHY */
+#define H3_EPHY_ADDR_SHIFT	20
+#define H3_EPHY_LED_POL		BIT(17) /* 1: active low, 0: active high */
+#define H3_EPHY_SHUTDOWN	BIT(16) /* 1: shutdown, 0: power up */
+#define H3_EPHY_SELECT		BIT(15) /* 1: internal PHY, 0: external PHY */
+
+/* H3/A64 specific bits */
+#define SYSCON_RMII_EN		BIT(13) /* 1: enable RMII (overrides EPIT) */
+
+/* Generic system control EMAC_CLK bits */
+#define SYSCON_ETXDC_MASK		GENMASK(2, 0)
+#define SYSCON_ETXDC_SHIFT		10
+#define SYSCON_ERXDC_MASK		GENMASK(4, 0)
+#define SYSCON_ERXDC_SHIFT		5
+/* EMAC PHY Interface Type */
+#define SYSCON_EPIT			BIT(2) /* 1: RGMII, 0: MII */
+#define SYSCON_ETCS_MASK		GENMASK(1, 0)
+#define SYSCON_ETCS_MII		0x0
+#define SYSCON_ETCS_EXT_GMII	0x1
+#define SYSCON_ETCS_INT_GMII	0x2
+#define SYSCON_EMAC_REG		0x30
+
+/* sun8i_dwmac_dma_reset() - reset the EMAC
+ * Called from stmmac via stmmac_dma_ops->reset
+ */
+static int sun8i_dwmac_dma_reset(void __iomem *ioaddr)
+{
+	writel(0, ioaddr + EMAC_RX_CTL1);
+	writel(0, ioaddr + EMAC_TX_CTL1);
+	writel(0, ioaddr + EMAC_RX_FRM_FLT);
+	writel(0, ioaddr + EMAC_RX_DESC_LIST);
+	writel(0, ioaddr + EMAC_TX_DESC_LIST);
+	writel(0, ioaddr + EMAC_INT_EN);
+	writel(0x1FFFFFF, ioaddr + EMAC_INT_STA);
+	return 0;
+}
+
+/* sun8i_dwmac_dma_init() - initialize the EMAC
+ * Called from stmmac via stmmac_dma_ops->init
+ */
+static void sun8i_dwmac_dma_init(void __iomem *ioaddr,
+				 struct stmmac_dma_cfg *dma_cfg,
+				 u32 dma_tx, u32 dma_rx, int atds)
+{
+	/* Write TX and RX descriptors address */
+	writel(dma_rx, ioaddr + EMAC_RX_DESC_LIST);
+	writel(dma_tx, ioaddr + EMAC_TX_DESC_LIST);
+
+	writel(EMAC_RX_INT | EMAC_TX_INT, ioaddr + EMAC_INT_EN);
+	writel(0x1FFFFFF, ioaddr + EMAC_INT_STA);
+}
+
+/* sun8i_dwmac_dump_regs() - Dump EMAC address space
+ * Called from stmmac_dma_ops->dump_regs
+ * Used for ethtool
+ */
+static void sun8i_dwmac_dump_regs(void __iomem *ioaddr, u32 *reg_space)
+{
+	int i;
+
+	for (i = 0; i < 0xC8; i += 4) {
+		if (i == 0x32 || i == 0x3C)
+			continue;
+		reg_space[i / 4] = readl(ioaddr + i);
+	}
+}
+
+/* sun8i_dwmac_dump_mac_regs() - Dump EMAC address space
+ * Called from stmmac_ops->dump_regs
+ * Used for ethtool
+ */
+static void sun8i_dwmac_dump_mac_regs(struct mac_device_info *hw,
+				      u32 *reg_space)
+{
+	int i;
+	void __iomem *ioaddr = hw->pcsr;
+
+	for (i = 0; i < 0xC8; i += 4) {
+		if (i == 0x32 || i == 0x3C)
+			continue;
+		reg_space[i / 4] = readl(ioaddr + i);
+	}
+}
+
+static void sun8i_dwmac_enable_dma_irq(void __iomem *ioaddr, u32 chan)
+{
+	writel(EMAC_RX_INT | EMAC_TX_INT, ioaddr + EMAC_INT_EN);
+}
+
+static void sun8i_dwmac_disable_dma_irq(void __iomem *ioaddr, u32 chan)
+{
+	writel(0, ioaddr + EMAC_INT_EN);
+}
+
+static void sun8i_dwmac_dma_start_tx(void __iomem *ioaddr, u32 chan)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_TX_CTL1);
+	v |= EMAC_TX_DMA_START;
+	v |= EMAC_TX_DMA_EN;
+	writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
+static void sun8i_dwmac_enable_dma_transmission(void __iomem *ioaddr)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_TX_CTL1);
+	v |= EMAC_TX_DMA_START;
+	v |= EMAC_TX_DMA_EN;
+	writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
+static void sun8i_dwmac_dma_stop_tx(void __iomem *ioaddr, u32 chan)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_TX_CTL1);
+	v &= ~EMAC_TX_DMA_EN;
+	writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
+static void sun8i_dwmac_dma_start_rx(void __iomem *ioaddr, u32 chan)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_RX_CTL1);
+	v |= EMAC_RX_DMA_START;
+	v |= EMAC_RX_DMA_EN;
+	writel(v, ioaddr + EMAC_RX_CTL1);
+}
+
+static void sun8i_dwmac_dma_stop_rx(void __iomem *ioaddr, u32 chan)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_RX_CTL1);
+	v &= ~EMAC_RX_DMA_EN;
+	writel(v, ioaddr + EMAC_RX_CTL1);
+}
+
+static int sun8i_dwmac_dma_interrupt(void __iomem *ioaddr,
+				     struct stmmac_extra_stats *x, u32 chan)
+{
+	u32 v;
+	int ret = 0;
+
+	v = readl(ioaddr + EMAC_INT_STA);
+
+	if (v & EMAC_TX_INT) {
+		ret |= handle_tx;
+		x->tx_normal_irq_n++;
+	}
+
+	if (v & EMAC_TX_DMA_STOP_INT)
+		x->tx_process_stopped_irq++;
+
+	if (v & EMAC_TX_BUF_UA_INT)
+		x->tx_process_stopped_irq++;
+
+	if (v & EMAC_TX_TIMEOUT_INT)
+		ret |= tx_hard_error;
+
+	if (v & EMAC_TX_UNDERFLOW_INT) {
+		ret |= tx_hard_error;
+		x->tx_undeflow_irq++;
+	}
+
+	if (v & EMAC_TX_EARLY_INT)
+		x->tx_early_irq++;
+
+	if (v & EMAC_RX_INT) {
+		ret |= handle_rx;
+		x->rx_normal_irq_n++;
+	}
+
+	if (v & EMAC_RX_BUF_UA_INT)
+		x->rx_buf_unav_irq++;
+
+	if (v & EMAC_RX_DMA_STOP_INT)
+		x->rx_process_stopped_irq++;
+
+	if (v & EMAC_RX_TIMEOUT_INT)
+		ret |= tx_hard_error;
+
+	if (v & EMAC_RX_OVERFLOW_INT) {
+		ret |= tx_hard_error;
+		x->rx_overflow_irq++;
+	}
+
+	if (v & EMAC_RX_EARLY_INT)
+		x->rx_early_irq++;
+
+	if (v & EMAC_RGMII_STA_INT)
+		x->irq_rgmii_n++;
+
+	writel(v, ioaddr + EMAC_INT_STA);
+
+	return ret;
+}
+
+static void sun8i_dwmac_dma_operation_mode(void __iomem *ioaddr, int txmode,
+					   int rxmode, int rxfifosz)
+{
+	u32 v;
+
+	v = readl(ioaddr + EMAC_TX_CTL1);
+	if (txmode == SF_DMA_MODE) {
+		v |= EMAC_TX_MD;
+		/* Undocumented bit (called TX_NEXT_FRM in BSP), the original
+		 * comment is
+		 * "Operating on second frame increase the performance
+		 * especially when transmit store-and-forward is used."
+		 */
+		v |= EMAC_TX_NEXT_FRM;
+	} else {
+		v &= ~EMAC_TX_MD;
+		v &= ~EMAC_TX_TH_MASK;
+		if (txmode < 64)
+			v |= EMAC_TX_TH_64;
+		else if (txmode < 128)
+			v |= EMAC_TX_TH_128;
+		else if (txmode < 192)
+			v |= EMAC_TX_TH_192;
+		else if (txmode < 256)
+			v |= EMAC_TX_TH_256;
+	}
+	writel(v, ioaddr + EMAC_TX_CTL1);
+
+	v = readl(ioaddr + EMAC_RX_CTL1);
+	if (rxmode == SF_DMA_MODE) {
+		v |= EMAC_RX_MD;
+	} else {
+		v &= ~EMAC_RX_MD;
+		v &= ~EMAC_RX_TH_MASK;
+		if (rxmode < 32)
+			v |= EMAC_RX_TH_32;
+		else if (rxmode < 64)
+			v |= EMAC_RX_TH_64;
+		else if (rxmode < 96)
+			v |= EMAC_RX_TH_96;
+		else if (rxmode < 128)
+			v |= EMAC_RX_TH_128;
+	}
+	writel(v, ioaddr + EMAC_RX_CTL1);
+}
+
+static const struct stmmac_dma_ops sun8i_dwmac_dma_ops = {
+	.reset = sun8i_dwmac_dma_reset,
+	.init = sun8i_dwmac_dma_init,
+	.dump_regs = sun8i_dwmac_dump_regs,
+	.dma_mode = sun8i_dwmac_dma_operation_mode,
+	.enable_dma_transmission = sun8i_dwmac_enable_dma_transmission,
+	.enable_dma_irq = sun8i_dwmac_enable_dma_irq,
+	.disable_dma_irq = sun8i_dwmac_disable_dma_irq,
+	.start_tx = sun8i_dwmac_dma_start_tx,
+	.stop_tx = sun8i_dwmac_dma_stop_tx,
+	.start_rx = sun8i_dwmac_dma_start_rx,
+	.stop_rx = sun8i_dwmac_dma_stop_rx,
+	.dma_interrupt = sun8i_dwmac_dma_interrupt,
+};
+
+static int sun8i_dwmac_init(struct platform_device *pdev, void *priv)
+{
+	struct sunxi_priv_data *gmac = priv;
+	int ret;
+
+	if (gmac->regulator) {
+		ret = regulator_enable(gmac->regulator);
+		if (ret) {
+			dev_err(&pdev->dev, "Fail to enable regulator\n");
+			return ret;
+		}
+	}
+
+	ret = clk_prepare_enable(gmac->tx_clk);
+	if (ret) {
+		if (gmac->regulator)
+			regulator_disable(gmac->regulator);
+		dev_err(&pdev->dev, "Could not enable AHB clock\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static void sun8i_dwmac_core_init(struct mac_device_info *hw, int mtu)
+{
+	void __iomem *ioaddr = hw->pcsr;
+	u32 v;
+
+	v = (8 << EMAC_BURSTLEN_SHIFT); /* burst len */
+	writel(v, ioaddr + EMAC_BASIC_CTL1);
+}
+
+static void sun8i_dwmac_set_mac(void __iomem *ioaddr, bool enable)
+{
+	u32 t, r;
+
+	t = readl(ioaddr + EMAC_TX_CTL0);
+	r = readl(ioaddr + EMAC_RX_CTL0);
+	if (enable) {
+		t |= EMAC_TX_TRANSMITTER_EN;
+		r |= EMAC_RX_RECEIVER_EN;
+	} else {
+		t &= ~EMAC_TX_TRANSMITTER_EN;
+		r &= ~EMAC_RX_RECEIVER_EN;
+	}
+	writel(t, ioaddr + EMAC_TX_CTL0);
+	writel(r, ioaddr + EMAC_RX_CTL0);
+}
+
+/* Set MAC address@slot reg_n
+ * All slot > 0 need to be enabled with MAC_ADDR_TYPE_DST
+ * If addr is NULL, clear the slot
+ */
+static void sun8i_dwmac_set_umac_addr(struct mac_device_info *hw,
+				      unsigned char *addr,
+				      unsigned int reg_n)
+{
+	void __iomem *ioaddr = hw->pcsr;
+	u32 v;
+
+	if (!addr) {
+		writel(0, ioaddr + EMAC_MACADDR_HI(reg_n));
+		return;
+	}
+
+	stmmac_set_mac_addr(ioaddr, addr, EMAC_MACADDR_HI(reg_n),
+			    EMAC_MACADDR_LO(reg_n));
+	if (reg_n > 0) {
+		v = readl(ioaddr + EMAC_MACADDR_HI(reg_n));
+		v |= MAC_ADDR_TYPE_DST;
+		writel(v, ioaddr + EMAC_MACADDR_HI(reg_n));
+	}
+}
+
+static void sun8i_dwmac_get_umac_addr(struct mac_device_info *hw,
+				      unsigned char *addr,
+				      unsigned int reg_n)
+{
+	void __iomem *ioaddr = hw->pcsr;
+
+	stmmac_get_mac_addr(ioaddr, addr, EMAC_MACADDR_HI(reg_n),
+			    EMAC_MACADDR_LO(reg_n));
+}
+
+/* caution this function must return non 0 to work */
+static int sun8i_dwmac_rx_ipc_enable(struct mac_device_info *hw)
+{
+	void __iomem *ioaddr = hw->pcsr;
+	u32 v;
+
+	v = readl(ioaddr + EMAC_RX_CTL0);
+	v |= EMAC_RX_DO_CRC;
+	writel(v, ioaddr + EMAC_RX_CTL0);
+
+	return 1;
+}
+
+static void sun8i_dwmac_set_filter(struct mac_device_info *hw,
+				   struct net_device *dev)
+{
+	void __iomem *ioaddr = hw->pcsr;
+	u32 v;
+	int i = 1;
+	struct netdev_hw_addr *ha;
+	int macaddrs = netdev_uc_count(dev) + netdev_mc_count(dev) + 1;
+
+	v = EMAC_FRM_FLT_CTL;
+
+	if (dev->flags & IFF_PROMISC) {
+		v = EMAC_FRM_FLT_RXALL;
+	} else if (dev->flags & IFF_ALLMULTI) {
+		v |= EMAC_FRM_FLT_MULTICAST;
+	} else if (macaddrs <= hw->unicast_filter_entries) {
+		if (!netdev_mc_empty(dev)) {
+			netdev_for_each_mc_addr(ha, dev) {
+				sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
+				i++;
+			}
+		}
+		if (!netdev_uc_empty(dev)) {
+			netdev_for_each_uc_addr(ha, dev) {
+				sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
+				i++;
+			}
+		}
+	} else {
+		netdev_info(dev, "Too many address, switching to promiscuous\n");
+		v = EMAC_FRM_FLT_RXALL;
+	}
+
+	/* Disable unused address filter slots */
+	while (i < hw->unicast_filter_entries)
+		sun8i_dwmac_set_umac_addr(hw, NULL, i++);
+
+	writel(v, ioaddr + EMAC_RX_FRM_FLT);
+}
+
+static void sun8i_dwmac_flow_ctrl(struct mac_device_info *hw,
+				  unsigned int duplex, unsigned int fc,
+				  unsigned int pause_time, u32 tx_cnt)
+{
+	void __iomem *ioaddr = hw->pcsr;
+	u32 v;
+
+	v = readl(ioaddr + EMAC_RX_CTL0);
+	if (fc == FLOW_AUTO)
+		v |= EMAC_RX_FLOW_CTL_EN;
+	else
+		v &= ~EMAC_RX_FLOW_CTL_EN;
+	writel(v, ioaddr + EMAC_RX_CTL0);
+
+	v = readl(ioaddr + EMAC_TX_FLOW_CTL);
+	if (fc == FLOW_AUTO)
+		v |= EMAC_TX_FLOW_CTL_EN;
+	else
+		v &= ~EMAC_TX_FLOW_CTL_EN;
+	writel(v, ioaddr + EMAC_TX_FLOW_CTL);
+}
+
+static int sun8i_dwmac_reset(struct stmmac_priv *priv)
+{
+	u32 v;
+	int err;
+
+	v = readl(priv->ioaddr + EMAC_BASIC_CTL1);
+	writel(v | 0x01, priv->ioaddr + EMAC_BASIC_CTL1);
+
+	err = readl_poll_timeout(priv->ioaddr + EMAC_BASIC_CTL1, v,
+				 !(v & 0x01), 100, 10000);
+
+	if (err) {
+		dev_err(priv->device, "EMAC reset timeout\n");
+		return -EFAULT;
+	}
+	return 0;
+}
+
+static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
+{
+	struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
+	struct device_node *node = priv->device->of_node;
+	int ret;
+	u32 reg, val;
+
+	regmap_read(gmac->regmap, SYSCON_EMAC_REG, &val);
+	reg = gmac->variant->default_syscon_value;
+	if (reg != val)
+		dev_warn(priv->device,
+			 "Current syscon value is not the default %x (expect %x)\n",
+			 val, reg);
+
+	if (gmac->variant->internal_phy) {
+		if (!gmac->use_internal_phy) {
+			/* switch to external PHY interface */
+			reg &= ~H3_EPHY_SELECT;
+		} else {
+			reg |= H3_EPHY_SELECT;
+			reg &= ~H3_EPHY_SHUTDOWN;
+			dev_dbg(priv->device, "Select internal_phy %x\n", reg);
+
+			if (of_property_read_bool(priv->plat->phy_node,
+						  "allwinner,leds-active-low"))
+				reg |= H3_EPHY_LED_POL;
+			else
+				reg &= ~H3_EPHY_LED_POL;
+
+			ret = of_mdio_parse_addr(priv->device,
+						 priv->plat->phy_node);
+			if (ret < 0) {
+				dev_err(priv->device, "Could not parse MDIO addr\n");
+				return ret;
+			}
+			/* of_mdio_parse_addr returns a valid (0 ~ 31) PHY
+			 * address. No need to mask it again.
+			 */
+			reg |= ret << H3_EPHY_ADDR_SHIFT;
+		}
+	}
+
+	if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {
+		if (val % 100) {
+			dev_err(priv->device, "tx-delay must be a multiple of 100\n");
+			return -EINVAL;
+		}
+		val /= 100;
+		dev_dbg(priv->device, "set tx-delay to %x\n", val);
+		if (val <= SYSCON_ETXDC_MASK) {
+			reg &= ~(SYSCON_ETXDC_MASK << SYSCON_ETXDC_SHIFT);
+			reg |= (val << SYSCON_ETXDC_SHIFT);
+		} else {
+			dev_err(priv->device, "Invalid TX clock delay: %d\n",
+				val);
+			return -EINVAL;
+		}
+	}
+
+	if (!of_property_read_u32(node, "allwinner,rx-delay-ps", &val)) {
+		if (val % 100) {
+			dev_err(priv->device, "rx-delay must be a multiple of 100\n");
+			return -EINVAL;
+		}
+		val /= 100;
+		dev_dbg(priv->device, "set rx-delay to %x\n", val);
+		if (val <= SYSCON_ERXDC_MASK) {
+			reg &= ~(SYSCON_ERXDC_MASK << SYSCON_ERXDC_SHIFT);
+			reg |= (val << SYSCON_ERXDC_SHIFT);
+		} else {
+			dev_err(priv->device, "Invalid RX clock delay: %d\n",
+				val);
+			return -EINVAL;
+		}
+	}
+
+	/* Clear interface mode bits */
+	reg &= ~(SYSCON_ETCS_MASK | SYSCON_EPIT);
+	if (gmac->variant->support_rmii)
+		reg &= ~SYSCON_RMII_EN;
+
+	switch (priv->plat->interface) {
+	case PHY_INTERFACE_MODE_MII:
+		/* default */
+		break;
+	case PHY_INTERFACE_MODE_RGMII:
+		reg |= SYSCON_EPIT | SYSCON_ETCS_INT_GMII;
+		break;
+	case PHY_INTERFACE_MODE_RMII:
+		reg |= SYSCON_RMII_EN | SYSCON_ETCS_EXT_GMII;
+		break;
+	default:
+		dev_err(priv->device, "Unsupported interface mode: %s",
+			phy_modes(priv->plat->interface));
+		return -EINVAL;
+	}
+
+	regmap_write(gmac->regmap, SYSCON_EMAC_REG, reg);
+
+	return 0;
+}
+
+static void sun8i_dwmac_unset_syscon(struct sunxi_priv_data *gmac)
+{
+	u32 reg = gmac->variant->default_syscon_value;
+
+	regmap_write(gmac->regmap, SYSCON_EMAC_REG, reg);
+}
+
+static int sun8i_dwmac_power_internal_phy(struct stmmac_priv *priv)
+{
+	struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
+	int ret;
+
+	if (!gmac->use_internal_phy)
+		return 0;
+
+	ret = clk_prepare_enable(gmac->ephy_clk);
+	if (ret) {
+		dev_err(priv->device, "Cannot enable ephy\n");
+		return ret;
+	}
+
+	ret = reset_control_deassert(gmac->rst_ephy);
+	if (ret) {
+		dev_err(priv->device, "Cannot deassert ephy\n");
+		clk_disable_unprepare(gmac->ephy_clk);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
+{
+	if (!gmac->use_internal_phy)
+		return 0;
+
+	clk_disable_unprepare(gmac->ephy_clk);
+	reset_control_assert(gmac->rst_ephy);
+	return 0;
+}
+
+static int sun8i_power_phy(struct stmmac_priv *priv)
+{
+	struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
+	int ret;
+
+	ret = sun8i_dwmac_power_internal_phy(priv);
+	if (ret)
+		return ret;
+
+	ret = sun8i_dwmac_set_syscon(priv);
+	if (ret)
+		goto error_phy;
+
+	ret = sun8i_dwmac_reset(priv);
+	if (ret)
+		goto error_phy;
+	return 0;
+
+error_phy:
+	sun8i_dwmac_unset_syscon(gmac);
+	sun8i_dwmac_unpower_internal_phy(gmac);
+	return ret;
+}
+
+static void sun8i_unpower_phy(struct sunxi_priv_data *gmac)
+{
+	sun8i_dwmac_unset_syscon(gmac);
+	sun8i_dwmac_unpower_internal_phy(gmac);
+}
+
+static void sun8i_dwmac_exit(struct platform_device *pdev, void *priv)
+{
+	struct sunxi_priv_data *gmac = priv;
+
+	sun8i_unpower_phy(gmac);
+
+	clk_disable_unprepare(gmac->tx_clk);
+
+	if (gmac->regulator)
+		regulator_disable(gmac->regulator);
+}
+
+static const struct stmmac_ops sun8i_dwmac_ops = {
+	.core_init = sun8i_dwmac_core_init,
+	.set_mac = sun8i_dwmac_set_mac,
+	.dump_regs = sun8i_dwmac_dump_mac_regs,
+	.rx_ipc = sun8i_dwmac_rx_ipc_enable,
+	.set_filter = sun8i_dwmac_set_filter,
+	.flow_ctrl = sun8i_dwmac_flow_ctrl,
+	.set_umac_addr = sun8i_dwmac_set_umac_addr,
+	.get_umac_addr = sun8i_dwmac_get_umac_addr,
+};
+
+static struct mac_device_info *sun8i_dwmac_setup(void *ppriv)
+{
+	struct mac_device_info *mac;
+	struct stmmac_priv *priv = ppriv;
+	int ret;
+
+	mac = devm_kzalloc(priv->device, sizeof(*mac), GFP_KERNEL);
+	if (!mac)
+		return NULL;
+
+	ret = sun8i_power_phy(priv);
+	if (ret)
+		return NULL;
+
+	mac->pcsr = priv->ioaddr;
+	mac->mac = &sun8i_dwmac_ops;
+	mac->dma = &sun8i_dwmac_dma_ops;
+
+	mac->link.port = 0;
+	mac->link.duplex = BIT(0);
+	mac->link.speed = 1;
+	mac->mii.addr = EMAC_MDIO_CMD;
+	mac->mii.data = EMAC_MDIO_DATA;
+	mac->mii.reg_shift = 4;
+	mac->mii.reg_mask = GENMASK(8, 4);
+	mac->mii.addr_shift = 12;
+	mac->mii.addr_mask = GENMASK(16, 12);
+	mac->mii.clk_csr_shift = 20;
+	mac->mii.clk_csr_mask = GENMASK(22, 20);
+	mac->unicast_filter_entries = 8;
+
+	/* Synopsys Id is not available */
+	priv->synopsys_id = 0;
+
+	return mac;
+}
+
+static int sun8i_dwmac_probe(struct platform_device *pdev)
+{
+	struct plat_stmmacenet_data *plat_dat;
+	struct stmmac_resources stmmac_res;
+	struct sunxi_priv_data *gmac;
+	struct device *dev = &pdev->dev;
+	int ret;
+
+	ret = stmmac_get_platform_resources(pdev, &stmmac_res);
+	if (ret)
+		return ret;
+
+	plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
+	if (IS_ERR(plat_dat))
+		return PTR_ERR(plat_dat);
+
+	gmac = devm_kzalloc(dev, sizeof(*gmac), GFP_KERNEL);
+	if (!gmac)
+		return -ENOMEM;
+
+	gmac->variant = of_device_get_match_data(&pdev->dev);
+	if (!gmac->variant) {
+		dev_err(&pdev->dev, "Missing dwmac-sun8i variant\n");
+		return -EINVAL;
+	}
+
+	gmac->tx_clk = devm_clk_get(dev, "stmmaceth");
+	if (IS_ERR(gmac->tx_clk)) {
+		dev_err(dev, "Could not get TX clock\n");
+		return PTR_ERR(gmac->tx_clk);
+	}
+
+	/* Optional regulator for PHY */
+	gmac->regulator = devm_regulator_get_optional(dev, "phy");
+	if (IS_ERR(gmac->regulator)) {
+		if (PTR_ERR(gmac->regulator) == -EPROBE_DEFER)
+			return -EPROBE_DEFER;
+		dev_info(dev, "No regulator found\n");
+		gmac->regulator = NULL;
+	}
+
+	gmac->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
+						       "syscon");
+	if (IS_ERR(gmac->regmap)) {
+		ret = PTR_ERR(gmac->regmap);
+		dev_err(&pdev->dev, "Unable to map syscon: %d\n", ret);
+		return ret;
+	}
+
+	plat_dat->interface = of_get_phy_mode(dev->of_node);
+	if (plat_dat->interface == gmac->variant->internal_phy) {
+		dev_info(&pdev->dev, "Will use internal PHY\n");
+		gmac->use_internal_phy = true;
+		gmac->ephy_clk = of_clk_get(plat_dat->phy_node, 0);
+		if (IS_ERR(gmac->ephy_clk)) {
+			ret = PTR_ERR(gmac->ephy_clk);
+			dev_err(&pdev->dev, "Cannot get EPHY clock: %d\n", ret);
+			return -EINVAL;
+		}
+
+		gmac->rst_ephy = of_reset_control_get(plat_dat->phy_node, NULL);
+		if (IS_ERR(gmac->rst_ephy)) {
+			ret = PTR_ERR(gmac->rst_ephy);
+			if (ret == -EPROBE_DEFER)
+				return ret;
+			dev_err(&pdev->dev, "No EPHY reset control found %d\n",
+				ret);
+			return -EINVAL;
+		}
+	} else {
+		dev_info(&pdev->dev, "Will use external PHY\n");
+		gmac->use_internal_phy = false;
+	}
+
+	/* platform data specifying hardware features and callbacks.
+	 * hardware features were copied from Allwinner drivers.
+	 */
+	plat_dat->rx_coe = STMMAC_RX_COE_TYPE2;
+	plat_dat->tx_coe = 1;
+	plat_dat->has_sun8i = true;
+	plat_dat->bsp_priv = gmac;
+	plat_dat->init = sun8i_dwmac_init;
+	plat_dat->exit = sun8i_dwmac_exit;
+	plat_dat->setup = sun8i_dwmac_setup;
+
+	ret = sun8i_dwmac_init(pdev, plat_dat->bsp_priv);
+	if (ret)
+		return ret;
+
+	ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
+	if (ret)
+		sun8i_dwmac_exit(pdev, plat_dat->bsp_priv);
+
+	return ret;
+}
+
+static const struct of_device_id sun8i_dwmac_match[] = {
+	{ .compatible = "allwinner,sun8i-h3-emac",
+		.data = &emac_variant_h3 },
+	{ .compatible = "allwinner,sun8i-a83t-emac",
+		.data = &emac_variant_a83t },
+	{ .compatible = "allwinner,sun50i-a64-emac",
+		.data = &emac_variant_a64 },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, sun8i_dwmac_match);
+
+static struct platform_driver sun8i_dwmac_driver = {
+	.probe  = sun8i_dwmac_probe,
+	.remove = stmmac_pltfr_remove,
+	.driver = {
+		.name           = "dwmac-sun8i",
+		.pm		= &stmmac_pltfr_pm_ops,
+		.of_match_table = sun8i_dwmac_match,
+	},
+};
+module_platform_driver(sun8i_dwmac_driver);
+
+MODULE_AUTHOR("Corentin Labbe <clabbe.montjoie@gmail.com>");
+MODULE_DESCRIPTION("Allwinner sun8i DWMAC specific glue layer");
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index b82ab64..39777a7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -235,6 +235,17 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
 		else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
 			priv->clk_csr = STMMAC_CSR_250_300M;
 	}
+
+	if (priv->plat->has_sun8i) {
+		if (clk_rate > 160000000)
+			priv->clk_csr = 0x03;
+		else if (clk_rate > 80000000)
+			priv->clk_csr = 0x02;
+		else if (clk_rate > 40000000)
+			priv->clk_csr = 0x01;
+		else
+			priv->clk_csr = 0;
+	}
 }
 
 static void print_pkt(unsigned char *buf, int len)
@@ -784,6 +795,14 @@ static void stmmac_adjust_link(struct net_device *dev)
 	if (phydev->link) {
 		u32 ctrl = readl(priv->ioaddr + MAC_CTRL_REG);
 
+		/* dwmac-sun8i handle loopback in MAC_CTRL_REG */
+		if (priv->plat->has_sun8i) {
+			if (dev->features & NETIF_F_LOOPBACK)
+				ctrl |= BIT(1);
+			else
+				ctrl &= ~BIT(1);
+		}
+
 		/* Now we make sure that we can be in full duplex mode.
 		 * If not, we operate in half-duplex mode. */
 		if (phydev->duplex != priv->oldduplex) {
@@ -800,6 +819,8 @@ static void stmmac_adjust_link(struct net_device *dev)
 
 		if (phydev->speed != priv->speed) {
 			new_state = 1;
+			if (priv->plat->has_sun8i)
+				ctrl &= ~GENMASK(3, 2);
 			switch (phydev->speed) {
 			case 1000:
 				if (priv->plat->has_gmac ||
@@ -811,6 +832,8 @@ static void stmmac_adjust_link(struct net_device *dev)
 				    priv->plat->has_gmac4) {
 					ctrl |= priv->hw->link.port;
 					ctrl |= priv->hw->link.speed;
+				} else if (priv->plat->has_sun8i) {
+					ctrl |= 3 << 2;
 				} else {
 					ctrl &= ~priv->hw->link.port;
 				}
@@ -820,6 +843,8 @@ static void stmmac_adjust_link(struct net_device *dev)
 				    priv->plat->has_gmac4) {
 					ctrl |= priv->hw->link.port;
 					ctrl &= ~(priv->hw->link.speed);
+				} else if (priv->plat->has_sun8i) {
+					ctrl |= 2 << 2;
 				} else {
 					ctrl &= ~priv->hw->link.port;
 				}
@@ -3969,6 +3994,10 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
 
 	priv->hw = mac;
 
+	/* dwmac-sun8i only work in chain mode */
+	if (priv->plat->has_sun8i)
+		chain_mode = 1;
+
 	/* To use the chained or ring mode */
 	if (priv->synopsys_id >= DWMAC_CORE_4_00) {
 		priv->hw->mode = &dwmac4_ring_mode_ops;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index 7fc3a1e..3840529 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -309,6 +309,12 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
 			 struct device_node *np, struct device *dev)
 {
 	bool mdio = true;
+	static const struct of_device_id need_mdio_ids[] = {
+		{ .compatible = "snps,dwc-qos-ethernet-4.10" },
+		{ .compatible = "allwinner,sun8i-a83t-emac" },
+		{ .compatible = "allwinner,sun8i-h3-emac" },
+		{ .compatible = "allwinner,sun50i-a64-emac" },
+	};
 
 	/* If phy-handle property is passed from DT, use it as the PHY */
 	plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
@@ -325,8 +331,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
 		mdio = false;
 	}
 
-	/* exception for dwmac-dwc-qos-eth glue logic */
-	if (of_device_is_compatible(np, "snps,dwc-qos-ethernet-4.10")) {
+	if (of_match_node(need_mdio_ids, np)) {
 		plat->mdio_node = of_get_child_by_name(np, "mdio");
 	} else {
 		/**
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index 8bb550b..108739f 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -186,6 +186,7 @@ struct plat_stmmacenet_data {
 	struct reset_control *stmmac_rst;
 	struct stmmac_axi *axi;
 	int has_gmac4;
+	bool has_sun8i;
 	bool tso_en;
 	int mac_port_sel_speed;
 	bool en_tx_lpi_clockgating;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 04/20] dt-bindings: syscon: Add DT bindings documentation for Allwinner syscon
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

This patch adds documentation for Device-Tree bindings for the
syscon present in allwinner devices.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 .../devicetree/bindings/misc/allwinner,syscon.txt     | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/misc/allwinner,syscon.txt

diff --git a/Documentation/devicetree/bindings/misc/allwinner,syscon.txt b/Documentation/devicetree/bindings/misc/allwinner,syscon.txt
new file mode 100644
index 0000000..cb57691
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/allwinner,syscon.txt
@@ -0,0 +1,19 @@
+* Allwinner sun8i system controller
+
+This file describes the bindings for the system controller present in
+Allwinner SoC H3, A83T and A64.
+The principal function of this syscon is to control EMAC PHY choice and
+config.
+
+Required properties for the system controller:
+- reg: address and length of the register for the device.
+- compatible: should be "syscon" and one of the following string:
+		"allwinner,sun8i-h3-system-controller"
+		"allwinner,sun50i-a64-system-controller"
+		"allwinner,sun8i-a83t-system-controller"
+
+Example:
+syscon: syscon at 1c00000 {
+	compatible = "allwinner,sun8i-h3-system-controller", "syscon";
+	reg = <0x01c00000 0x1000>;
+};
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 03/20] dt-bindings: net: Add DT bindings documentation for Allwinner dwmac-sun8i
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

This patch adds documentation for Device-Tree bindings for the
Allwinner dwmac-sun8i driver.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
---
 .../devicetree/bindings/net/dwmac-sun8i.txt        | 77 ++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/dwmac-sun8i.txt

diff --git a/Documentation/devicetree/bindings/net/dwmac-sun8i.txt b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
new file mode 100644
index 0000000..05cd067
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
@@ -0,0 +1,77 @@
+* Allwinner sun8i GMAC ethernet controller
+
+This device is a platform glue layer for stmmac.
+Please see stmmac.txt for the other unchanged properties.
+
+Required properties:
+- compatible: should be one of the following string:
+		"allwinner,sun8i-a83t-emac"
+		"allwinner,sun8i-h3-emac"
+		"allwinner,sun50i-a64-emac"
+- reg: address and length of the register for the device.
+- interrupts: interrupt for the device
+- interrupt-names: should be "macirq"
+- clocks: A phandle to the reference clock for this device
+- clock-names: should be "stmmaceth"
+- resets: A phandle to the reset control for this device
+- reset-names: should be "stmmaceth"
+- phy-mode: See ethernet.txt
+- phy-handle: See ethernet.txt
+- #address-cells: shall be 1
+- #size-cells: shall be 0
+- syscon: A phandle to the syscon of the SoC with one of the following
+ compatible string:
+  - allwinner,sun8i-h3-system-controller
+  - allwinner,sun50i-a64-system-controller
+  - allwinner,sun8i-a83t-system-controller
+
+Optional properties:
+- allwinner,tx-delay-ps: TX clock delay chain value in ps. Range value is 0-700. Default is 0)
+- allwinner,rx-delay-ps: RX clock delay chain value in ps. Range value is 0-3100. Default is 0)
+Both delay properties need to be a multiple of 100.
+
+Optional properties for "allwinner,sun8i-h3-emac":
+- allwinner,leds-active-low: EPHY LEDs are active low
+
+Required child node of emac:
+- mdio bus node: should be named mdio
+
+Required properties of the mdio node:
+- #address-cells: shall be 1
+- #size-cells: shall be 0
+
+The device node referenced by "phy" or "phy-handle" should be a child node
+of the mdio node. See phy.txt for the generic PHY bindings.
+
+Required properties of the phy node with "allwinner,sun8i-h3-emac":
+- clocks: a phandle to the reference clock for the EPHY
+- resets: a phandle to the reset control for the EPHY
+
+Example:
+
+emac: ethernet at 1c0b000 {
+	compatible = "allwinner,sun8i-h3-emac";
+	syscon = <&syscon>;
+	reg = <0x01c0b000 0x104>;
+	interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
+	interrupt-names = "macirq";
+	resets = <&ccu RST_BUS_EMAC>;
+	reset-names = "stmmaceth";
+	clocks = <&ccu CLK_BUS_EMAC>;
+	clock-names = "stmmaceth";
+	#address-cells = <1>;
+	#size-cells = <0>;
+
+	phy = <&int_mii_phy>;
+	phy-mode = "mii";
+	allwinner,leds-active-low;
+	mdio: mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		int_mii_phy: ethernet-phy at 1 {
+			reg = <1>;
+			clocks = <&ccu CLK_BUS_EPHY>;
+			resets = <&ccu RST_BUS_EPHY>;
+		};
+	};
+};
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 02/20] net: stmmac: add optional setup function
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

Instead of adding more ifthen logic for adding a new mac_device_info
setup function, it is easier to add a function pointer to the function
needed.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++-
 include/linux/stmmac.h                            | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index cd8c601..b82ab64 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -3947,7 +3947,9 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
 	struct mac_device_info *mac;
 
 	/* Identify the MAC HW device */
-	if (priv->plat->has_gmac) {
+	if (priv->plat->setup) {
+		mac = priv->plat->setup(priv);
+	} else if (priv->plat->has_gmac) {
 		priv->dev->priv_flags |= IFF_UNICAST_FLT;
 		mac = dwmac1000_setup(priv->ioaddr,
 				      priv->plat->multicast_filter_bins,
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index 3921cb9..8bb550b 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -177,6 +177,7 @@ struct plat_stmmacenet_data {
 	void (*fix_mac_speed)(void *priv, unsigned int speed);
 	int (*init)(struct platform_device *pdev, void *priv);
 	void (*exit)(struct platform_device *pdev, void *priv);
+	struct mac_device_info *(*setup)(void *priv);
 	void *bsp_priv;
 	struct clk *stmmac_clk;
 	struct clk *pclk;
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 01/20] net: stmmac: export stmmac_set_mac_addr/stmmac_get_mac_addr
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501124520.3769-1-clabbe.montjoie@gmail.com>

Thoses symbol will be needed for the dwmac-sun8i ethernet driver.
For letting it to be build as module, they need to be exported.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
 drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
index 38f9430..67af0bd 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
@@ -248,6 +248,7 @@ void stmmac_set_mac_addr(void __iomem *ioaddr, u8 addr[6],
 	data = (addr[3] << 24) | (addr[2] << 16) | (addr[1] << 8) | addr[0];
 	writel(data, ioaddr + low);
 }
+EXPORT_SYMBOL_GPL(stmmac_set_mac_addr);
 
 /* Enable disable MAC RX/TX */
 void stmmac_set_mac(void __iomem *ioaddr, bool enable)
@@ -279,4 +280,4 @@ void stmmac_get_mac_addr(void __iomem *ioaddr, unsigned char *addr,
 	addr[4] = hi_addr & 0xff;
 	addr[5] = (hi_addr >> 8) & 0xff;
 }
-
+EXPORT_SYMBOL_GPL(stmmac_get_mac_addr);
-- 
2.10.2

^ permalink raw reply related

* [PATCH v5 00/20] net-next: stmmac: add dwmac-sun8i ethernet driver
From: Corentin Labbe @ 2017-05-01 12:45 UTC (permalink / raw)
  To: linux-arm-kernel

Hello

This patch series add the driver for dwmac-sun8i which handle the Ethernet MAC
present on Allwinner H3/H5/A83T/A64 SoCs.

This driver is the continuation of the sun8i-emac driver.
During the development, it appeared that in fact the hardware was a modified
version of some dwmac.
So the driver is now written as a glue driver for stmmac.

It supports 10/100/1000 Mbit/s speed with half/full duplex.
It can use an internal PHY (MII 10/100) or an external PHY
via RGMII/RMII.

This patch series enable the driver only for the H3/A64/H5 SoC since A83T
doesn't have the necessary clocks present in mainline.

The driver have been tested on the following boards:
- H3 Orange PI PC, BananaPI-M2+
- A64 Pine64, BananaPi-M64
- A83T BananaPI-M3

The first two patchs are some mandatory changes for letting dwmac-sun8i be used.
The following three patchs add the driver and its documentation.
The remaining are DT patch enabling it.

Regards
Corentin Labbe

Changes since v4:
- Re-ordered by alphabetical order some DT nodes
- Fixed arm64 patch prefix
- Simplified power/unpower_phy functions by testing the use of internal_phy
- Added a patch for adding dwmac-sun8i to arm64 defconfig
- Fix a typo in sun50i-a64-system-controller (wrongly used sun8i)
- Reworked uc/mc filter address setting

Changes since v3:
- Renamed tx-delay/rx-delay to tx-delay-ps/rx-delay-ps
- fix syscon compatible example
- Changed parameter type for setup() function
- Dropped some DT patchs for boards which I could not test further

Changes since v2:
- corrected order of syscon compatible
- added compatible = "ethernet-phy-ieee802.3-c22 to PHY
- added set_mac function

Changes since v1:
- added TX/RX delay units
- splitted syscon documentation in its own patch
- regulator is now disabled after clk_prepare_enable(gmac->tx_clk) error
- Fixed a memory leak on mac_device_info
- Use now generic pin config for all DT stuff
- CONFIG_DWMAC_SUN8I is now set to y in defconfigs

Corentin Labbe (20):
  net: stmmac: export stmmac_set_mac_addr/stmmac_get_mac_addr
  net: stmmac: add optional setup function
  dt-bindings: net: Add DT bindings documentation for Allwinner
    dwmac-sun8i
  dt-bindings: syscon: Add DT bindings documentation for Allwinner
    syscon
  net: stmmac: Add dwmac-sun8i
  arm: sun8i: sunxi-h3-h5: Add dt node for the syscon control module
  arm: sun8i: sunxi-h3-h5: add dwmac-sun8i ethernet driver
  arm: sun8i: orangepi-pc: Enable dwmac-sun8i
  arm: sun8i: orangepi-zero: Enable dwmac-sun8i
  arm: sun8i: orangepi-one: Enable dwmac-sun8i
  arm: sun8i: orangepi-2: Enable dwmac-sun8i
  arm: sun8i: orangepi-pc-plus: Set EMAC activity LEDs to active high
  arm64: allwinner: sun50i-a64: Add dt node for the syscon control
    module
  arm64: allwinner: sun50i-a64: add dwmac-sun8i Ethernet driver
  arm64: allwinner: pine64: Enable dwmac-sun8i
  arm64: allwinner: pine64-plus: Enable dwmac-sun8i
  arm64: allwinner: bananapi-m64: Enable dwmac-sun8i
  arm: sunxi: Enable dwmac-sun8i driver on sunxi_defconfig
  arm: multi_v7: Enable dwmac-sun8i driver on multi_v7_defconfig
  arm64: defconfig: Enable dwmac-sun8i driver on defconfig

 .../devicetree/bindings/misc/allwinner,syscon.txt  |  19 +
 .../devicetree/bindings/net/dwmac-sun8i.txt        |  77 ++
 arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts  |   8 +
 arch/arm/boot/dts/sun8i-h3-orangepi-2.dts          |   8 +
 arch/arm/boot/dts/sun8i-h3-orangepi-one.dts        |   8 +
 arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts    |   5 +
 arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts         |   8 +
 arch/arm/boot/dts/sunxi-h3-h5.dtsi                 |  40 +
 arch/arm/configs/multi_v7_defconfig                |   1 +
 arch/arm/configs/sunxi_defconfig                   |   1 +
 .../boot/dts/allwinner/sun50i-a64-bananapi-m64.dts |  15 +
 .../boot/dts/allwinner/sun50i-a64-pine64-plus.dts  |  17 +-
 .../arm64/boot/dts/allwinner/sun50i-a64-pine64.dts |  16 +
 arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi      |  41 +
 arch/arm64/configs/defconfig                       |   1 +
 drivers/net/ethernet/stmicro/stmmac/Kconfig        |  11 +
 drivers/net/ethernet/stmicro/stmmac/Makefile       |   1 +
 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c  | 973 +++++++++++++++++++++
 drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c    |   3 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  |  33 +-
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   9 +-
 include/linux/stmmac.h                             |   2 +
 22 files changed, 1292 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/misc/allwinner,syscon.txt
 create mode 100644 Documentation/devicetree/bindings/net/dwmac-sun8i.txt
 create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c

-- 
2.10.2

^ permalink raw reply

* [PATCH v6 2/6] power: supply: add battery driver for AXP20X and AXP22X PMICs
From: Sebastian Reichel @ 2017-05-01 11:30 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170418073421.31351-3-quentin.schulz@free-electrons.com>

Hi,

On Tue, Apr 18, 2017 at 09:34:17AM +0200, Quentin Schulz wrote:
> The X-Powers AXP20X and AXP22X PMICs can have a battery as power supply.
> 
> This patch adds the battery power supply driver to get various data from
> the PMIC, such as the battery status (charging, discharging, full,
> dead), current max limit, current current, battery capacity (in
> percentage), voltage max and min limits, current voltage and battery
> capacity (in Ah).
> 
> This battery driver uses the AXP20X/AXP22X ADC driver as PMIC data
> provider.
> 
> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
> Acked-by: Jonathan Cameron <jic23@kernel.org>
> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> Acked-by: Chen-Yu Tsai <wens@csie.org>
> Acked-by: Sebastian Reichel <sre@kernel.org>

Thanks, queued.

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170501/9eedd794/attachment.sig>

^ permalink raw reply

* [PATCH v6 1/6] dt-bindings: power: supply: add AXP20X/AXP22X battery DT binding
From: Sebastian Reichel @ 2017-05-01 11:29 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170418073421.31351-2-quentin.schulz@free-electrons.com>

Hi,

On Tue, Apr 18, 2017 at 09:34:16AM +0200, Quentin Schulz wrote:
> The X-Powers AXP20X and AXP22X PMICs can have a battery as power supply.
> 
> This patch adds the DT binding documentation for the battery power
> supply which gets various data from the PMIC, such as the battery status
> (charging, discharging, full, dead), current max limit, current current,
> battery capacity (in percentage), voltage max and min limits, current
> voltage and battery capacity (in Ah).
> 
> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
> Acked-by: Chen-Yu Tsai <wens@csie.org>
> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>

Thanks, queued.

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170501/76770926/attachment.sig>

^ permalink raw reply

* [PATCH v2 0/5] arm64: dts: renesas: Break out common board support
From: Simon Horman @ 2017-05-01  9:11 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1493384324-29344-1-git-send-email-geert+renesas@glider.be>

On Fri, Apr 28, 2017 at 02:58:39PM +0200, Geert Uytterhoeven wrote:
> 	Hi Simon, Magnus,
> 
> The Renesas Salvator-X and ULCB development board can be equipped with
> either an R-Car H3 or M3-W SiP, which are pin-compatible.  All boards
> use separate DTBs, but currently there's no sharing of board-specific
> devices in DTS.
> 
> This series reduces duplication by extracting common board support into
> their own .dtsi files.  As the level of support varies across boards and
> SoCs, this requires the addition of a few external clocks and
> placeholder devices on R-Car M3-W, so the common board support DTS can
> refer to them.
> 
>   - Patches 1 and 2 add the external audio and PCIe bus clocks on R-Car
>     M3-W, which are present in r8a7795.dtsi, and used in
>     r8a7795-salvator-x.dts,
>   - Patch 3 adds placeholders for devices that are not yet supported
>     and/or tested on R-Car M3-W, but used on R-Car H3,
>   - Patch 4 extracts common Salvator-X board support,
>   - Patch 5 extracts common ULCB board support.
> 
> For R-Car H3 based boards, there are no functional changes.
> For R-Car M3-W based boards, some new devices are now described in DT.
> 
> Compared to v1, the most important change is a rebase to remove the
> dependency on "[PATCH 0/8] arm64: dts: renesas: Break out R-Car H3 and
> M3-W SiP" (http://www.spinics.net/lists/devicetree/msg173820.html).
> Please refer to the individual patches for more changelog information.
> 
> Dependencies:
>   - renesas-devel-20170428-v4.11-rc8.
> 
> DTB changes have been inspected using scripts/dtc/dtx_diff.
> This has been tested on Salvator-X (both H3 and M3-W), H3ULCB, and
> M3ULCB.
> 
> Thanks for applying!

Thanks, done.

^ permalink raw reply

* [PATCH v3] pinctrl: mediatek: reuse pinctrl driver for mt7623
From: John Crispin @ 2017-05-01  8:10 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1493625274-3909-1-git-send-email-sean.wang@mediatek.com>



On 01/05/17 09:54, sean.wang at mediatek.com wrote:
> From: Sean Wang <sean.wang@mediatek.com>
>
> mt7623 pinctrl hardware can be compatible with mt2701 driver,
> so the patch lets the pinctrl on mt7623 SoC reuse the driver
> and deletes those redundant ones.
>
> Cc: John Crispin <john@phrozen.org>
> Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Acked-by: John Crispin <john@phrozen.org>

Thanks !

> ---
>   drivers/pinctrl/mediatek/Kconfig              |    9 +-
>   drivers/pinctrl/mediatek/Makefile             |    1 -
>   drivers/pinctrl/mediatek/pinctrl-mt2701.c     |    1 +
>   drivers/pinctrl/mediatek/pinctrl-mt7623.c     |  379 -----
>   drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h | 1936 -------------------------
>   5 files changed, 2 insertions(+), 2324 deletions(-)
>   delete mode 100644 drivers/pinctrl/mediatek/pinctrl-mt7623.c
>   delete mode 100644 drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h
>
> diff --git a/drivers/pinctrl/mediatek/Kconfig b/drivers/pinctrl/mediatek/Kconfig
> index 80fe3b4..fac9866 100644
> --- a/drivers/pinctrl/mediatek/Kconfig
> +++ b/drivers/pinctrl/mediatek/Kconfig
> @@ -11,18 +11,11 @@ config PINCTRL_MTK
>   # For ARMv7 SoCs
>   config PINCTRL_MT2701
>   	bool "Mediatek MT2701 pin control"
> -	depends on MACH_MT2701 || COMPILE_TEST
> +	depends on MACH_MT7623 || MACH_MT2701 || COMPILE_TEST
>   	depends on OF
>   	default MACH_MT2701
>   	select PINCTRL_MTK
>   
> -config PINCTRL_MT7623
> -	bool "Mediatek MT7623 pin control"
> -	depends on MACH_MT7623 || COMPILE_TEST
> -	depends on OF
> -	default MACH_MT7623
> -	select PINCTRL_MTK_COMMON
> -
>   config PINCTRL_MT8135
>   	bool "Mediatek MT8135 pin control"
>   	depends on MACH_MT8135 || COMPILE_TEST
> diff --git a/drivers/pinctrl/mediatek/Makefile b/drivers/pinctrl/mediatek/Makefile
> index 3e3390a..e59c613 100644
> --- a/drivers/pinctrl/mediatek/Makefile
> +++ b/drivers/pinctrl/mediatek/Makefile
> @@ -3,7 +3,6 @@ obj-y				+= pinctrl-mtk-common.o
>   
>   # SoC Drivers
>   obj-$(CONFIG_PINCTRL_MT2701)	+= pinctrl-mt2701.o
> -obj-$(CONFIG_PINCTRL_MT7623)	+= pinctrl-mt7623.o
>   obj-$(CONFIG_PINCTRL_MT8135)	+= pinctrl-mt8135.o
>   obj-$(CONFIG_PINCTRL_MT8127)	+= pinctrl-mt8127.o
>   obj-$(CONFIG_PINCTRL_MT8173)	+= pinctrl-mt8173.o
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
> index 8d802fa..f86f3b3 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
> @@ -565,6 +565,7 @@ static int mt2701_pinctrl_probe(struct platform_device *pdev)
>   
>   static const struct of_device_id mt2701_pctrl_match[] = {
>   	{ .compatible = "mediatek,mt2701-pinctrl", },
> +	{ .compatible = "mediatek,mt7623-pinctrl", },
>   	{}
>   };
>   MODULE_DEVICE_TABLE(of, mt2701_pctrl_match);
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7623.c b/drivers/pinctrl/mediatek/pinctrl-mt7623.c
> deleted file mode 100644
> index fa28dd6..0000000
> --- a/drivers/pinctrl/mediatek/pinctrl-mt7623.c
> +++ /dev/null
> @@ -1,379 +0,0 @@
> -/*
> - * Copyright (c) 2016 John Crispin <john@phrozen.org>
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include <dt-bindings/pinctrl/mt65xx.h>
> -#include <linux/module.h>
> -#include <linux/of.h>
> -#include <linux/of_device.h>
> -#include <linux/platform_device.h>
> -#include <linux/pinctrl/pinctrl.h>
> -#include <linux/regmap.h>
> -
> -#include "pinctrl-mtk-common.h"
> -#include "pinctrl-mtk-mt7623.h"
> -
> -static const struct mtk_drv_group_desc mt7623_drv_grp[] =  {
> -	/* 0E4E8SR 4/8/12/16 */
> -	MTK_DRV_GRP(4, 16, 1, 2, 4),
> -	/* 0E2E4SR  2/4/6/8 */
> -	MTK_DRV_GRP(2, 8, 1, 2, 2),
> -	/* E8E4E2  2/4/6/8/10/12/14/16 */
> -	MTK_DRV_GRP(2, 16, 0, 2, 2)
> -};
> -
> -#define DRV_SEL0	0xf50
> -#define DRV_SEL1	0xf60
> -#define DRV_SEL2	0xf70
> -#define DRV_SEL3	0xf80
> -#define DRV_SEL4	0xf90
> -#define DRV_SEL5	0xfa0
> -#define DRV_SEL6	0xfb0
> -#define DRV_SEL7	0xfe0
> -#define DRV_SEL8	0xfd0
> -#define DRV_SEL9	0xff0
> -#define DRV_SEL10	0xf00
> -
> -#define MSDC0_CTRL0	0xcc0
> -#define MSDC0_CTRL1	0xcd0
> -#define MSDC0_CTRL2	0xce0
> -#define MSDC0_CTRL3	0xcf0
> -#define MSDC0_CTRL4	0xd00
> -#define MSDC0_CTRL5	0xd10
> -#define MSDC0_CTRL6	0xd20
> -#define MSDC1_CTRL0	0xd30
> -#define MSDC1_CTRL1	0xd40
> -#define MSDC1_CTRL2	0xd50
> -#define MSDC1_CTRL3	0xd60
> -#define MSDC1_CTRL4	0xd70
> -#define MSDC1_CTRL5	0xd80
> -#define MSDC1_CTRL6	0xd90
> -
> -#define IES_EN0		0xb20
> -#define IES_EN1		0xb30
> -#define IES_EN2		0xb40
> -
> -#define SMT_EN0		0xb50
> -#define SMT_EN1		0xb60
> -#define SMT_EN2		0xb70
> -
> -static const struct mtk_pin_drv_grp mt7623_pin_drv[] = {
> -	MTK_PIN_DRV_GRP(0, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(1, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(2, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(3, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(4, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(5, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(6, DRV_SEL0, 0, 1),
> -	MTK_PIN_DRV_GRP(7, DRV_SEL0, 4, 1),
> -	MTK_PIN_DRV_GRP(8, DRV_SEL0, 4, 1),
> -	MTK_PIN_DRV_GRP(9, DRV_SEL0, 4, 1),
> -	MTK_PIN_DRV_GRP(10, DRV_SEL0, 8, 1),
> -	MTK_PIN_DRV_GRP(11, DRV_SEL0, 8, 1),
> -	MTK_PIN_DRV_GRP(12, DRV_SEL0, 8, 1),
> -	MTK_PIN_DRV_GRP(13, DRV_SEL0, 8, 1),
> -	MTK_PIN_DRV_GRP(14, DRV_SEL0, 12, 0),
> -	MTK_PIN_DRV_GRP(15, DRV_SEL0, 12, 0),
> -	MTK_PIN_DRV_GRP(18, DRV_SEL1, 4, 0),
> -	MTK_PIN_DRV_GRP(19, DRV_SEL1, 4, 0),
> -	MTK_PIN_DRV_GRP(20, DRV_SEL1, 4, 0),
> -	MTK_PIN_DRV_GRP(21, DRV_SEL1, 4, 0),
> -	MTK_PIN_DRV_GRP(22, DRV_SEL1, 8, 0),
> -	MTK_PIN_DRV_GRP(23, DRV_SEL1, 8, 0),
> -	MTK_PIN_DRV_GRP(24, DRV_SEL1, 8, 0),
> -	MTK_PIN_DRV_GRP(25, DRV_SEL1, 8, 0),
> -	MTK_PIN_DRV_GRP(26, DRV_SEL1, 8, 0),
> -	MTK_PIN_DRV_GRP(27, DRV_SEL1, 12, 0),
> -	MTK_PIN_DRV_GRP(28, DRV_SEL1, 12, 0),
> -	MTK_PIN_DRV_GRP(29, DRV_SEL1, 12, 0),
> -	MTK_PIN_DRV_GRP(33, DRV_SEL2, 0, 0),
> -	MTK_PIN_DRV_GRP(34, DRV_SEL2, 0, 0),
> -	MTK_PIN_DRV_GRP(35, DRV_SEL2, 0, 0),
> -	MTK_PIN_DRV_GRP(36, DRV_SEL2, 0, 0),
> -	MTK_PIN_DRV_GRP(37, DRV_SEL2, 0, 0),
> -	MTK_PIN_DRV_GRP(39, DRV_SEL2, 8, 1),
> -	MTK_PIN_DRV_GRP(40, DRV_SEL2, 8, 1),
> -	MTK_PIN_DRV_GRP(41, DRV_SEL2, 8, 1),
> -	MTK_PIN_DRV_GRP(42, DRV_SEL2, 8, 1),
> -	MTK_PIN_DRV_GRP(43, DRV_SEL2, 12, 0),
> -	MTK_PIN_DRV_GRP(44, DRV_SEL2, 12, 0),
> -	MTK_PIN_DRV_GRP(45, DRV_SEL2, 12, 0),
> -	MTK_PIN_DRV_GRP(47, DRV_SEL3, 0, 0),
> -	MTK_PIN_DRV_GRP(48, DRV_SEL3, 0, 0),
> -	MTK_PIN_DRV_GRP(49, DRV_SEL3, 4, 0),
> -	MTK_PIN_DRV_GRP(53, DRV_SEL3, 12, 0),
> -	MTK_PIN_DRV_GRP(54, DRV_SEL3, 12, 0),
> -	MTK_PIN_DRV_GRP(55, DRV_SEL3, 12, 0),
> -	MTK_PIN_DRV_GRP(56, DRV_SEL3, 12, 0),
> -	MTK_PIN_DRV_GRP(60, DRV_SEL4, 8, 1),
> -	MTK_PIN_DRV_GRP(61, DRV_SEL4, 8, 1),
> -	MTK_PIN_DRV_GRP(62, DRV_SEL4, 8, 1),
> -	MTK_PIN_DRV_GRP(63, DRV_SEL4, 12, 1),
> -	MTK_PIN_DRV_GRP(64, DRV_SEL4, 12, 1),
> -	MTK_PIN_DRV_GRP(65, DRV_SEL4, 12, 1),
> -	MTK_PIN_DRV_GRP(66, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(67, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(68, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(69, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(70, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(71, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(72, DRV_SEL3, 4, 0),
> -	MTK_PIN_DRV_GRP(73, DRV_SEL3, 4, 0),
> -	MTK_PIN_DRV_GRP(74, DRV_SEL3, 4, 0),
> -	MTK_PIN_DRV_GRP(83, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(84, DRV_SEL5, 0, 1),
> -	MTK_PIN_DRV_GRP(105, MSDC1_CTRL1, 0, 1),
> -	MTK_PIN_DRV_GRP(106, MSDC1_CTRL0, 0, 1),
> -	MTK_PIN_DRV_GRP(107, MSDC1_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(108, MSDC1_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(109, MSDC1_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(110, MSDC1_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(111, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(112, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(113, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(114, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(115, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(116, MSDC0_CTRL1, 0, 1),
> -	MTK_PIN_DRV_GRP(117, MSDC0_CTRL0, 0, 1),
> -	MTK_PIN_DRV_GRP(118, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(119, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(120, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(121, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(126, DRV_SEL3, 4, 0),
> -	MTK_PIN_DRV_GRP(199, DRV_SEL0, 4, 1),
> -	MTK_PIN_DRV_GRP(200, DRV_SEL8, 0, 0),
> -	MTK_PIN_DRV_GRP(201, DRV_SEL8, 0, 0),
> -	MTK_PIN_DRV_GRP(203, DRV_SEL8, 4, 0),
> -	MTK_PIN_DRV_GRP(204, DRV_SEL8, 4, 0),
> -	MTK_PIN_DRV_GRP(205, DRV_SEL8, 4, 0),
> -	MTK_PIN_DRV_GRP(206, DRV_SEL8, 4, 0),
> -	MTK_PIN_DRV_GRP(207, DRV_SEL8, 4, 0),
> -	MTK_PIN_DRV_GRP(208, DRV_SEL8, 8, 0),
> -	MTK_PIN_DRV_GRP(209, DRV_SEL8, 8, 0),
> -	MTK_PIN_DRV_GRP(236, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(237, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(238, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(239, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(240, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(241, DRV_SEL9, 4, 0),
> -	MTK_PIN_DRV_GRP(242, DRV_SEL9, 8, 0),
> -	MTK_PIN_DRV_GRP(243, DRV_SEL9, 8, 0),
> -	MTK_PIN_DRV_GRP(257, MSDC0_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(261, MSDC1_CTRL2, 0, 1),
> -	MTK_PIN_DRV_GRP(262, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(263, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(264, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(265, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(266, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(267, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(268, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(269, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(270, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(271, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(272, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(274, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(275, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(276, DRV_SEL10, 8, 0),
> -	MTK_PIN_DRV_GRP(278, DRV_SEL2, 8, 1),
> -};
> -
> -static const struct mtk_pin_spec_pupd_set_samereg mt7623_spec_pupd[] = {
> -	MTK_PIN_PUPD_SPEC_SR(105, MSDC1_CTRL1, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(106, MSDC1_CTRL0, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(107, MSDC1_CTRL3, 0, 1, 2),
> -	MTK_PIN_PUPD_SPEC_SR(108, MSDC1_CTRL3, 4, 5, 6),
> -	MTK_PIN_PUPD_SPEC_SR(109, MSDC1_CTRL3, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(110, MSDC1_CTRL3, 12, 13, 14),
> -	MTK_PIN_PUPD_SPEC_SR(111, MSDC0_CTRL4, 12, 13, 14),
> -	MTK_PIN_PUPD_SPEC_SR(112, MSDC0_CTRL4, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(113, MSDC0_CTRL4, 4, 5, 6),
> -	MTK_PIN_PUPD_SPEC_SR(114, MSDC0_CTRL4, 0, 1, 2),
> -	MTK_PIN_PUPD_SPEC_SR(115, MSDC0_CTRL5, 0, 1, 2),
> -	MTK_PIN_PUPD_SPEC_SR(116, MSDC0_CTRL1, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(117, MSDC0_CTRL0, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(118, MSDC0_CTRL3, 12, 13, 14),
> -	MTK_PIN_PUPD_SPEC_SR(119, MSDC0_CTRL3, 8, 9, 10),
> -	MTK_PIN_PUPD_SPEC_SR(120, MSDC0_CTRL3, 4, 5, 6),
> -	MTK_PIN_PUPD_SPEC_SR(121, MSDC0_CTRL3, 0, 1, 2),
> -};
> -
> -static int mt7623_spec_pull_set(struct regmap *regmap, unsigned int pin,
> -		unsigned char align, bool isup, unsigned int r1r0)
> -{
> -	return mtk_pctrl_spec_pull_set_samereg(regmap, mt7623_spec_pupd,
> -		ARRAY_SIZE(mt7623_spec_pupd), pin, align, isup, r1r0);
> -}
> -
> -static const struct mtk_pin_ies_smt_set mt7623_ies_set[] = {
> -	MTK_PIN_IES_SMT_SPEC(0, 6, IES_EN0, 0),
> -	MTK_PIN_IES_SMT_SPEC(7, 9, IES_EN0, 1),
> -	MTK_PIN_IES_SMT_SPEC(10, 13, IES_EN0, 2),
> -	MTK_PIN_IES_SMT_SPEC(14, 15, IES_EN0, 3),
> -	MTK_PIN_IES_SMT_SPEC(18, 21, IES_EN0, 5),
> -	MTK_PIN_IES_SMT_SPEC(22, 26, IES_EN0, 6),
> -	MTK_PIN_IES_SMT_SPEC(27, 29, IES_EN0, 7),
> -	MTK_PIN_IES_SMT_SPEC(33, 37, IES_EN0, 8),
> -	MTK_PIN_IES_SMT_SPEC(39, 42, IES_EN0, 9),
> -	MTK_PIN_IES_SMT_SPEC(43, 45, IES_EN0, 10),
> -	MTK_PIN_IES_SMT_SPEC(47, 48, IES_EN0, 11),
> -	MTK_PIN_IES_SMT_SPEC(49, 49, IES_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(53, 56, IES_EN0, 14),
> -	MTK_PIN_IES_SMT_SPEC(60, 62, IES_EN1, 0),
> -	MTK_PIN_IES_SMT_SPEC(63, 65, IES_EN1, 1),
> -	MTK_PIN_IES_SMT_SPEC(66, 71, IES_EN1, 2),
> -	MTK_PIN_IES_SMT_SPEC(72, 74, IES_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(75, 76, IES_EN1, 3),
> -	MTK_PIN_IES_SMT_SPEC(83, 84, IES_EN1, 2),
> -	MTK_PIN_IES_SMT_SPEC(105, 121, MSDC1_CTRL1, 4),
> -	MTK_PIN_IES_SMT_SPEC(122, 125, IES_EN1, 7),
> -	MTK_PIN_IES_SMT_SPEC(126, 126, IES_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(199, 201, IES_EN0, 1),
> -	MTK_PIN_IES_SMT_SPEC(203, 207, IES_EN2, 2),
> -	MTK_PIN_IES_SMT_SPEC(208, 209, IES_EN2, 3),
> -	MTK_PIN_IES_SMT_SPEC(236, 241, IES_EN2, 6),
> -	MTK_PIN_IES_SMT_SPEC(242, 243, IES_EN2, 7),
> -	MTK_PIN_IES_SMT_SPEC(261, 261, MSDC1_CTRL2, 4),
> -	MTK_PIN_IES_SMT_SPEC(262, 272, IES_EN2, 12),
> -	MTK_PIN_IES_SMT_SPEC(274, 276, IES_EN2, 12),
> -	MTK_PIN_IES_SMT_SPEC(278, 278, IES_EN2, 13),
> -};
> -
> -static const struct mtk_pin_ies_smt_set mt7623_smt_set[] = {
> -	MTK_PIN_IES_SMT_SPEC(0, 6, SMT_EN0, 0),
> -	MTK_PIN_IES_SMT_SPEC(7, 9, SMT_EN0, 1),
> -	MTK_PIN_IES_SMT_SPEC(10, 13, SMT_EN0, 2),
> -	MTK_PIN_IES_SMT_SPEC(14, 15, SMT_EN0, 3),
> -	MTK_PIN_IES_SMT_SPEC(18, 21, SMT_EN0, 5),
> -	MTK_PIN_IES_SMT_SPEC(22, 26, SMT_EN0, 6),
> -	MTK_PIN_IES_SMT_SPEC(27, 29, SMT_EN0, 7),
> -	MTK_PIN_IES_SMT_SPEC(33, 37, SMT_EN0, 8),
> -	MTK_PIN_IES_SMT_SPEC(39, 42, SMT_EN0, 9),
> -	MTK_PIN_IES_SMT_SPEC(43, 45, SMT_EN0, 10),
> -	MTK_PIN_IES_SMT_SPEC(47, 48, SMT_EN0, 11),
> -	MTK_PIN_IES_SMT_SPEC(49, 49, SMT_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(53, 56, SMT_EN0, 14),
> -	MTK_PIN_IES_SMT_SPEC(60, 62, SMT_EN1, 0),
> -	MTK_PIN_IES_SMT_SPEC(63, 65, SMT_EN1, 1),
> -	MTK_PIN_IES_SMT_SPEC(66, 71, SMT_EN1, 2),
> -	MTK_PIN_IES_SMT_SPEC(72, 74, SMT_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(75, 76, SMT_EN1, 3),
> -	MTK_PIN_IES_SMT_SPEC(83, 84, SMT_EN1, 2),
> -	MTK_PIN_IES_SMT_SPEC(105, 106, MSDC1_CTRL1, 11),
> -	MTK_PIN_IES_SMT_SPEC(107, 107, MSDC1_CTRL3, 3),
> -	MTK_PIN_IES_SMT_SPEC(108, 108, MSDC1_CTRL3, 7),
> -	MTK_PIN_IES_SMT_SPEC(109, 109, MSDC1_CTRL3, 11),
> -	MTK_PIN_IES_SMT_SPEC(110, 111, MSDC1_CTRL3, 15),
> -	MTK_PIN_IES_SMT_SPEC(112, 112, MSDC0_CTRL4, 11),
> -	MTK_PIN_IES_SMT_SPEC(113, 113, MSDC0_CTRL4, 7),
> -	MTK_PIN_IES_SMT_SPEC(114, 115, MSDC0_CTRL4, 3),
> -	MTK_PIN_IES_SMT_SPEC(116, 117, MSDC0_CTRL1, 11),
> -	MTK_PIN_IES_SMT_SPEC(118, 118, MSDC0_CTRL3, 15),
> -	MTK_PIN_IES_SMT_SPEC(119, 119, MSDC0_CTRL3, 11),
> -	MTK_PIN_IES_SMT_SPEC(120, 120, MSDC0_CTRL3, 7),
> -	MTK_PIN_IES_SMT_SPEC(121, 121, MSDC0_CTRL3, 3),
> -	MTK_PIN_IES_SMT_SPEC(122, 125, SMT_EN1, 7),
> -	MTK_PIN_IES_SMT_SPEC(126, 126, SMT_EN0, 12),
> -	MTK_PIN_IES_SMT_SPEC(199, 201, SMT_EN0, 1),
> -	MTK_PIN_IES_SMT_SPEC(203, 207, SMT_EN2, 2),
> -	MTK_PIN_IES_SMT_SPEC(208, 209, SMT_EN2, 3),
> -	MTK_PIN_IES_SMT_SPEC(236, 241, SMT_EN2, 6),
> -	MTK_PIN_IES_SMT_SPEC(242, 243, SMT_EN2, 7),
> -	MTK_PIN_IES_SMT_SPEC(261, 261, MSDC1_CTRL6, 3),
> -	MTK_PIN_IES_SMT_SPEC(262, 272, SMT_EN2, 12),
> -	MTK_PIN_IES_SMT_SPEC(274, 276, SMT_EN2, 12),
> -	MTK_PIN_IES_SMT_SPEC(278, 278, SMT_EN2, 13),
> -};
> -
> -static int mt7623_ies_smt_set(struct regmap *regmap, unsigned int pin,
> -		unsigned char align, int value, enum pin_config_param arg)
> -{
> -	if (arg == PIN_CONFIG_INPUT_ENABLE)
> -		return mtk_pconf_spec_set_ies_smt_range(regmap, mt7623_ies_set,
> -			ARRAY_SIZE(mt7623_ies_set), pin, align, value);
> -	else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
> -		return mtk_pconf_spec_set_ies_smt_range(regmap, mt7623_smt_set,
> -			ARRAY_SIZE(mt7623_smt_set), pin, align, value);
> -	return -EINVAL;
> -}
> -
> -static const struct mtk_pinctrl_devdata mt7623_pinctrl_data = {
> -	.pins = mtk_pins_mt7623,
> -	.npins = ARRAY_SIZE(mtk_pins_mt7623),
> -	.grp_desc = mt7623_drv_grp,
> -	.n_grp_cls = ARRAY_SIZE(mt7623_drv_grp),
> -	.pin_drv_grp = mt7623_pin_drv,
> -	.n_pin_drv_grps = ARRAY_SIZE(mt7623_pin_drv),
> -	.spec_pull_set = mt7623_spec_pull_set,
> -	.spec_ies_smt_set = mt7623_ies_smt_set,
> -	.dir_offset = 0x0000,
> -	.pullen_offset = 0x0150,
> -	.pullsel_offset = 0x0280,
> -	.dout_offset = 0x0500,
> -	.din_offset = 0x0630,
> -	.pinmux_offset = 0x0760,
> -	.type1_start = 280,
> -	.type1_end = 280,
> -	.port_shf = 4,
> -	.port_mask = 0x1f,
> -	.port_align = 4,
> -	.eint_offsets = {
> -		.name = "mt7623_eint",
> -		.stat      = 0x000,
> -		.ack       = 0x040,
> -		.mask      = 0x080,
> -		.mask_set  = 0x0c0,
> -		.mask_clr  = 0x100,
> -		.sens      = 0x140,
> -		.sens_set  = 0x180,
> -		.sens_clr  = 0x1c0,
> -		.soft      = 0x200,
> -		.soft_set  = 0x240,
> -		.soft_clr  = 0x280,
> -		.pol       = 0x300,
> -		.pol_set   = 0x340,
> -		.pol_clr   = 0x380,
> -		.dom_en    = 0x400,
> -		.dbnc_ctrl = 0x500,
> -		.dbnc_set  = 0x600,
> -		.dbnc_clr  = 0x700,
> -		.port_mask = 6,
> -		.ports     = 6,
> -	},
> -	.ap_num = 169,
> -	.db_cnt = 16,
> -};
> -
> -static int mt7623_pinctrl_probe(struct platform_device *pdev)
> -{
> -	return mtk_pctrl_init(pdev, &mt7623_pinctrl_data, NULL);
> -}
> -
> -static const struct of_device_id mt7623_pctrl_match[] = {
> -	{ .compatible = "mediatek,mt7623-pinctrl", },
> -	{}
> -};
> -MODULE_DEVICE_TABLE(of, mt7623_pctrl_match);
> -
> -static struct platform_driver mtk_pinctrl_driver = {
> -	.probe = mt7623_pinctrl_probe,
> -	.driver = {
> -		.name = "mediatek-mt7623-pinctrl",
> -		.of_match_table = mt7623_pctrl_match,
> -	},
> -};
> -
> -static int __init mtk_pinctrl_init(void)
> -{
> -	return platform_driver_register(&mtk_pinctrl_driver);
> -}
> -
> -arch_initcall(mtk_pinctrl_init);
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h b/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h
> deleted file mode 100644
> index e06cfc4..0000000
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h
> +++ /dev/null
> @@ -1,1936 +0,0 @@
> -/*
> - * Copyright (c) 2016 John Crispin <john@phrozen.org>
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#ifndef __PINCTRL_MTK_MT7623_H
> -#define __PINCTRL_MTK_MT7623_H
> -
> -#include <linux/pinctrl/pinctrl.h>
> -#include "pinctrl-mtk-common.h"
> -
> -static const struct mtk_desc_pin mtk_pins_mt7623[] = {
> -	MTK_PIN(
> -		PINCTRL_PIN(0, "PWRAP_SPI0_MI"),
> -		"J20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 148),
> -		MTK_FUNCTION(0, "GPIO0"),
> -		MTK_FUNCTION(1, "PWRAP_SPIDO"),
> -		MTK_FUNCTION(2, "PWRAP_SPIDI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(1, "PWRAP_SPI0_MO"),
> -		"D10", "mt7623",
> -		MTK_EINT_FUNCTION(0, 149),
> -		MTK_FUNCTION(0, "GPIO1"),
> -		MTK_FUNCTION(1, "PWRAP_SPIDI"),
> -		MTK_FUNCTION(2, "PWRAP_SPIDO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(2, "PWRAP_INT"),
> -		"E11", "mt7623",
> -		MTK_EINT_FUNCTION(0, 150),
> -		MTK_FUNCTION(0, "GPIO2"),
> -		MTK_FUNCTION(1, "PWRAP_INT")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(3, "PWRAP_SPI0_CK"),
> -		"H12", "mt7623",
> -		MTK_EINT_FUNCTION(0, 151),
> -		MTK_FUNCTION(0, "GPIO3"),
> -		MTK_FUNCTION(1, "PWRAP_SPICK_I")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(4, "PWRAP_SPI0_CSN"),
> -		"E12", "mt7623",
> -		MTK_EINT_FUNCTION(0, 152),
> -		MTK_FUNCTION(0, "GPIO4"),
> -		MTK_FUNCTION(1, "PWRAP_SPICS_B_I")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(5, "PWRAP_SPI0_CK2"),
> -		"H11", "mt7623",
> -		MTK_EINT_FUNCTION(0, 155),
> -		MTK_FUNCTION(0, "GPIO5"),
> -		MTK_FUNCTION(1, "PWRAP_SPICK2_I")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(6, "PWRAP_SPI0_CSN2"),
> -		"G11", "mt7623",
> -		MTK_EINT_FUNCTION(0, 156),
> -		MTK_FUNCTION(0, "GPIO6"),
> -		MTK_FUNCTION(1, "PWRAP_SPICS2_B_I")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(7, "SPI1_CSN"),
> -		"G19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 153),
> -		MTK_FUNCTION(0, "GPIO7"),
> -		MTK_FUNCTION(1, "SPI1_CS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(8, "SPI1_MI"),
> -		"F19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 154),
> -		MTK_FUNCTION(0, "GPIO8"),
> -		MTK_FUNCTION(1, "SPI1_MI"),
> -		MTK_FUNCTION(2, "SPI1_MO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(9, "SPI1_MO"),
> -		"G20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 157),
> -		MTK_FUNCTION(0, "GPIO9"),
> -		MTK_FUNCTION(1, "SPI1_MO"),
> -		MTK_FUNCTION(2, "SPI1_MI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(10, "RTC32K_CK"),
> -		"A13", "mt7623",
> -		MTK_EINT_FUNCTION(0, 158),
> -		MTK_FUNCTION(0, "GPIO10"),
> -		MTK_FUNCTION(1, "RTC32K_CK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(11, "WATCHDOG"),
> -		"D14", "mt7623",
> -		MTK_EINT_FUNCTION(0, 159),
> -		MTK_FUNCTION(0, "GPIO11"),
> -		MTK_FUNCTION(1, "WATCHDOG")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(12, "SRCLKENA"),
> -		"C13", "mt7623",
> -		MTK_EINT_FUNCTION(0, 169),
> -		MTK_FUNCTION(0, "GPIO12"),
> -		MTK_FUNCTION(1, "SRCLKENA")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(13, "SRCLKENAI"),
> -		"B13", "mt7623",
> -		MTK_EINT_FUNCTION(0, 161),
> -		MTK_FUNCTION(0, "GPIO13"),
> -		MTK_FUNCTION(1, "SRCLKENAI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(14, "GPIO14"),
> -		"E18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 162),
> -		MTK_FUNCTION(0, "GPIO14"),
> -		MTK_FUNCTION(1, "URXD2"),
> -		MTK_FUNCTION(2, "UTXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(15, "GPIO15"),
> -		"E17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 163),
> -		MTK_FUNCTION(0, "GPIO15"),
> -		MTK_FUNCTION(1, "UTXD2"),
> -		MTK_FUNCTION(2, "URXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(16, "GPIO16"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO16")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(17, "GPIO17"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO17")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(18, "PCM_CLK"),
> -		"C19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 166),
> -		MTK_FUNCTION(0, "GPIO18"),
> -		MTK_FUNCTION(1, "PCM_CLK0"),
> -		MTK_FUNCTION(6, "AP_PCM_CLKO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(19, "PCM_SYNC"),
> -		"D19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 167),
> -		MTK_FUNCTION(0, "GPIO19"),
> -		MTK_FUNCTION(1, "PCM_SYNC"),
> -		MTK_FUNCTION(6, "AP_PCM_SYNC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(20, "PCM_RX"),
> -		"D18", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO20"),
> -		MTK_FUNCTION(1, "PCM_RX"),
> -		MTK_FUNCTION(4, "PCM_TX"),
> -		MTK_FUNCTION(6, "AP_PCM_RX")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(21, "PCM_TX"),
> -		"C18", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO21"),
> -		MTK_FUNCTION(1, "PCM_TX"),
> -		MTK_FUNCTION(4, "PCM_RX"),
> -		MTK_FUNCTION(6, "AP_PCM_TX")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(22, "EINT0"),
> -		"H15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 0),
> -		MTK_FUNCTION(0, "GPIO22"),
> -		MTK_FUNCTION(1, "UCTS0"),
> -		MTK_FUNCTION(2, "PCIE0_PERST_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(23, "EINT1"),
> -		"J16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 1),
> -		MTK_FUNCTION(0, "GPIO23"),
> -		MTK_FUNCTION(1, "URTS0"),
> -		MTK_FUNCTION(2, "PCIE1_PERST_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(24, "EINT2"),
> -		"H16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 2),
> -		MTK_FUNCTION(0, "GPIO24"),
> -		MTK_FUNCTION(1, "UCTS1"),
> -		MTK_FUNCTION(2, "PCIE2_PERST_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(25, "EINT3"),
> -		"K15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 3),
> -		MTK_FUNCTION(0, "GPIO25"),
> -		MTK_FUNCTION(1, "URTS1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(26, "EINT4"),
> -		"G15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 4),
> -		MTK_FUNCTION(0, "GPIO26"),
> -		MTK_FUNCTION(1, "UCTS3"),
> -		MTK_FUNCTION(6, "PCIE2_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(27, "EINT5"),
> -		"F15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 5),
> -		MTK_FUNCTION(0, "GPIO27"),
> -		MTK_FUNCTION(1, "URTS3"),
> -		MTK_FUNCTION(6, "PCIE1_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(28, "EINT6"),
> -		"J15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 6),
> -		MTK_FUNCTION(0, "GPIO28"),
> -		MTK_FUNCTION(1, "DRV_VBUS"),
> -		MTK_FUNCTION(6, "PCIE0_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(29, "EINT7"),
> -		"E15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 7),
> -		MTK_FUNCTION(0, "GPIO29"),
> -		MTK_FUNCTION(1, "IDDIG"),
> -		MTK_FUNCTION(2, "MSDC1_WP"),
> -		MTK_FUNCTION(6, "PCIE2_PERST_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(30, "GPIO30"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO30")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(31, "GPIO31"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO31")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(32, "GPIO32"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO32")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(33, "I2S1_DATA"),
> -		"Y18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 15),
> -		MTK_FUNCTION(0, "GPIO33"),
> -		MTK_FUNCTION(1, "I2S1_DATA"),
> -		MTK_FUNCTION(3, "PCM_TX"),
> -		MTK_FUNCTION(6, "AP_PCM_TX")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(34, "I2S1_DATA_IN"),
> -		"Y17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 16),
> -		MTK_FUNCTION(0, "GPIO34"),
> -		MTK_FUNCTION(1, "I2S1_DATA_IN"),
> -		MTK_FUNCTION(3, "PCM_RX"),
> -		MTK_FUNCTION(6, "AP_PCM_RX")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(35, "I2S1_BCK"),
> -		"V17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 17),
> -		MTK_FUNCTION(0, "GPIO35"),
> -		MTK_FUNCTION(1, "I2S1_BCK"),
> -		MTK_FUNCTION(3, "PCM_CLK0"),
> -		MTK_FUNCTION(6, "AP_PCM_CLKO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(36, "I2S1_LRCK"),
> -		"W17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 18),
> -		MTK_FUNCTION(0, "GPIO36"),
> -		MTK_FUNCTION(1, "I2S1_LRCK"),
> -		MTK_FUNCTION(3, "PCM_SYNC"),
> -		MTK_FUNCTION(6, "AP_PCM_SYNC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(37, "I2S1_MCLK"),
> -		"AA18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 19),
> -		MTK_FUNCTION(0, "GPIO37"),
> -		MTK_FUNCTION(1, "I2S1_MCLK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(38, "GPIO38"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO38")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(39, "JTMS"),
> -		"G21", "mt7623",
> -		MTK_EINT_FUNCTION(0, 21),
> -		MTK_FUNCTION(0, "GPIO39"),
> -		MTK_FUNCTION(1, "JTMS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(40, "GPIO40"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO40")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(41, "JTDI"),
> -		"H22", "mt7623",
> -		MTK_EINT_FUNCTION(0, 23),
> -		MTK_FUNCTION(0, "GPIO41"),
> -		MTK_FUNCTION(1, "JTDI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(42, "JTDO"),
> -		"H21", "mt7623",
> -		MTK_EINT_FUNCTION(0, 24),
> -		MTK_FUNCTION(0, "GPIO42"),
> -		MTK_FUNCTION(1, "JTDO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(43, "NCLE"),
> -		"C7", "mt7623",
> -		MTK_EINT_FUNCTION(0, 25),
> -		MTK_FUNCTION(0, "GPIO43"),
> -		MTK_FUNCTION(1, "NCLE"),
> -		MTK_FUNCTION(2, "EXT_XCS2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(44, "NCEB1"),
> -		"C6", "mt7623",
> -		MTK_EINT_FUNCTION(0, 26),
> -		MTK_FUNCTION(0, "GPIO44"),
> -		MTK_FUNCTION(1, "NCEB1"),
> -		MTK_FUNCTION(2, "IDDIG")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(45, "NCEB0"),
> -		"D7", "mt7623",
> -		MTK_EINT_FUNCTION(0, 27),
> -		MTK_FUNCTION(0, "GPIO45"),
> -		MTK_FUNCTION(1, "NCEB0"),
> -		MTK_FUNCTION(2, "DRV_VBUS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(46, "IR"),
> -		"D15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 28),
> -		MTK_FUNCTION(0, "GPIO46"),
> -		MTK_FUNCTION(1, "IR")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(47, "NREB"),
> -		"A6", "mt7623",
> -		MTK_EINT_FUNCTION(0, 29),
> -		MTK_FUNCTION(0, "GPIO47"),
> -		MTK_FUNCTION(1, "NREB")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(48, "NRNB"),
> -		"B6", "mt7623",
> -		MTK_EINT_FUNCTION(0, 30),
> -		MTK_FUNCTION(0, "GPIO48"),
> -		MTK_FUNCTION(1, "NRNB")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(49, "I2S0_DATA"),
> -		"AB18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 31),
> -		MTK_FUNCTION(0, "GPIO49"),
> -		MTK_FUNCTION(1, "I2S0_DATA"),
> -		MTK_FUNCTION(3, "PCM_TX"),
> -		MTK_FUNCTION(6, "AP_I2S_DO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(50, "GPIO50"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO50")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(51, "GPIO51"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO51")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(52, "GPIO52"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO52")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(53, "SPI0_CSN"),
> -		"E7", "mt7623",
> -		MTK_EINT_FUNCTION(0, 35),
> -		MTK_FUNCTION(0, "GPIO53"),
> -		MTK_FUNCTION(1, "SPI0_CS"),
> -		MTK_FUNCTION(5, "PWM1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(54, "SPI0_CK"),
> -		"F7", "mt7623",
> -		MTK_EINT_FUNCTION(0, 36),
> -		MTK_FUNCTION(0, "GPIO54"),
> -		MTK_FUNCTION(1, "SPI0_CK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(55, "SPI0_MI"),
> -		"E6", "mt7623",
> -		MTK_EINT_FUNCTION(0, 37),
> -		MTK_FUNCTION(0, "GPIO55"),
> -		MTK_FUNCTION(1, "SPI0_MI"),
> -		MTK_FUNCTION(2, "SPI0_MO"),
> -		MTK_FUNCTION(3, "MSDC1_WP"),
> -		MTK_FUNCTION(5, "PWM2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(56, "SPI0_MO"),
> -		"G7", "mt7623",
> -		MTK_EINT_FUNCTION(0, 38),
> -		MTK_FUNCTION(0, "GPIO56"),
> -		MTK_FUNCTION(1, "SPI0_MO"),
> -		MTK_FUNCTION(2, "SPI0_MI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(57, "GPIO57"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO57")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(58, "GPIO58"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO58")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(59, "GPIO59"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO59")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(60, "WB_RSTB"),
> -		"Y21", "mt7623",
> -		MTK_EINT_FUNCTION(0, 41),
> -		MTK_FUNCTION(0, "GPIO60"),
> -		MTK_FUNCTION(1, "WB_RSTB")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(61, "GPIO61"),
> -		"AA21", "mt7623",
> -		MTK_EINT_FUNCTION(0, 42),
> -		MTK_FUNCTION(0, "GPIO61"),
> -		MTK_FUNCTION(1, "TEST_FD")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(62, "GPIO62"),
> -		"AB22", "mt7623",
> -		MTK_EINT_FUNCTION(0, 43),
> -		MTK_FUNCTION(0, "GPIO62"),
> -		MTK_FUNCTION(1, "TEST_FC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(63, "WB_SCLK"),
> -		"AC23", "mt7623",
> -		MTK_EINT_FUNCTION(0, 44),
> -		MTK_FUNCTION(0, "GPIO63"),
> -		MTK_FUNCTION(1, "WB_SCLK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(64, "WB_SDATA"),
> -		"AB21", "mt7623",
> -		MTK_EINT_FUNCTION(0, 45),
> -		MTK_FUNCTION(0, "GPIO64"),
> -		MTK_FUNCTION(1, "WB_SDATA")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(65, "WB_SEN"),
> -		"AB24", "mt7623",
> -		MTK_EINT_FUNCTION(0, 46),
> -		MTK_FUNCTION(0, "GPIO65"),
> -		MTK_FUNCTION(1, "WB_SEN")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(66, "WB_CRTL0"),
> -		"AB20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 47),
> -		MTK_FUNCTION(0, "GPIO66"),
> -		MTK_FUNCTION(1, "WB_CRTL0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(67, "WB_CRTL1"),
> -		"AC20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 48),
> -		MTK_FUNCTION(0, "GPIO67"),
> -		MTK_FUNCTION(1, "WB_CRTL1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(68, "WB_CRTL2"),
> -		"AB19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 49),
> -		MTK_FUNCTION(0, "GPIO68"),
> -		MTK_FUNCTION(1, "WB_CRTL2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(69, "WB_CRTL3"),
> -		"AC19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 50),
> -		MTK_FUNCTION(0, "GPIO69"),
> -		MTK_FUNCTION(1, "WB_CRTL3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(70, "WB_CRTL4"),
> -		"AD19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 51),
> -		MTK_FUNCTION(0, "GPIO70"),
> -		MTK_FUNCTION(1, "WB_CRTL4")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(71, "WB_CRTL5"),
> -		"AE19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 52),
> -		MTK_FUNCTION(0, "GPIO71"),
> -		MTK_FUNCTION(1, "WB_CRTL5")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(72, "I2S0_DATA_IN"),
> -		"AA20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 53),
> -		MTK_FUNCTION(0, "GPIO72"),
> -		MTK_FUNCTION(1, "I2S0_DATA_IN"),
> -		MTK_FUNCTION(3, "PCM_RX"),
> -		MTK_FUNCTION(4, "PWM0"),
> -		MTK_FUNCTION(5, "DISP_PWM"),
> -		MTK_FUNCTION(6, "AP_I2S_DI")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(73, "I2S0_LRCK"),
> -		"Y20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 54),
> -		MTK_FUNCTION(0, "GPIO73"),
> -		MTK_FUNCTION(1, "I2S0_LRCK"),
> -		MTK_FUNCTION(3, "PCM_SYNC"),
> -		MTK_FUNCTION(6, "AP_I2S_LRCK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(74, "I2S0_BCK"),
> -		"Y19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 55),
> -		MTK_FUNCTION(0, "GPIO74"),
> -		MTK_FUNCTION(1, "I2S0_BCK"),
> -		MTK_FUNCTION(3, "PCM_CLK0"),
> -		MTK_FUNCTION(6, "AP_I2S_BCK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(75, "SDA0"),
> -		"K19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 56),
> -		MTK_FUNCTION(0, "GPIO75"),
> -		MTK_FUNCTION(1, "SDA0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(76, "SCL0"),
> -		"K20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 57),
> -		MTK_FUNCTION(0, "GPIO76"),
> -		MTK_FUNCTION(1, "SCL0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(77, "GPIO77"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO77")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(78, "GPIO78"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO78")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(79, "GPIO79"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO79")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(80, "GPIO80"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO80")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(81, "GPIO81"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO81")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(82, "GPIO82"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO82")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(83, "LCM_RST"),
> -		"V16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 64),
> -		MTK_FUNCTION(0, "GPIO83"),
> -		MTK_FUNCTION(1, "LCM_RST")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(84, "DSI_TE"),
> -		"V14", "mt7623",
> -		MTK_EINT_FUNCTION(0, 65),
> -		MTK_FUNCTION(0, "GPIO84"),
> -		MTK_FUNCTION(1, "DSI_TE")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(85, "GPIO85"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO85")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(86, "GPIO86"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO86")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(87, "GPIO87"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO87")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(88, "GPIO88"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO88")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(89, "GPIO89"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO89")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(90, "GPIO90"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO90")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(91, "GPIO91"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO91")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(92, "GPIO92"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO92")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(93, "GPIO93"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO93")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(94, "GPIO94"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO94")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(95, "MIPI_TCN"),
> -		"AB14", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO95"),
> -		MTK_FUNCTION(1, "TCN")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(96, "MIPI_TCP"),
> -		"AC14", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO96"),
> -		MTK_FUNCTION(1, "TCP")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(97, "MIPI_TDN1"),
> -		"AE15", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO97"),
> -		MTK_FUNCTION(1, "TDN1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(98, "MIPI_TDP1"),
> -		"AD15", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO98"),
> -		MTK_FUNCTION(1, "TDP1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(99, "MIPI_TDN0"),
> -		"AB15", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO99"),
> -		MTK_FUNCTION(1, "TDN0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(100, "MIPI_TDP0"),
> -		"AC15", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO100"),
> -		MTK_FUNCTION(1, "TDP0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(101, "GPIO101"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO101")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(102, "GPIO102"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO102")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(103, "GPIO103"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO103")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(104, "GPIO104"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO104")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(105, "MSDC1_CMD"),
> -		"AD2", "mt7623",
> -		MTK_EINT_FUNCTION(0, 78),
> -		MTK_FUNCTION(0, "GPIO105"),
> -		MTK_FUNCTION(1, "MSDC1_CMD"),
> -		MTK_FUNCTION(3, "SDA1"),
> -		MTK_FUNCTION(6, "I2SOUT_BCK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(106, "MSDC1_CLK"),
> -		"AD3", "mt7623",
> -		MTK_EINT_FUNCTION(0, 79),
> -		MTK_FUNCTION(0, "GPIO106"),
> -		MTK_FUNCTION(1, "MSDC1_CLK"),
> -		MTK_FUNCTION(3, "SCL1"),
> -		MTK_FUNCTION(6, "I2SOUT_LRCK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(107, "MSDC1_DAT0"),
> -		"AE2", "mt7623",
> -		MTK_EINT_FUNCTION(0, 80),
> -		MTK_FUNCTION(0, "GPIO107"),
> -		MTK_FUNCTION(1, "MSDC1_DAT0"),
> -		MTK_FUNCTION(5, "UTXD0"),
> -		MTK_FUNCTION(6, "I2SOUT_DATA_OUT")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(108, "MSDC1_DAT1"),
> -		"AC1", "mt7623",
> -		MTK_EINT_FUNCTION(0, 81),
> -		MTK_FUNCTION(0, "GPIO108"),
> -		MTK_FUNCTION(1, "MSDC1_DAT1"),
> -		MTK_FUNCTION(3, "PWM0"),
> -		MTK_FUNCTION(5, "URXD0"),
> -		MTK_FUNCTION(6, "PWM1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(109, "MSDC1_DAT2"),
> -		"AC3", "mt7623",
> -		MTK_EINT_FUNCTION(0, 82),
> -		MTK_FUNCTION(0, "GPIO109"),
> -		MTK_FUNCTION(1, "MSDC1_DAT2"),
> -		MTK_FUNCTION(3, "SDA2"),
> -		MTK_FUNCTION(5, "UTXD1"),
> -		MTK_FUNCTION(6, "PWM2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(110, "MSDC1_DAT3"),
> -		"AC4", "mt7623",
> -		MTK_EINT_FUNCTION(0, 83),
> -		MTK_FUNCTION(0, "GPIO110"),
> -		MTK_FUNCTION(1, "MSDC1_DAT3"),
> -		MTK_FUNCTION(3, "SCL2"),
> -		MTK_FUNCTION(5, "URXD1"),
> -		MTK_FUNCTION(6, "PWM3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(111, "MSDC0_DAT7"),
> -		"A2", "mt7623",
> -		MTK_EINT_FUNCTION(0, 84),
> -		MTK_FUNCTION(0, "GPIO111"),
> -		MTK_FUNCTION(1, "MSDC0_DAT7"),
> -		MTK_FUNCTION(4, "NLD7")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(112, "MSDC0_DAT6"),
> -		"B3", "mt7623",
> -		MTK_EINT_FUNCTION(0, 85),
> -		MTK_FUNCTION(0, "GPIO112"),
> -		MTK_FUNCTION(1, "MSDC0_DAT6"),
> -		MTK_FUNCTION(4, "NLD6")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(113, "MSDC0_DAT5"),
> -		"C4", "mt7623",
> -		MTK_EINT_FUNCTION(0, 86),
> -		MTK_FUNCTION(0, "GPIO113"),
> -		MTK_FUNCTION(1, "MSDC0_DAT5"),
> -		MTK_FUNCTION(4, "NLD5")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(114, "MSDC0_DAT4"),
> -		"A4", "mt7623",
> -		MTK_EINT_FUNCTION(0, 87),
> -		MTK_FUNCTION(0, "GPIO114"),
> -		MTK_FUNCTION(1, "MSDC0_DAT4"),
> -		MTK_FUNCTION(4, "NLD4")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(115, "MSDC0_RSTB"),
> -		"C5", "mt7623",
> -		MTK_EINT_FUNCTION(0, 88),
> -		MTK_FUNCTION(0, "GPIO115"),
> -		MTK_FUNCTION(1, "MSDC0_RSTB"),
> -		MTK_FUNCTION(4, "NLD8")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(116, "MSDC0_CMD"),
> -		"D5", "mt7623",
> -		MTK_EINT_FUNCTION(0, 89),
> -		MTK_FUNCTION(0, "GPIO116"),
> -		MTK_FUNCTION(1, "MSDC0_CMD"),
> -		MTK_FUNCTION(4, "NALE")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(117, "MSDC0_CLK"),
> -		"B1", "mt7623",
> -		MTK_EINT_FUNCTION(0, 90),
> -		MTK_FUNCTION(0, "GPIO117"),
> -		MTK_FUNCTION(1, "MSDC0_CLK"),
> -		MTK_FUNCTION(4, "NWEB")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(118, "MSDC0_DAT3"),
> -		"D6", "mt7623",
> -		MTK_EINT_FUNCTION(0, 91),
> -		MTK_FUNCTION(0, "GPIO118"),
> -		MTK_FUNCTION(1, "MSDC0_DAT3"),
> -		MTK_FUNCTION(4, "NLD3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(119, "MSDC0_DAT2"),
> -		"B2", "mt7623",
> -		MTK_EINT_FUNCTION(0, 92),
> -		MTK_FUNCTION(0, "GPIO119"),
> -		MTK_FUNCTION(1, "MSDC0_DAT2"),
> -		MTK_FUNCTION(4, "NLD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(120, "MSDC0_DAT1"),
> -		"A3", "mt7623",
> -		MTK_EINT_FUNCTION(0, 93),
> -		MTK_FUNCTION(0, "GPIO120"),
> -		MTK_FUNCTION(1, "MSDC0_DAT1"),
> -		MTK_FUNCTION(4, "NLD1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(121, "MSDC0_DAT0"),
> -		"B4", "mt7623",
> -		MTK_EINT_FUNCTION(0, 94),
> -		MTK_FUNCTION(0, "GPIO121"),
> -		MTK_FUNCTION(1, "MSDC0_DAT0"),
> -		MTK_FUNCTION(4, "NLD0"),
> -		MTK_FUNCTION(5, "WATCHDOG")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(122, "GPIO122"),
> -		"H17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 95),
> -		MTK_FUNCTION(0, "GPIO122"),
> -		MTK_FUNCTION(1, "TEST"),
> -		MTK_FUNCTION(4, "SDA2"),
> -		MTK_FUNCTION(5, "URXD0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(123, "GPIO123"),
> -		"F17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 96),
> -		MTK_FUNCTION(0, "GPIO123"),
> -		MTK_FUNCTION(1, "TEST"),
> -		MTK_FUNCTION(4, "SCL2"),
> -		MTK_FUNCTION(5, "UTXD0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(124, "GPIO124"),
> -		"H18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 97),
> -		MTK_FUNCTION(0, "GPIO124"),
> -		MTK_FUNCTION(1, "TEST"),
> -		MTK_FUNCTION(4, "SDA1"),
> -		MTK_FUNCTION(5, "PWM3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(125, "GPIO125"),
> -		"G17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 98),
> -		MTK_FUNCTION(0, "GPIO125"),
> -		MTK_FUNCTION(1, "TEST"),
> -		MTK_FUNCTION(4, "SCL1"),
> -		MTK_FUNCTION(5, "PWM4")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(126, "I2S0_MCLK"),
> -		"AA19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 99),
> -		MTK_FUNCTION(0, "GPIO126"),
> -		MTK_FUNCTION(1, "I2S0_MCLK"),
> -		MTK_FUNCTION(6, "AP_I2S_MCLK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(127, "GPIO127"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO127")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(128, "GPIO128"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO128")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(129, "GPIO129"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO129")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(130, "GPIO130"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO130")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(131, "GPIO131"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO131")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(132, "GPIO132"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO132")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(133, "GPIO133"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO133")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(134, "GPIO134"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO134")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(135, "GPIO135"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO135")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(136, "GPIO136"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO136")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(137, "GPIO137"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO137")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(138, "GPIO138"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO138")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(139, "GPIO139"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO139")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(140, "GPIO140"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO140")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(141, "GPIO141"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO141")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(142, "GPIO142"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO142")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(143, "GPIO143"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO143")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(144, "GPIO144"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO144")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(145, "GPIO145"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO145")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(146, "GPIO146"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO146")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(147, "GPIO147"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO147")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(148, "GPIO148"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO148")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(149, "GPIO149"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO149")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(150, "GPIO150"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO150")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(151, "GPIO151"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO151")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(152, "GPIO152"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO152")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(153, "GPIO153"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO153")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(154, "GPIO154"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO154")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(155, "GPIO155"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO155")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(156, "GPIO156"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO156")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(157, "GPIO157"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO157")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(158, "GPIO158"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO158")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(159, "GPIO159"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO159")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(160, "GPIO160"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO160")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(161, "GPIO161"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO161")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(162, "GPIO162"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO162")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(163, "GPIO163"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO163")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(164, "GPIO164"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO164")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(165, "GPIO165"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO165")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(166, "GPIO166"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO166")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(167, "GPIO167"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO167")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(168, "GPIO168"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO168")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(169, "GPIO169"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO169")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(170, "GPIO170"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO170")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(171, "GPIO171"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO171")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(172, "GPIO172"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO172")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(173, "GPIO173"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO173")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(174, "GPIO174"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO174")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(175, "GPIO175"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO175")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(176, "GPIO176"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO176")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(177, "GPIO177"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO177")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(178, "GPIO178"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO178")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(179, "GPIO179"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO179")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(180, "GPIO180"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO180")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(181, "GPIO181"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO181")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(182, "GPIO182"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO182")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(183, "GPIO183"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO183")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(184, "GPIO184"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO184")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(185, "GPIO185"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO185")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(186, "GPIO186"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO186")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(187, "GPIO187"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO187")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(188, "GPIO188"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO188")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(189, "GPIO189"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO189")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(190, "GPIO190"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO190")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(191, "GPIO191"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO191")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(192, "GPIO192"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO192")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(193, "GPIO193"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO193")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(194, "GPIO194"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO194")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(195, "GPIO195"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO195")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(196, "GPIO196"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO196")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(197, "GPIO197"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO197")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(198, "GPIO198"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO198")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(199, "SPI1_CK"),
> -		"E19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 111),
> -		MTK_FUNCTION(0, "GPIO199"),
> -		MTK_FUNCTION(1, "SPI1_CK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(200, "URXD2"),
> -		"K18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 112),
> -		MTK_FUNCTION(0, "GPIO200"),
> -		MTK_FUNCTION(6, "URXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(201, "UTXD2"),
> -		"L18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 113),
> -		MTK_FUNCTION(0, "GPIO201"),
> -		MTK_FUNCTION(6, "UTXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(202, "GPIO202"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO202")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(203, "PWM0"),
> -		"AA16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 115),
> -		MTK_FUNCTION(0, "GPIO203"),
> -		MTK_FUNCTION(1, "PWM0"),
> -		MTK_FUNCTION(2, "DISP_PWM")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(204, "PWM1"),
> -		"Y16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 116),
> -		MTK_FUNCTION(0, "GPIO204"),
> -		MTK_FUNCTION(1, "PWM1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(205, "PWM2"),
> -		"AA15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 117),
> -		MTK_FUNCTION(0, "GPIO205"),
> -		MTK_FUNCTION(1, "PWM2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(206, "PWM3"),
> -		"AA17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 118),
> -		MTK_FUNCTION(0, "GPIO206"),
> -		MTK_FUNCTION(1, "PWM3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(207, "PWM4"),
> -		"Y15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 119),
> -		MTK_FUNCTION(0, "GPIO207"),
> -		MTK_FUNCTION(1, "PWM4")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(208, "AUD_EXT_CK1"),
> -		"W14", "mt7623",
> -		MTK_EINT_FUNCTION(0, 120),
> -		MTK_FUNCTION(0, "GPIO208"),
> -		MTK_FUNCTION(1, "AUD_EXT_CK1"),
> -		MTK_FUNCTION(2, "PWM0"),
> -		MTK_FUNCTION(3, "PCIE0_PERST_N"),
> -		MTK_FUNCTION(5, "DISP_PWM")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(209, "AUD_EXT_CK2"),
> -		"V15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 121),
> -		MTK_FUNCTION(0, "GPIO209"),
> -		MTK_FUNCTION(1, "AUD_EXT_CK2"),
> -		MTK_FUNCTION(2, "MSDC1_WP"),
> -		MTK_FUNCTION(3, "PCIE1_PERST_N"),
> -		MTK_FUNCTION(5, "PWM1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(210, "GPIO210"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO210")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(211, "GPIO211"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO211")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(212, "GPIO212"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO212")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(213, "GPIO213"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO213")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(214, "GPIO214"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO214")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(215, "GPIO215"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO215")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(216, "GPIO216"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO216")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(217, "GPIO217"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO217")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(218, "GPIO218"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO218")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(219, "GPIO219"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO219")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(220, "GPIO220"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO220")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(221, "GPIO221"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO221")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(222, "GPIO222"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO222")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(223, "GPIO223"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO223")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(224, "GPIO224"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO224")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(225, "GPIO225"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO225")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(226, "GPIO226"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO226")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(227, "GPIO227"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO227")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(228, "GPIO228"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO228")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(229, "GPIO229"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO229")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(230, "GPIO230"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO230")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(231, "GPIO231"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO231")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(232, "GPIO232"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO232")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(233, "GPIO233"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO233")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(234, "GPIO234"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO234")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(235, "GPIO235"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO235")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(236, "EXT_SDIO3"),
> -		"A8", "mt7623",
> -		MTK_EINT_FUNCTION(0, 122),
> -		MTK_FUNCTION(0, "GPIO236"),
> -		MTK_FUNCTION(1, "EXT_SDIO3"),
> -		MTK_FUNCTION(2, "IDDIG")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(237, "EXT_SDIO2"),
> -		"D8", "mt7623",
> -		MTK_EINT_FUNCTION(0, 123),
> -		MTK_FUNCTION(0, "GPIO237"),
> -		MTK_FUNCTION(1, "EXT_SDIO2"),
> -		MTK_FUNCTION(2, "DRV_VBUS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(238, "EXT_SDIO1"),
> -		"D9", "mt7623",
> -		MTK_EINT_FUNCTION(0, 124),
> -		MTK_FUNCTION(0, "GPIO238"),
> -		MTK_FUNCTION(1, "EXT_SDIO1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(239, "EXT_SDIO0"),
> -		"B8", "mt7623",
> -		MTK_EINT_FUNCTION(0, 125),
> -		MTK_FUNCTION(0, "GPIO239"),
> -		MTK_FUNCTION(1, "EXT_SDIO0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(240, "EXT_XCS"),
> -		"C9", "mt7623",
> -		MTK_EINT_FUNCTION(0, 126),
> -		MTK_FUNCTION(0, "GPIO240"),
> -		MTK_FUNCTION(1, "EXT_XCS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(241, "EXT_SCK"),
> -		"C8", "mt7623",
> -		MTK_EINT_FUNCTION(0, 127),
> -		MTK_FUNCTION(0, "GPIO241"),
> -		MTK_FUNCTION(1, "EXT_SCK")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(242, "URTS2"),
> -		"G18", "mt7623",
> -		MTK_EINT_FUNCTION(0, 128),
> -		MTK_FUNCTION(0, "GPIO242"),
> -		MTK_FUNCTION(1, "URTS2"),
> -		MTK_FUNCTION(2, "UTXD3"),
> -		MTK_FUNCTION(3, "URXD3"),
> -		MTK_FUNCTION(4, "SCL1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(243, "UCTS2"),
> -		"H19", "mt7623",
> -		MTK_EINT_FUNCTION(0, 129),
> -		MTK_FUNCTION(0, "GPIO243"),
> -		MTK_FUNCTION(1, "UCTS2"),
> -		MTK_FUNCTION(2, "URXD3"),
> -		MTK_FUNCTION(3, "UTXD3"),
> -		MTK_FUNCTION(4, "SDA1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(244, "GPIO244"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO244")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(245, "GPIO245"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO245")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(246, "GPIO246"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO246")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(247, "GPIO247"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO247")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(248, "GPIO248"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO248")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(249, "GPIO249"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO249")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(250, "GPIO250"),
> -		"A15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 135),
> -		MTK_FUNCTION(0, "GPIO250"),
> -		MTK_FUNCTION(1, "TEST_MD7"),
> -		MTK_FUNCTION(6, "PCIE0_CLKREQ_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(251, "GPIO251"),
> -		"B15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 136),
> -		MTK_FUNCTION(0, "GPIO251"),
> -		MTK_FUNCTION(1, "TEST_MD6"),
> -		MTK_FUNCTION(6, "PCIE0_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(252, "GPIO252"),
> -		"C16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 137),
> -		MTK_FUNCTION(0, "GPIO252"),
> -		MTK_FUNCTION(1, "TEST_MD5"),
> -		MTK_FUNCTION(6, "PCIE1_CLKREQ_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(253, "GPIO253"),
> -		"D17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 138),
> -		MTK_FUNCTION(0, "GPIO253"),
> -		MTK_FUNCTION(1, "TEST_MD4"),
> -		MTK_FUNCTION(6, "PCIE1_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(254, "GPIO254"),
> -		"D16", "mt7623",
> -		MTK_EINT_FUNCTION(0, 139),
> -		MTK_FUNCTION(0, "GPIO254"),
> -		MTK_FUNCTION(1, "TEST_MD3"),
> -		MTK_FUNCTION(6, "PCIE2_CLKREQ_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(255, "GPIO255"),
> -		"C17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 140),
> -		MTK_FUNCTION(0, "GPIO255"),
> -		MTK_FUNCTION(1, "TEST_MD2"),
> -		MTK_FUNCTION(6, "PCIE2_WAKE_N")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(256, "GPIO256"),
> -		"B17", "mt7623",
> -		MTK_EINT_FUNCTION(0, 141),
> -		MTK_FUNCTION(0, "GPIO256"),
> -		MTK_FUNCTION(1, "TEST_MD1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(257, "GPIO257"),
> -		"C15", "mt7623",
> -		MTK_EINT_FUNCTION(0, 142),
> -		MTK_FUNCTION(0, "GPIO257"),
> -		MTK_FUNCTION(1, "TEST_MD0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(258, "GPIO258"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO258")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(259, "GPIO259"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO259")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(260, "GPIO260"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO260")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(261, "MSDC1_INS"),
> -		"AD1", "mt7623",
> -		MTK_EINT_FUNCTION(0, 146),
> -		MTK_FUNCTION(0, "GPIO261"),
> -		MTK_FUNCTION(1, "MSDC1_INS")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(262, "G2_TXEN"),
> -		"A23", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO262"),
> -		MTK_FUNCTION(1, "G2_TXEN")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(263, "G2_TXD3"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO263"),
> -		MTK_FUNCTION(1, "G2_TXD3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(264, "G2_TXD2"),
> -		"C24", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO264"),
> -		MTK_FUNCTION(1, "G2_TXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(265, "G2_TXD1"),
> -		"B25", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO265"),
> -		MTK_FUNCTION(1, "G2_TXD1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(266, "G2_TXD0"),
> -		"A24", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO266"),
> -		MTK_FUNCTION(1, "G2_TXD0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(267, "G2_TXCLK"),
> -		"C23", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO267"),
> -		MTK_FUNCTION(1, "G2_TXC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(268, "G2_RXCLK"),
> -		"B23", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO268"),
> -		MTK_FUNCTION(1, "G2_RXC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(269, "G2_RXD0"),
> -		"D21", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO269"),
> -		MTK_FUNCTION(1, "G2_RXD0")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(270, "G2_RXD1"),
> -		"B22", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO270"),
> -		MTK_FUNCTION(1, "G2_RXD1")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(271, "G2_RXD2"),
> -		"A22", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO271"),
> -		MTK_FUNCTION(1, "G2_RXD2")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(272, "G2_RXD3"),
> -		"C22", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO272"),
> -		MTK_FUNCTION(1, "G2_RXD3")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(273, "GPIO273"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO273")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(274, "G2_RXDV"),
> -		"C21", "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO274"),
> -		MTK_FUNCTION(1, "G2_RXDV")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(275, "G2_MDC"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO275"),
> -		MTK_FUNCTION(1, "MDC")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(276, "G2_MDIO"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO276"),
> -		MTK_FUNCTION(1, "MDIO")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(277, "GPIO277"),
> -		NULL, "mt7623",
> -		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
> -		MTK_FUNCTION(0, "GPIO277")
> -	),
> -	MTK_PIN(
> -		PINCTRL_PIN(278, "JTAG_RESET"),
> -		"H20", "mt7623",
> -		MTK_EINT_FUNCTION(0, 147),
> -		MTK_FUNCTION(0, "GPIO278"),
> -		MTK_FUNCTION(1, "JTAG_RESET")
> -	),
> -};
> -
> -#endif /* __PINCTRL_MTK_MT7623_H */

^ permalink raw reply

* [PATCH v3] pinctrl: mediatek: reuse pinctrl driver for mt7623
From: sean.wang at mediatek.com @ 2017-05-01  7:54 UTC (permalink / raw)
  To: linux-arm-kernel

From: Sean Wang <sean.wang@mediatek.com>

mt7623 pinctrl hardware can be compatible with mt2701 driver,
so the patch lets the pinctrl on mt7623 SoC reuse the driver
and deletes those redundant ones.

Cc: John Crispin <john@phrozen.org>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/pinctrl/mediatek/Kconfig              |    9 +-
 drivers/pinctrl/mediatek/Makefile             |    1 -
 drivers/pinctrl/mediatek/pinctrl-mt2701.c     |    1 +
 drivers/pinctrl/mediatek/pinctrl-mt7623.c     |  379 -----
 drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h | 1936 -------------------------
 5 files changed, 2 insertions(+), 2324 deletions(-)
 delete mode 100644 drivers/pinctrl/mediatek/pinctrl-mt7623.c
 delete mode 100644 drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h

diff --git a/drivers/pinctrl/mediatek/Kconfig b/drivers/pinctrl/mediatek/Kconfig
index 80fe3b4..fac9866 100644
--- a/drivers/pinctrl/mediatek/Kconfig
+++ b/drivers/pinctrl/mediatek/Kconfig
@@ -11,18 +11,11 @@ config PINCTRL_MTK
 # For ARMv7 SoCs
 config PINCTRL_MT2701
 	bool "Mediatek MT2701 pin control"
-	depends on MACH_MT2701 || COMPILE_TEST
+	depends on MACH_MT7623 || MACH_MT2701 || COMPILE_TEST
 	depends on OF
 	default MACH_MT2701
 	select PINCTRL_MTK
 
-config PINCTRL_MT7623
-	bool "Mediatek MT7623 pin control"
-	depends on MACH_MT7623 || COMPILE_TEST
-	depends on OF
-	default MACH_MT7623
-	select PINCTRL_MTK_COMMON
-
 config PINCTRL_MT8135
 	bool "Mediatek MT8135 pin control"
 	depends on MACH_MT8135 || COMPILE_TEST
diff --git a/drivers/pinctrl/mediatek/Makefile b/drivers/pinctrl/mediatek/Makefile
index 3e3390a..e59c613 100644
--- a/drivers/pinctrl/mediatek/Makefile
+++ b/drivers/pinctrl/mediatek/Makefile
@@ -3,7 +3,6 @@ obj-y				+= pinctrl-mtk-common.o
 
 # SoC Drivers
 obj-$(CONFIG_PINCTRL_MT2701)	+= pinctrl-mt2701.o
-obj-$(CONFIG_PINCTRL_MT7623)	+= pinctrl-mt7623.o
 obj-$(CONFIG_PINCTRL_MT8135)	+= pinctrl-mt8135.o
 obj-$(CONFIG_PINCTRL_MT8127)	+= pinctrl-mt8127.o
 obj-$(CONFIG_PINCTRL_MT8173)	+= pinctrl-mt8173.o
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
index 8d802fa..f86f3b3 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
@@ -565,6 +565,7 @@ static int mt2701_pinctrl_probe(struct platform_device *pdev)
 
 static const struct of_device_id mt2701_pctrl_match[] = {
 	{ .compatible = "mediatek,mt2701-pinctrl", },
+	{ .compatible = "mediatek,mt7623-pinctrl", },
 	{}
 };
 MODULE_DEVICE_TABLE(of, mt2701_pctrl_match);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7623.c b/drivers/pinctrl/mediatek/pinctrl-mt7623.c
deleted file mode 100644
index fa28dd6..0000000
--- a/drivers/pinctrl/mediatek/pinctrl-mt7623.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (c) 2016 John Crispin <john@phrozen.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#include <dt-bindings/pinctrl/mt65xx.h>
-#include <linux/module.h>
-#include <linux/of.h>
-#include <linux/of_device.h>
-#include <linux/platform_device.h>
-#include <linux/pinctrl/pinctrl.h>
-#include <linux/regmap.h>
-
-#include "pinctrl-mtk-common.h"
-#include "pinctrl-mtk-mt7623.h"
-
-static const struct mtk_drv_group_desc mt7623_drv_grp[] =  {
-	/* 0E4E8SR 4/8/12/16 */
-	MTK_DRV_GRP(4, 16, 1, 2, 4),
-	/* 0E2E4SR  2/4/6/8 */
-	MTK_DRV_GRP(2, 8, 1, 2, 2),
-	/* E8E4E2  2/4/6/8/10/12/14/16 */
-	MTK_DRV_GRP(2, 16, 0, 2, 2)
-};
-
-#define DRV_SEL0	0xf50
-#define DRV_SEL1	0xf60
-#define DRV_SEL2	0xf70
-#define DRV_SEL3	0xf80
-#define DRV_SEL4	0xf90
-#define DRV_SEL5	0xfa0
-#define DRV_SEL6	0xfb0
-#define DRV_SEL7	0xfe0
-#define DRV_SEL8	0xfd0
-#define DRV_SEL9	0xff0
-#define DRV_SEL10	0xf00
-
-#define MSDC0_CTRL0	0xcc0
-#define MSDC0_CTRL1	0xcd0
-#define MSDC0_CTRL2	0xce0
-#define MSDC0_CTRL3	0xcf0
-#define MSDC0_CTRL4	0xd00
-#define MSDC0_CTRL5	0xd10
-#define MSDC0_CTRL6	0xd20
-#define MSDC1_CTRL0	0xd30
-#define MSDC1_CTRL1	0xd40
-#define MSDC1_CTRL2	0xd50
-#define MSDC1_CTRL3	0xd60
-#define MSDC1_CTRL4	0xd70
-#define MSDC1_CTRL5	0xd80
-#define MSDC1_CTRL6	0xd90
-
-#define IES_EN0		0xb20
-#define IES_EN1		0xb30
-#define IES_EN2		0xb40
-
-#define SMT_EN0		0xb50
-#define SMT_EN1		0xb60
-#define SMT_EN2		0xb70
-
-static const struct mtk_pin_drv_grp mt7623_pin_drv[] = {
-	MTK_PIN_DRV_GRP(0, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(1, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(2, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(3, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(4, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(5, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(6, DRV_SEL0, 0, 1),
-	MTK_PIN_DRV_GRP(7, DRV_SEL0, 4, 1),
-	MTK_PIN_DRV_GRP(8, DRV_SEL0, 4, 1),
-	MTK_PIN_DRV_GRP(9, DRV_SEL0, 4, 1),
-	MTK_PIN_DRV_GRP(10, DRV_SEL0, 8, 1),
-	MTK_PIN_DRV_GRP(11, DRV_SEL0, 8, 1),
-	MTK_PIN_DRV_GRP(12, DRV_SEL0, 8, 1),
-	MTK_PIN_DRV_GRP(13, DRV_SEL0, 8, 1),
-	MTK_PIN_DRV_GRP(14, DRV_SEL0, 12, 0),
-	MTK_PIN_DRV_GRP(15, DRV_SEL0, 12, 0),
-	MTK_PIN_DRV_GRP(18, DRV_SEL1, 4, 0),
-	MTK_PIN_DRV_GRP(19, DRV_SEL1, 4, 0),
-	MTK_PIN_DRV_GRP(20, DRV_SEL1, 4, 0),
-	MTK_PIN_DRV_GRP(21, DRV_SEL1, 4, 0),
-	MTK_PIN_DRV_GRP(22, DRV_SEL1, 8, 0),
-	MTK_PIN_DRV_GRP(23, DRV_SEL1, 8, 0),
-	MTK_PIN_DRV_GRP(24, DRV_SEL1, 8, 0),
-	MTK_PIN_DRV_GRP(25, DRV_SEL1, 8, 0),
-	MTK_PIN_DRV_GRP(26, DRV_SEL1, 8, 0),
-	MTK_PIN_DRV_GRP(27, DRV_SEL1, 12, 0),
-	MTK_PIN_DRV_GRP(28, DRV_SEL1, 12, 0),
-	MTK_PIN_DRV_GRP(29, DRV_SEL1, 12, 0),
-	MTK_PIN_DRV_GRP(33, DRV_SEL2, 0, 0),
-	MTK_PIN_DRV_GRP(34, DRV_SEL2, 0, 0),
-	MTK_PIN_DRV_GRP(35, DRV_SEL2, 0, 0),
-	MTK_PIN_DRV_GRP(36, DRV_SEL2, 0, 0),
-	MTK_PIN_DRV_GRP(37, DRV_SEL2, 0, 0),
-	MTK_PIN_DRV_GRP(39, DRV_SEL2, 8, 1),
-	MTK_PIN_DRV_GRP(40, DRV_SEL2, 8, 1),
-	MTK_PIN_DRV_GRP(41, DRV_SEL2, 8, 1),
-	MTK_PIN_DRV_GRP(42, DRV_SEL2, 8, 1),
-	MTK_PIN_DRV_GRP(43, DRV_SEL2, 12, 0),
-	MTK_PIN_DRV_GRP(44, DRV_SEL2, 12, 0),
-	MTK_PIN_DRV_GRP(45, DRV_SEL2, 12, 0),
-	MTK_PIN_DRV_GRP(47, DRV_SEL3, 0, 0),
-	MTK_PIN_DRV_GRP(48, DRV_SEL3, 0, 0),
-	MTK_PIN_DRV_GRP(49, DRV_SEL3, 4, 0),
-	MTK_PIN_DRV_GRP(53, DRV_SEL3, 12, 0),
-	MTK_PIN_DRV_GRP(54, DRV_SEL3, 12, 0),
-	MTK_PIN_DRV_GRP(55, DRV_SEL3, 12, 0),
-	MTK_PIN_DRV_GRP(56, DRV_SEL3, 12, 0),
-	MTK_PIN_DRV_GRP(60, DRV_SEL4, 8, 1),
-	MTK_PIN_DRV_GRP(61, DRV_SEL4, 8, 1),
-	MTK_PIN_DRV_GRP(62, DRV_SEL4, 8, 1),
-	MTK_PIN_DRV_GRP(63, DRV_SEL4, 12, 1),
-	MTK_PIN_DRV_GRP(64, DRV_SEL4, 12, 1),
-	MTK_PIN_DRV_GRP(65, DRV_SEL4, 12, 1),
-	MTK_PIN_DRV_GRP(66, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(67, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(68, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(69, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(70, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(71, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(72, DRV_SEL3, 4, 0),
-	MTK_PIN_DRV_GRP(73, DRV_SEL3, 4, 0),
-	MTK_PIN_DRV_GRP(74, DRV_SEL3, 4, 0),
-	MTK_PIN_DRV_GRP(83, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(84, DRV_SEL5, 0, 1),
-	MTK_PIN_DRV_GRP(105, MSDC1_CTRL1, 0, 1),
-	MTK_PIN_DRV_GRP(106, MSDC1_CTRL0, 0, 1),
-	MTK_PIN_DRV_GRP(107, MSDC1_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(108, MSDC1_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(109, MSDC1_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(110, MSDC1_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(111, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(112, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(113, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(114, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(115, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(116, MSDC0_CTRL1, 0, 1),
-	MTK_PIN_DRV_GRP(117, MSDC0_CTRL0, 0, 1),
-	MTK_PIN_DRV_GRP(118, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(119, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(120, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(121, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(126, DRV_SEL3, 4, 0),
-	MTK_PIN_DRV_GRP(199, DRV_SEL0, 4, 1),
-	MTK_PIN_DRV_GRP(200, DRV_SEL8, 0, 0),
-	MTK_PIN_DRV_GRP(201, DRV_SEL8, 0, 0),
-	MTK_PIN_DRV_GRP(203, DRV_SEL8, 4, 0),
-	MTK_PIN_DRV_GRP(204, DRV_SEL8, 4, 0),
-	MTK_PIN_DRV_GRP(205, DRV_SEL8, 4, 0),
-	MTK_PIN_DRV_GRP(206, DRV_SEL8, 4, 0),
-	MTK_PIN_DRV_GRP(207, DRV_SEL8, 4, 0),
-	MTK_PIN_DRV_GRP(208, DRV_SEL8, 8, 0),
-	MTK_PIN_DRV_GRP(209, DRV_SEL8, 8, 0),
-	MTK_PIN_DRV_GRP(236, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(237, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(238, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(239, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(240, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(241, DRV_SEL9, 4, 0),
-	MTK_PIN_DRV_GRP(242, DRV_SEL9, 8, 0),
-	MTK_PIN_DRV_GRP(243, DRV_SEL9, 8, 0),
-	MTK_PIN_DRV_GRP(257, MSDC0_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(261, MSDC1_CTRL2, 0, 1),
-	MTK_PIN_DRV_GRP(262, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(263, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(264, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(265, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(266, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(267, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(268, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(269, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(270, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(271, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(272, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(274, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(275, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(276, DRV_SEL10, 8, 0),
-	MTK_PIN_DRV_GRP(278, DRV_SEL2, 8, 1),
-};
-
-static const struct mtk_pin_spec_pupd_set_samereg mt7623_spec_pupd[] = {
-	MTK_PIN_PUPD_SPEC_SR(105, MSDC1_CTRL1, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(106, MSDC1_CTRL0, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(107, MSDC1_CTRL3, 0, 1, 2),
-	MTK_PIN_PUPD_SPEC_SR(108, MSDC1_CTRL3, 4, 5, 6),
-	MTK_PIN_PUPD_SPEC_SR(109, MSDC1_CTRL3, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(110, MSDC1_CTRL3, 12, 13, 14),
-	MTK_PIN_PUPD_SPEC_SR(111, MSDC0_CTRL4, 12, 13, 14),
-	MTK_PIN_PUPD_SPEC_SR(112, MSDC0_CTRL4, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(113, MSDC0_CTRL4, 4, 5, 6),
-	MTK_PIN_PUPD_SPEC_SR(114, MSDC0_CTRL4, 0, 1, 2),
-	MTK_PIN_PUPD_SPEC_SR(115, MSDC0_CTRL5, 0, 1, 2),
-	MTK_PIN_PUPD_SPEC_SR(116, MSDC0_CTRL1, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(117, MSDC0_CTRL0, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(118, MSDC0_CTRL3, 12, 13, 14),
-	MTK_PIN_PUPD_SPEC_SR(119, MSDC0_CTRL3, 8, 9, 10),
-	MTK_PIN_PUPD_SPEC_SR(120, MSDC0_CTRL3, 4, 5, 6),
-	MTK_PIN_PUPD_SPEC_SR(121, MSDC0_CTRL3, 0, 1, 2),
-};
-
-static int mt7623_spec_pull_set(struct regmap *regmap, unsigned int pin,
-		unsigned char align, bool isup, unsigned int r1r0)
-{
-	return mtk_pctrl_spec_pull_set_samereg(regmap, mt7623_spec_pupd,
-		ARRAY_SIZE(mt7623_spec_pupd), pin, align, isup, r1r0);
-}
-
-static const struct mtk_pin_ies_smt_set mt7623_ies_set[] = {
-	MTK_PIN_IES_SMT_SPEC(0, 6, IES_EN0, 0),
-	MTK_PIN_IES_SMT_SPEC(7, 9, IES_EN0, 1),
-	MTK_PIN_IES_SMT_SPEC(10, 13, IES_EN0, 2),
-	MTK_PIN_IES_SMT_SPEC(14, 15, IES_EN0, 3),
-	MTK_PIN_IES_SMT_SPEC(18, 21, IES_EN0, 5),
-	MTK_PIN_IES_SMT_SPEC(22, 26, IES_EN0, 6),
-	MTK_PIN_IES_SMT_SPEC(27, 29, IES_EN0, 7),
-	MTK_PIN_IES_SMT_SPEC(33, 37, IES_EN0, 8),
-	MTK_PIN_IES_SMT_SPEC(39, 42, IES_EN0, 9),
-	MTK_PIN_IES_SMT_SPEC(43, 45, IES_EN0, 10),
-	MTK_PIN_IES_SMT_SPEC(47, 48, IES_EN0, 11),
-	MTK_PIN_IES_SMT_SPEC(49, 49, IES_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(53, 56, IES_EN0, 14),
-	MTK_PIN_IES_SMT_SPEC(60, 62, IES_EN1, 0),
-	MTK_PIN_IES_SMT_SPEC(63, 65, IES_EN1, 1),
-	MTK_PIN_IES_SMT_SPEC(66, 71, IES_EN1, 2),
-	MTK_PIN_IES_SMT_SPEC(72, 74, IES_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(75, 76, IES_EN1, 3),
-	MTK_PIN_IES_SMT_SPEC(83, 84, IES_EN1, 2),
-	MTK_PIN_IES_SMT_SPEC(105, 121, MSDC1_CTRL1, 4),
-	MTK_PIN_IES_SMT_SPEC(122, 125, IES_EN1, 7),
-	MTK_PIN_IES_SMT_SPEC(126, 126, IES_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(199, 201, IES_EN0, 1),
-	MTK_PIN_IES_SMT_SPEC(203, 207, IES_EN2, 2),
-	MTK_PIN_IES_SMT_SPEC(208, 209, IES_EN2, 3),
-	MTK_PIN_IES_SMT_SPEC(236, 241, IES_EN2, 6),
-	MTK_PIN_IES_SMT_SPEC(242, 243, IES_EN2, 7),
-	MTK_PIN_IES_SMT_SPEC(261, 261, MSDC1_CTRL2, 4),
-	MTK_PIN_IES_SMT_SPEC(262, 272, IES_EN2, 12),
-	MTK_PIN_IES_SMT_SPEC(274, 276, IES_EN2, 12),
-	MTK_PIN_IES_SMT_SPEC(278, 278, IES_EN2, 13),
-};
-
-static const struct mtk_pin_ies_smt_set mt7623_smt_set[] = {
-	MTK_PIN_IES_SMT_SPEC(0, 6, SMT_EN0, 0),
-	MTK_PIN_IES_SMT_SPEC(7, 9, SMT_EN0, 1),
-	MTK_PIN_IES_SMT_SPEC(10, 13, SMT_EN0, 2),
-	MTK_PIN_IES_SMT_SPEC(14, 15, SMT_EN0, 3),
-	MTK_PIN_IES_SMT_SPEC(18, 21, SMT_EN0, 5),
-	MTK_PIN_IES_SMT_SPEC(22, 26, SMT_EN0, 6),
-	MTK_PIN_IES_SMT_SPEC(27, 29, SMT_EN0, 7),
-	MTK_PIN_IES_SMT_SPEC(33, 37, SMT_EN0, 8),
-	MTK_PIN_IES_SMT_SPEC(39, 42, SMT_EN0, 9),
-	MTK_PIN_IES_SMT_SPEC(43, 45, SMT_EN0, 10),
-	MTK_PIN_IES_SMT_SPEC(47, 48, SMT_EN0, 11),
-	MTK_PIN_IES_SMT_SPEC(49, 49, SMT_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(53, 56, SMT_EN0, 14),
-	MTK_PIN_IES_SMT_SPEC(60, 62, SMT_EN1, 0),
-	MTK_PIN_IES_SMT_SPEC(63, 65, SMT_EN1, 1),
-	MTK_PIN_IES_SMT_SPEC(66, 71, SMT_EN1, 2),
-	MTK_PIN_IES_SMT_SPEC(72, 74, SMT_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(75, 76, SMT_EN1, 3),
-	MTK_PIN_IES_SMT_SPEC(83, 84, SMT_EN1, 2),
-	MTK_PIN_IES_SMT_SPEC(105, 106, MSDC1_CTRL1, 11),
-	MTK_PIN_IES_SMT_SPEC(107, 107, MSDC1_CTRL3, 3),
-	MTK_PIN_IES_SMT_SPEC(108, 108, MSDC1_CTRL3, 7),
-	MTK_PIN_IES_SMT_SPEC(109, 109, MSDC1_CTRL3, 11),
-	MTK_PIN_IES_SMT_SPEC(110, 111, MSDC1_CTRL3, 15),
-	MTK_PIN_IES_SMT_SPEC(112, 112, MSDC0_CTRL4, 11),
-	MTK_PIN_IES_SMT_SPEC(113, 113, MSDC0_CTRL4, 7),
-	MTK_PIN_IES_SMT_SPEC(114, 115, MSDC0_CTRL4, 3),
-	MTK_PIN_IES_SMT_SPEC(116, 117, MSDC0_CTRL1, 11),
-	MTK_PIN_IES_SMT_SPEC(118, 118, MSDC0_CTRL3, 15),
-	MTK_PIN_IES_SMT_SPEC(119, 119, MSDC0_CTRL3, 11),
-	MTK_PIN_IES_SMT_SPEC(120, 120, MSDC0_CTRL3, 7),
-	MTK_PIN_IES_SMT_SPEC(121, 121, MSDC0_CTRL3, 3),
-	MTK_PIN_IES_SMT_SPEC(122, 125, SMT_EN1, 7),
-	MTK_PIN_IES_SMT_SPEC(126, 126, SMT_EN0, 12),
-	MTK_PIN_IES_SMT_SPEC(199, 201, SMT_EN0, 1),
-	MTK_PIN_IES_SMT_SPEC(203, 207, SMT_EN2, 2),
-	MTK_PIN_IES_SMT_SPEC(208, 209, SMT_EN2, 3),
-	MTK_PIN_IES_SMT_SPEC(236, 241, SMT_EN2, 6),
-	MTK_PIN_IES_SMT_SPEC(242, 243, SMT_EN2, 7),
-	MTK_PIN_IES_SMT_SPEC(261, 261, MSDC1_CTRL6, 3),
-	MTK_PIN_IES_SMT_SPEC(262, 272, SMT_EN2, 12),
-	MTK_PIN_IES_SMT_SPEC(274, 276, SMT_EN2, 12),
-	MTK_PIN_IES_SMT_SPEC(278, 278, SMT_EN2, 13),
-};
-
-static int mt7623_ies_smt_set(struct regmap *regmap, unsigned int pin,
-		unsigned char align, int value, enum pin_config_param arg)
-{
-	if (arg == PIN_CONFIG_INPUT_ENABLE)
-		return mtk_pconf_spec_set_ies_smt_range(regmap, mt7623_ies_set,
-			ARRAY_SIZE(mt7623_ies_set), pin, align, value);
-	else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
-		return mtk_pconf_spec_set_ies_smt_range(regmap, mt7623_smt_set,
-			ARRAY_SIZE(mt7623_smt_set), pin, align, value);
-	return -EINVAL;
-}
-
-static const struct mtk_pinctrl_devdata mt7623_pinctrl_data = {
-	.pins = mtk_pins_mt7623,
-	.npins = ARRAY_SIZE(mtk_pins_mt7623),
-	.grp_desc = mt7623_drv_grp,
-	.n_grp_cls = ARRAY_SIZE(mt7623_drv_grp),
-	.pin_drv_grp = mt7623_pin_drv,
-	.n_pin_drv_grps = ARRAY_SIZE(mt7623_pin_drv),
-	.spec_pull_set = mt7623_spec_pull_set,
-	.spec_ies_smt_set = mt7623_ies_smt_set,
-	.dir_offset = 0x0000,
-	.pullen_offset = 0x0150,
-	.pullsel_offset = 0x0280,
-	.dout_offset = 0x0500,
-	.din_offset = 0x0630,
-	.pinmux_offset = 0x0760,
-	.type1_start = 280,
-	.type1_end = 280,
-	.port_shf = 4,
-	.port_mask = 0x1f,
-	.port_align = 4,
-	.eint_offsets = {
-		.name = "mt7623_eint",
-		.stat      = 0x000,
-		.ack       = 0x040,
-		.mask      = 0x080,
-		.mask_set  = 0x0c0,
-		.mask_clr  = 0x100,
-		.sens      = 0x140,
-		.sens_set  = 0x180,
-		.sens_clr  = 0x1c0,
-		.soft      = 0x200,
-		.soft_set  = 0x240,
-		.soft_clr  = 0x280,
-		.pol       = 0x300,
-		.pol_set   = 0x340,
-		.pol_clr   = 0x380,
-		.dom_en    = 0x400,
-		.dbnc_ctrl = 0x500,
-		.dbnc_set  = 0x600,
-		.dbnc_clr  = 0x700,
-		.port_mask = 6,
-		.ports     = 6,
-	},
-	.ap_num = 169,
-	.db_cnt = 16,
-};
-
-static int mt7623_pinctrl_probe(struct platform_device *pdev)
-{
-	return mtk_pctrl_init(pdev, &mt7623_pinctrl_data, NULL);
-}
-
-static const struct of_device_id mt7623_pctrl_match[] = {
-	{ .compatible = "mediatek,mt7623-pinctrl", },
-	{}
-};
-MODULE_DEVICE_TABLE(of, mt7623_pctrl_match);
-
-static struct platform_driver mtk_pinctrl_driver = {
-	.probe = mt7623_pinctrl_probe,
-	.driver = {
-		.name = "mediatek-mt7623-pinctrl",
-		.of_match_table = mt7623_pctrl_match,
-	},
-};
-
-static int __init mtk_pinctrl_init(void)
-{
-	return platform_driver_register(&mtk_pinctrl_driver);
-}
-
-arch_initcall(mtk_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h b/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h
deleted file mode 100644
index e06cfc4..0000000
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-mt7623.h
+++ /dev/null
@@ -1,1936 +0,0 @@
-/*
- * Copyright (c) 2016 John Crispin <john@phrozen.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef __PINCTRL_MTK_MT7623_H
-#define __PINCTRL_MTK_MT7623_H
-
-#include <linux/pinctrl/pinctrl.h>
-#include "pinctrl-mtk-common.h"
-
-static const struct mtk_desc_pin mtk_pins_mt7623[] = {
-	MTK_PIN(
-		PINCTRL_PIN(0, "PWRAP_SPI0_MI"),
-		"J20", "mt7623",
-		MTK_EINT_FUNCTION(0, 148),
-		MTK_FUNCTION(0, "GPIO0"),
-		MTK_FUNCTION(1, "PWRAP_SPIDO"),
-		MTK_FUNCTION(2, "PWRAP_SPIDI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(1, "PWRAP_SPI0_MO"),
-		"D10", "mt7623",
-		MTK_EINT_FUNCTION(0, 149),
-		MTK_FUNCTION(0, "GPIO1"),
-		MTK_FUNCTION(1, "PWRAP_SPIDI"),
-		MTK_FUNCTION(2, "PWRAP_SPIDO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(2, "PWRAP_INT"),
-		"E11", "mt7623",
-		MTK_EINT_FUNCTION(0, 150),
-		MTK_FUNCTION(0, "GPIO2"),
-		MTK_FUNCTION(1, "PWRAP_INT")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(3, "PWRAP_SPI0_CK"),
-		"H12", "mt7623",
-		MTK_EINT_FUNCTION(0, 151),
-		MTK_FUNCTION(0, "GPIO3"),
-		MTK_FUNCTION(1, "PWRAP_SPICK_I")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(4, "PWRAP_SPI0_CSN"),
-		"E12", "mt7623",
-		MTK_EINT_FUNCTION(0, 152),
-		MTK_FUNCTION(0, "GPIO4"),
-		MTK_FUNCTION(1, "PWRAP_SPICS_B_I")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(5, "PWRAP_SPI0_CK2"),
-		"H11", "mt7623",
-		MTK_EINT_FUNCTION(0, 155),
-		MTK_FUNCTION(0, "GPIO5"),
-		MTK_FUNCTION(1, "PWRAP_SPICK2_I")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(6, "PWRAP_SPI0_CSN2"),
-		"G11", "mt7623",
-		MTK_EINT_FUNCTION(0, 156),
-		MTK_FUNCTION(0, "GPIO6"),
-		MTK_FUNCTION(1, "PWRAP_SPICS2_B_I")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(7, "SPI1_CSN"),
-		"G19", "mt7623",
-		MTK_EINT_FUNCTION(0, 153),
-		MTK_FUNCTION(0, "GPIO7"),
-		MTK_FUNCTION(1, "SPI1_CS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(8, "SPI1_MI"),
-		"F19", "mt7623",
-		MTK_EINT_FUNCTION(0, 154),
-		MTK_FUNCTION(0, "GPIO8"),
-		MTK_FUNCTION(1, "SPI1_MI"),
-		MTK_FUNCTION(2, "SPI1_MO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(9, "SPI1_MO"),
-		"G20", "mt7623",
-		MTK_EINT_FUNCTION(0, 157),
-		MTK_FUNCTION(0, "GPIO9"),
-		MTK_FUNCTION(1, "SPI1_MO"),
-		MTK_FUNCTION(2, "SPI1_MI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(10, "RTC32K_CK"),
-		"A13", "mt7623",
-		MTK_EINT_FUNCTION(0, 158),
-		MTK_FUNCTION(0, "GPIO10"),
-		MTK_FUNCTION(1, "RTC32K_CK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(11, "WATCHDOG"),
-		"D14", "mt7623",
-		MTK_EINT_FUNCTION(0, 159),
-		MTK_FUNCTION(0, "GPIO11"),
-		MTK_FUNCTION(1, "WATCHDOG")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(12, "SRCLKENA"),
-		"C13", "mt7623",
-		MTK_EINT_FUNCTION(0, 169),
-		MTK_FUNCTION(0, "GPIO12"),
-		MTK_FUNCTION(1, "SRCLKENA")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(13, "SRCLKENAI"),
-		"B13", "mt7623",
-		MTK_EINT_FUNCTION(0, 161),
-		MTK_FUNCTION(0, "GPIO13"),
-		MTK_FUNCTION(1, "SRCLKENAI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(14, "GPIO14"),
-		"E18", "mt7623",
-		MTK_EINT_FUNCTION(0, 162),
-		MTK_FUNCTION(0, "GPIO14"),
-		MTK_FUNCTION(1, "URXD2"),
-		MTK_FUNCTION(2, "UTXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(15, "GPIO15"),
-		"E17", "mt7623",
-		MTK_EINT_FUNCTION(0, 163),
-		MTK_FUNCTION(0, "GPIO15"),
-		MTK_FUNCTION(1, "UTXD2"),
-		MTK_FUNCTION(2, "URXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(16, "GPIO16"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO16")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(17, "GPIO17"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO17")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(18, "PCM_CLK"),
-		"C19", "mt7623",
-		MTK_EINT_FUNCTION(0, 166),
-		MTK_FUNCTION(0, "GPIO18"),
-		MTK_FUNCTION(1, "PCM_CLK0"),
-		MTK_FUNCTION(6, "AP_PCM_CLKO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(19, "PCM_SYNC"),
-		"D19", "mt7623",
-		MTK_EINT_FUNCTION(0, 167),
-		MTK_FUNCTION(0, "GPIO19"),
-		MTK_FUNCTION(1, "PCM_SYNC"),
-		MTK_FUNCTION(6, "AP_PCM_SYNC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(20, "PCM_RX"),
-		"D18", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO20"),
-		MTK_FUNCTION(1, "PCM_RX"),
-		MTK_FUNCTION(4, "PCM_TX"),
-		MTK_FUNCTION(6, "AP_PCM_RX")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(21, "PCM_TX"),
-		"C18", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO21"),
-		MTK_FUNCTION(1, "PCM_TX"),
-		MTK_FUNCTION(4, "PCM_RX"),
-		MTK_FUNCTION(6, "AP_PCM_TX")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(22, "EINT0"),
-		"H15", "mt7623",
-		MTK_EINT_FUNCTION(0, 0),
-		MTK_FUNCTION(0, "GPIO22"),
-		MTK_FUNCTION(1, "UCTS0"),
-		MTK_FUNCTION(2, "PCIE0_PERST_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(23, "EINT1"),
-		"J16", "mt7623",
-		MTK_EINT_FUNCTION(0, 1),
-		MTK_FUNCTION(0, "GPIO23"),
-		MTK_FUNCTION(1, "URTS0"),
-		MTK_FUNCTION(2, "PCIE1_PERST_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(24, "EINT2"),
-		"H16", "mt7623",
-		MTK_EINT_FUNCTION(0, 2),
-		MTK_FUNCTION(0, "GPIO24"),
-		MTK_FUNCTION(1, "UCTS1"),
-		MTK_FUNCTION(2, "PCIE2_PERST_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(25, "EINT3"),
-		"K15", "mt7623",
-		MTK_EINT_FUNCTION(0, 3),
-		MTK_FUNCTION(0, "GPIO25"),
-		MTK_FUNCTION(1, "URTS1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(26, "EINT4"),
-		"G15", "mt7623",
-		MTK_EINT_FUNCTION(0, 4),
-		MTK_FUNCTION(0, "GPIO26"),
-		MTK_FUNCTION(1, "UCTS3"),
-		MTK_FUNCTION(6, "PCIE2_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(27, "EINT5"),
-		"F15", "mt7623",
-		MTK_EINT_FUNCTION(0, 5),
-		MTK_FUNCTION(0, "GPIO27"),
-		MTK_FUNCTION(1, "URTS3"),
-		MTK_FUNCTION(6, "PCIE1_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(28, "EINT6"),
-		"J15", "mt7623",
-		MTK_EINT_FUNCTION(0, 6),
-		MTK_FUNCTION(0, "GPIO28"),
-		MTK_FUNCTION(1, "DRV_VBUS"),
-		MTK_FUNCTION(6, "PCIE0_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(29, "EINT7"),
-		"E15", "mt7623",
-		MTK_EINT_FUNCTION(0, 7),
-		MTK_FUNCTION(0, "GPIO29"),
-		MTK_FUNCTION(1, "IDDIG"),
-		MTK_FUNCTION(2, "MSDC1_WP"),
-		MTK_FUNCTION(6, "PCIE2_PERST_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(30, "GPIO30"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO30")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(31, "GPIO31"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO31")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(32, "GPIO32"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO32")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(33, "I2S1_DATA"),
-		"Y18", "mt7623",
-		MTK_EINT_FUNCTION(0, 15),
-		MTK_FUNCTION(0, "GPIO33"),
-		MTK_FUNCTION(1, "I2S1_DATA"),
-		MTK_FUNCTION(3, "PCM_TX"),
-		MTK_FUNCTION(6, "AP_PCM_TX")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(34, "I2S1_DATA_IN"),
-		"Y17", "mt7623",
-		MTK_EINT_FUNCTION(0, 16),
-		MTK_FUNCTION(0, "GPIO34"),
-		MTK_FUNCTION(1, "I2S1_DATA_IN"),
-		MTK_FUNCTION(3, "PCM_RX"),
-		MTK_FUNCTION(6, "AP_PCM_RX")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(35, "I2S1_BCK"),
-		"V17", "mt7623",
-		MTK_EINT_FUNCTION(0, 17),
-		MTK_FUNCTION(0, "GPIO35"),
-		MTK_FUNCTION(1, "I2S1_BCK"),
-		MTK_FUNCTION(3, "PCM_CLK0"),
-		MTK_FUNCTION(6, "AP_PCM_CLKO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(36, "I2S1_LRCK"),
-		"W17", "mt7623",
-		MTK_EINT_FUNCTION(0, 18),
-		MTK_FUNCTION(0, "GPIO36"),
-		MTK_FUNCTION(1, "I2S1_LRCK"),
-		MTK_FUNCTION(3, "PCM_SYNC"),
-		MTK_FUNCTION(6, "AP_PCM_SYNC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(37, "I2S1_MCLK"),
-		"AA18", "mt7623",
-		MTK_EINT_FUNCTION(0, 19),
-		MTK_FUNCTION(0, "GPIO37"),
-		MTK_FUNCTION(1, "I2S1_MCLK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(38, "GPIO38"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO38")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(39, "JTMS"),
-		"G21", "mt7623",
-		MTK_EINT_FUNCTION(0, 21),
-		MTK_FUNCTION(0, "GPIO39"),
-		MTK_FUNCTION(1, "JTMS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(40, "GPIO40"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO40")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(41, "JTDI"),
-		"H22", "mt7623",
-		MTK_EINT_FUNCTION(0, 23),
-		MTK_FUNCTION(0, "GPIO41"),
-		MTK_FUNCTION(1, "JTDI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(42, "JTDO"),
-		"H21", "mt7623",
-		MTK_EINT_FUNCTION(0, 24),
-		MTK_FUNCTION(0, "GPIO42"),
-		MTK_FUNCTION(1, "JTDO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(43, "NCLE"),
-		"C7", "mt7623",
-		MTK_EINT_FUNCTION(0, 25),
-		MTK_FUNCTION(0, "GPIO43"),
-		MTK_FUNCTION(1, "NCLE"),
-		MTK_FUNCTION(2, "EXT_XCS2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(44, "NCEB1"),
-		"C6", "mt7623",
-		MTK_EINT_FUNCTION(0, 26),
-		MTK_FUNCTION(0, "GPIO44"),
-		MTK_FUNCTION(1, "NCEB1"),
-		MTK_FUNCTION(2, "IDDIG")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(45, "NCEB0"),
-		"D7", "mt7623",
-		MTK_EINT_FUNCTION(0, 27),
-		MTK_FUNCTION(0, "GPIO45"),
-		MTK_FUNCTION(1, "NCEB0"),
-		MTK_FUNCTION(2, "DRV_VBUS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(46, "IR"),
-		"D15", "mt7623",
-		MTK_EINT_FUNCTION(0, 28),
-		MTK_FUNCTION(0, "GPIO46"),
-		MTK_FUNCTION(1, "IR")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(47, "NREB"),
-		"A6", "mt7623",
-		MTK_EINT_FUNCTION(0, 29),
-		MTK_FUNCTION(0, "GPIO47"),
-		MTK_FUNCTION(1, "NREB")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(48, "NRNB"),
-		"B6", "mt7623",
-		MTK_EINT_FUNCTION(0, 30),
-		MTK_FUNCTION(0, "GPIO48"),
-		MTK_FUNCTION(1, "NRNB")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(49, "I2S0_DATA"),
-		"AB18", "mt7623",
-		MTK_EINT_FUNCTION(0, 31),
-		MTK_FUNCTION(0, "GPIO49"),
-		MTK_FUNCTION(1, "I2S0_DATA"),
-		MTK_FUNCTION(3, "PCM_TX"),
-		MTK_FUNCTION(6, "AP_I2S_DO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(50, "GPIO50"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO50")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(51, "GPIO51"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO51")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(52, "GPIO52"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO52")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(53, "SPI0_CSN"),
-		"E7", "mt7623",
-		MTK_EINT_FUNCTION(0, 35),
-		MTK_FUNCTION(0, "GPIO53"),
-		MTK_FUNCTION(1, "SPI0_CS"),
-		MTK_FUNCTION(5, "PWM1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(54, "SPI0_CK"),
-		"F7", "mt7623",
-		MTK_EINT_FUNCTION(0, 36),
-		MTK_FUNCTION(0, "GPIO54"),
-		MTK_FUNCTION(1, "SPI0_CK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(55, "SPI0_MI"),
-		"E6", "mt7623",
-		MTK_EINT_FUNCTION(0, 37),
-		MTK_FUNCTION(0, "GPIO55"),
-		MTK_FUNCTION(1, "SPI0_MI"),
-		MTK_FUNCTION(2, "SPI0_MO"),
-		MTK_FUNCTION(3, "MSDC1_WP"),
-		MTK_FUNCTION(5, "PWM2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(56, "SPI0_MO"),
-		"G7", "mt7623",
-		MTK_EINT_FUNCTION(0, 38),
-		MTK_FUNCTION(0, "GPIO56"),
-		MTK_FUNCTION(1, "SPI0_MO"),
-		MTK_FUNCTION(2, "SPI0_MI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(57, "GPIO57"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO57")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(58, "GPIO58"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO58")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(59, "GPIO59"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO59")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(60, "WB_RSTB"),
-		"Y21", "mt7623",
-		MTK_EINT_FUNCTION(0, 41),
-		MTK_FUNCTION(0, "GPIO60"),
-		MTK_FUNCTION(1, "WB_RSTB")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(61, "GPIO61"),
-		"AA21", "mt7623",
-		MTK_EINT_FUNCTION(0, 42),
-		MTK_FUNCTION(0, "GPIO61"),
-		MTK_FUNCTION(1, "TEST_FD")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(62, "GPIO62"),
-		"AB22", "mt7623",
-		MTK_EINT_FUNCTION(0, 43),
-		MTK_FUNCTION(0, "GPIO62"),
-		MTK_FUNCTION(1, "TEST_FC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(63, "WB_SCLK"),
-		"AC23", "mt7623",
-		MTK_EINT_FUNCTION(0, 44),
-		MTK_FUNCTION(0, "GPIO63"),
-		MTK_FUNCTION(1, "WB_SCLK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(64, "WB_SDATA"),
-		"AB21", "mt7623",
-		MTK_EINT_FUNCTION(0, 45),
-		MTK_FUNCTION(0, "GPIO64"),
-		MTK_FUNCTION(1, "WB_SDATA")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(65, "WB_SEN"),
-		"AB24", "mt7623",
-		MTK_EINT_FUNCTION(0, 46),
-		MTK_FUNCTION(0, "GPIO65"),
-		MTK_FUNCTION(1, "WB_SEN")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(66, "WB_CRTL0"),
-		"AB20", "mt7623",
-		MTK_EINT_FUNCTION(0, 47),
-		MTK_FUNCTION(0, "GPIO66"),
-		MTK_FUNCTION(1, "WB_CRTL0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(67, "WB_CRTL1"),
-		"AC20", "mt7623",
-		MTK_EINT_FUNCTION(0, 48),
-		MTK_FUNCTION(0, "GPIO67"),
-		MTK_FUNCTION(1, "WB_CRTL1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(68, "WB_CRTL2"),
-		"AB19", "mt7623",
-		MTK_EINT_FUNCTION(0, 49),
-		MTK_FUNCTION(0, "GPIO68"),
-		MTK_FUNCTION(1, "WB_CRTL2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(69, "WB_CRTL3"),
-		"AC19", "mt7623",
-		MTK_EINT_FUNCTION(0, 50),
-		MTK_FUNCTION(0, "GPIO69"),
-		MTK_FUNCTION(1, "WB_CRTL3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(70, "WB_CRTL4"),
-		"AD19", "mt7623",
-		MTK_EINT_FUNCTION(0, 51),
-		MTK_FUNCTION(0, "GPIO70"),
-		MTK_FUNCTION(1, "WB_CRTL4")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(71, "WB_CRTL5"),
-		"AE19", "mt7623",
-		MTK_EINT_FUNCTION(0, 52),
-		MTK_FUNCTION(0, "GPIO71"),
-		MTK_FUNCTION(1, "WB_CRTL5")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(72, "I2S0_DATA_IN"),
-		"AA20", "mt7623",
-		MTK_EINT_FUNCTION(0, 53),
-		MTK_FUNCTION(0, "GPIO72"),
-		MTK_FUNCTION(1, "I2S0_DATA_IN"),
-		MTK_FUNCTION(3, "PCM_RX"),
-		MTK_FUNCTION(4, "PWM0"),
-		MTK_FUNCTION(5, "DISP_PWM"),
-		MTK_FUNCTION(6, "AP_I2S_DI")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(73, "I2S0_LRCK"),
-		"Y20", "mt7623",
-		MTK_EINT_FUNCTION(0, 54),
-		MTK_FUNCTION(0, "GPIO73"),
-		MTK_FUNCTION(1, "I2S0_LRCK"),
-		MTK_FUNCTION(3, "PCM_SYNC"),
-		MTK_FUNCTION(6, "AP_I2S_LRCK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(74, "I2S0_BCK"),
-		"Y19", "mt7623",
-		MTK_EINT_FUNCTION(0, 55),
-		MTK_FUNCTION(0, "GPIO74"),
-		MTK_FUNCTION(1, "I2S0_BCK"),
-		MTK_FUNCTION(3, "PCM_CLK0"),
-		MTK_FUNCTION(6, "AP_I2S_BCK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(75, "SDA0"),
-		"K19", "mt7623",
-		MTK_EINT_FUNCTION(0, 56),
-		MTK_FUNCTION(0, "GPIO75"),
-		MTK_FUNCTION(1, "SDA0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(76, "SCL0"),
-		"K20", "mt7623",
-		MTK_EINT_FUNCTION(0, 57),
-		MTK_FUNCTION(0, "GPIO76"),
-		MTK_FUNCTION(1, "SCL0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(77, "GPIO77"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO77")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(78, "GPIO78"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO78")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(79, "GPIO79"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO79")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(80, "GPIO80"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO80")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(81, "GPIO81"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO81")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(82, "GPIO82"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO82")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(83, "LCM_RST"),
-		"V16", "mt7623",
-		MTK_EINT_FUNCTION(0, 64),
-		MTK_FUNCTION(0, "GPIO83"),
-		MTK_FUNCTION(1, "LCM_RST")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(84, "DSI_TE"),
-		"V14", "mt7623",
-		MTK_EINT_FUNCTION(0, 65),
-		MTK_FUNCTION(0, "GPIO84"),
-		MTK_FUNCTION(1, "DSI_TE")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(85, "GPIO85"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO85")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(86, "GPIO86"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO86")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(87, "GPIO87"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO87")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(88, "GPIO88"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO88")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(89, "GPIO89"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO89")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(90, "GPIO90"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO90")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(91, "GPIO91"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO91")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(92, "GPIO92"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO92")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(93, "GPIO93"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO93")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(94, "GPIO94"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO94")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(95, "MIPI_TCN"),
-		"AB14", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO95"),
-		MTK_FUNCTION(1, "TCN")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(96, "MIPI_TCP"),
-		"AC14", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO96"),
-		MTK_FUNCTION(1, "TCP")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(97, "MIPI_TDN1"),
-		"AE15", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO97"),
-		MTK_FUNCTION(1, "TDN1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(98, "MIPI_TDP1"),
-		"AD15", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO98"),
-		MTK_FUNCTION(1, "TDP1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(99, "MIPI_TDN0"),
-		"AB15", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO99"),
-		MTK_FUNCTION(1, "TDN0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(100, "MIPI_TDP0"),
-		"AC15", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO100"),
-		MTK_FUNCTION(1, "TDP0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(101, "GPIO101"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO101")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(102, "GPIO102"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO102")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(103, "GPIO103"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO103")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(104, "GPIO104"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO104")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(105, "MSDC1_CMD"),
-		"AD2", "mt7623",
-		MTK_EINT_FUNCTION(0, 78),
-		MTK_FUNCTION(0, "GPIO105"),
-		MTK_FUNCTION(1, "MSDC1_CMD"),
-		MTK_FUNCTION(3, "SDA1"),
-		MTK_FUNCTION(6, "I2SOUT_BCK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(106, "MSDC1_CLK"),
-		"AD3", "mt7623",
-		MTK_EINT_FUNCTION(0, 79),
-		MTK_FUNCTION(0, "GPIO106"),
-		MTK_FUNCTION(1, "MSDC1_CLK"),
-		MTK_FUNCTION(3, "SCL1"),
-		MTK_FUNCTION(6, "I2SOUT_LRCK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(107, "MSDC1_DAT0"),
-		"AE2", "mt7623",
-		MTK_EINT_FUNCTION(0, 80),
-		MTK_FUNCTION(0, "GPIO107"),
-		MTK_FUNCTION(1, "MSDC1_DAT0"),
-		MTK_FUNCTION(5, "UTXD0"),
-		MTK_FUNCTION(6, "I2SOUT_DATA_OUT")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(108, "MSDC1_DAT1"),
-		"AC1", "mt7623",
-		MTK_EINT_FUNCTION(0, 81),
-		MTK_FUNCTION(0, "GPIO108"),
-		MTK_FUNCTION(1, "MSDC1_DAT1"),
-		MTK_FUNCTION(3, "PWM0"),
-		MTK_FUNCTION(5, "URXD0"),
-		MTK_FUNCTION(6, "PWM1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(109, "MSDC1_DAT2"),
-		"AC3", "mt7623",
-		MTK_EINT_FUNCTION(0, 82),
-		MTK_FUNCTION(0, "GPIO109"),
-		MTK_FUNCTION(1, "MSDC1_DAT2"),
-		MTK_FUNCTION(3, "SDA2"),
-		MTK_FUNCTION(5, "UTXD1"),
-		MTK_FUNCTION(6, "PWM2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(110, "MSDC1_DAT3"),
-		"AC4", "mt7623",
-		MTK_EINT_FUNCTION(0, 83),
-		MTK_FUNCTION(0, "GPIO110"),
-		MTK_FUNCTION(1, "MSDC1_DAT3"),
-		MTK_FUNCTION(3, "SCL2"),
-		MTK_FUNCTION(5, "URXD1"),
-		MTK_FUNCTION(6, "PWM3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(111, "MSDC0_DAT7"),
-		"A2", "mt7623",
-		MTK_EINT_FUNCTION(0, 84),
-		MTK_FUNCTION(0, "GPIO111"),
-		MTK_FUNCTION(1, "MSDC0_DAT7"),
-		MTK_FUNCTION(4, "NLD7")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(112, "MSDC0_DAT6"),
-		"B3", "mt7623",
-		MTK_EINT_FUNCTION(0, 85),
-		MTK_FUNCTION(0, "GPIO112"),
-		MTK_FUNCTION(1, "MSDC0_DAT6"),
-		MTK_FUNCTION(4, "NLD6")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(113, "MSDC0_DAT5"),
-		"C4", "mt7623",
-		MTK_EINT_FUNCTION(0, 86),
-		MTK_FUNCTION(0, "GPIO113"),
-		MTK_FUNCTION(1, "MSDC0_DAT5"),
-		MTK_FUNCTION(4, "NLD5")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(114, "MSDC0_DAT4"),
-		"A4", "mt7623",
-		MTK_EINT_FUNCTION(0, 87),
-		MTK_FUNCTION(0, "GPIO114"),
-		MTK_FUNCTION(1, "MSDC0_DAT4"),
-		MTK_FUNCTION(4, "NLD4")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(115, "MSDC0_RSTB"),
-		"C5", "mt7623",
-		MTK_EINT_FUNCTION(0, 88),
-		MTK_FUNCTION(0, "GPIO115"),
-		MTK_FUNCTION(1, "MSDC0_RSTB"),
-		MTK_FUNCTION(4, "NLD8")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(116, "MSDC0_CMD"),
-		"D5", "mt7623",
-		MTK_EINT_FUNCTION(0, 89),
-		MTK_FUNCTION(0, "GPIO116"),
-		MTK_FUNCTION(1, "MSDC0_CMD"),
-		MTK_FUNCTION(4, "NALE")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(117, "MSDC0_CLK"),
-		"B1", "mt7623",
-		MTK_EINT_FUNCTION(0, 90),
-		MTK_FUNCTION(0, "GPIO117"),
-		MTK_FUNCTION(1, "MSDC0_CLK"),
-		MTK_FUNCTION(4, "NWEB")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(118, "MSDC0_DAT3"),
-		"D6", "mt7623",
-		MTK_EINT_FUNCTION(0, 91),
-		MTK_FUNCTION(0, "GPIO118"),
-		MTK_FUNCTION(1, "MSDC0_DAT3"),
-		MTK_FUNCTION(4, "NLD3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(119, "MSDC0_DAT2"),
-		"B2", "mt7623",
-		MTK_EINT_FUNCTION(0, 92),
-		MTK_FUNCTION(0, "GPIO119"),
-		MTK_FUNCTION(1, "MSDC0_DAT2"),
-		MTK_FUNCTION(4, "NLD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(120, "MSDC0_DAT1"),
-		"A3", "mt7623",
-		MTK_EINT_FUNCTION(0, 93),
-		MTK_FUNCTION(0, "GPIO120"),
-		MTK_FUNCTION(1, "MSDC0_DAT1"),
-		MTK_FUNCTION(4, "NLD1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(121, "MSDC0_DAT0"),
-		"B4", "mt7623",
-		MTK_EINT_FUNCTION(0, 94),
-		MTK_FUNCTION(0, "GPIO121"),
-		MTK_FUNCTION(1, "MSDC0_DAT0"),
-		MTK_FUNCTION(4, "NLD0"),
-		MTK_FUNCTION(5, "WATCHDOG")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(122, "GPIO122"),
-		"H17", "mt7623",
-		MTK_EINT_FUNCTION(0, 95),
-		MTK_FUNCTION(0, "GPIO122"),
-		MTK_FUNCTION(1, "TEST"),
-		MTK_FUNCTION(4, "SDA2"),
-		MTK_FUNCTION(5, "URXD0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(123, "GPIO123"),
-		"F17", "mt7623",
-		MTK_EINT_FUNCTION(0, 96),
-		MTK_FUNCTION(0, "GPIO123"),
-		MTK_FUNCTION(1, "TEST"),
-		MTK_FUNCTION(4, "SCL2"),
-		MTK_FUNCTION(5, "UTXD0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(124, "GPIO124"),
-		"H18", "mt7623",
-		MTK_EINT_FUNCTION(0, 97),
-		MTK_FUNCTION(0, "GPIO124"),
-		MTK_FUNCTION(1, "TEST"),
-		MTK_FUNCTION(4, "SDA1"),
-		MTK_FUNCTION(5, "PWM3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(125, "GPIO125"),
-		"G17", "mt7623",
-		MTK_EINT_FUNCTION(0, 98),
-		MTK_FUNCTION(0, "GPIO125"),
-		MTK_FUNCTION(1, "TEST"),
-		MTK_FUNCTION(4, "SCL1"),
-		MTK_FUNCTION(5, "PWM4")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(126, "I2S0_MCLK"),
-		"AA19", "mt7623",
-		MTK_EINT_FUNCTION(0, 99),
-		MTK_FUNCTION(0, "GPIO126"),
-		MTK_FUNCTION(1, "I2S0_MCLK"),
-		MTK_FUNCTION(6, "AP_I2S_MCLK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(127, "GPIO127"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO127")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(128, "GPIO128"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO128")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(129, "GPIO129"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO129")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(130, "GPIO130"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO130")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(131, "GPIO131"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO131")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(132, "GPIO132"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO132")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(133, "GPIO133"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO133")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(134, "GPIO134"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO134")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(135, "GPIO135"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO135")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(136, "GPIO136"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO136")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(137, "GPIO137"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO137")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(138, "GPIO138"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO138")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(139, "GPIO139"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO139")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(140, "GPIO140"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO140")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(141, "GPIO141"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO141")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(142, "GPIO142"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO142")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(143, "GPIO143"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO143")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(144, "GPIO144"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO144")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(145, "GPIO145"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO145")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(146, "GPIO146"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO146")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(147, "GPIO147"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO147")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(148, "GPIO148"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO148")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(149, "GPIO149"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO149")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(150, "GPIO150"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO150")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(151, "GPIO151"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO151")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(152, "GPIO152"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO152")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(153, "GPIO153"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO153")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(154, "GPIO154"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO154")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(155, "GPIO155"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO155")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(156, "GPIO156"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO156")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(157, "GPIO157"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO157")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(158, "GPIO158"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO158")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(159, "GPIO159"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO159")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(160, "GPIO160"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO160")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(161, "GPIO161"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO161")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(162, "GPIO162"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO162")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(163, "GPIO163"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO163")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(164, "GPIO164"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO164")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(165, "GPIO165"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO165")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(166, "GPIO166"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO166")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(167, "GPIO167"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO167")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(168, "GPIO168"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO168")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(169, "GPIO169"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO169")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(170, "GPIO170"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO170")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(171, "GPIO171"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO171")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(172, "GPIO172"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO172")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(173, "GPIO173"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO173")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(174, "GPIO174"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO174")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(175, "GPIO175"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO175")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(176, "GPIO176"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO176")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(177, "GPIO177"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO177")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(178, "GPIO178"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO178")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(179, "GPIO179"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO179")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(180, "GPIO180"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO180")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(181, "GPIO181"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO181")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(182, "GPIO182"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO182")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(183, "GPIO183"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO183")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(184, "GPIO184"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO184")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(185, "GPIO185"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO185")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(186, "GPIO186"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO186")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(187, "GPIO187"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO187")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(188, "GPIO188"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO188")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(189, "GPIO189"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO189")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(190, "GPIO190"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO190")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(191, "GPIO191"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO191")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(192, "GPIO192"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO192")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(193, "GPIO193"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO193")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(194, "GPIO194"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO194")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(195, "GPIO195"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO195")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(196, "GPIO196"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO196")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(197, "GPIO197"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO197")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(198, "GPIO198"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO198")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(199, "SPI1_CK"),
-		"E19", "mt7623",
-		MTK_EINT_FUNCTION(0, 111),
-		MTK_FUNCTION(0, "GPIO199"),
-		MTK_FUNCTION(1, "SPI1_CK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(200, "URXD2"),
-		"K18", "mt7623",
-		MTK_EINT_FUNCTION(0, 112),
-		MTK_FUNCTION(0, "GPIO200"),
-		MTK_FUNCTION(6, "URXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(201, "UTXD2"),
-		"L18", "mt7623",
-		MTK_EINT_FUNCTION(0, 113),
-		MTK_FUNCTION(0, "GPIO201"),
-		MTK_FUNCTION(6, "UTXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(202, "GPIO202"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO202")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(203, "PWM0"),
-		"AA16", "mt7623",
-		MTK_EINT_FUNCTION(0, 115),
-		MTK_FUNCTION(0, "GPIO203"),
-		MTK_FUNCTION(1, "PWM0"),
-		MTK_FUNCTION(2, "DISP_PWM")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(204, "PWM1"),
-		"Y16", "mt7623",
-		MTK_EINT_FUNCTION(0, 116),
-		MTK_FUNCTION(0, "GPIO204"),
-		MTK_FUNCTION(1, "PWM1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(205, "PWM2"),
-		"AA15", "mt7623",
-		MTK_EINT_FUNCTION(0, 117),
-		MTK_FUNCTION(0, "GPIO205"),
-		MTK_FUNCTION(1, "PWM2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(206, "PWM3"),
-		"AA17", "mt7623",
-		MTK_EINT_FUNCTION(0, 118),
-		MTK_FUNCTION(0, "GPIO206"),
-		MTK_FUNCTION(1, "PWM3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(207, "PWM4"),
-		"Y15", "mt7623",
-		MTK_EINT_FUNCTION(0, 119),
-		MTK_FUNCTION(0, "GPIO207"),
-		MTK_FUNCTION(1, "PWM4")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(208, "AUD_EXT_CK1"),
-		"W14", "mt7623",
-		MTK_EINT_FUNCTION(0, 120),
-		MTK_FUNCTION(0, "GPIO208"),
-		MTK_FUNCTION(1, "AUD_EXT_CK1"),
-		MTK_FUNCTION(2, "PWM0"),
-		MTK_FUNCTION(3, "PCIE0_PERST_N"),
-		MTK_FUNCTION(5, "DISP_PWM")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(209, "AUD_EXT_CK2"),
-		"V15", "mt7623",
-		MTK_EINT_FUNCTION(0, 121),
-		MTK_FUNCTION(0, "GPIO209"),
-		MTK_FUNCTION(1, "AUD_EXT_CK2"),
-		MTK_FUNCTION(2, "MSDC1_WP"),
-		MTK_FUNCTION(3, "PCIE1_PERST_N"),
-		MTK_FUNCTION(5, "PWM1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(210, "GPIO210"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO210")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(211, "GPIO211"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO211")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(212, "GPIO212"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO212")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(213, "GPIO213"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO213")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(214, "GPIO214"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO214")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(215, "GPIO215"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO215")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(216, "GPIO216"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO216")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(217, "GPIO217"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO217")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(218, "GPIO218"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO218")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(219, "GPIO219"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO219")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(220, "GPIO220"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO220")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(221, "GPIO221"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO221")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(222, "GPIO222"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO222")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(223, "GPIO223"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO223")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(224, "GPIO224"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO224")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(225, "GPIO225"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO225")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(226, "GPIO226"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO226")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(227, "GPIO227"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO227")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(228, "GPIO228"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO228")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(229, "GPIO229"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO229")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(230, "GPIO230"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO230")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(231, "GPIO231"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO231")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(232, "GPIO232"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO232")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(233, "GPIO233"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO233")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(234, "GPIO234"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO234")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(235, "GPIO235"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO235")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(236, "EXT_SDIO3"),
-		"A8", "mt7623",
-		MTK_EINT_FUNCTION(0, 122),
-		MTK_FUNCTION(0, "GPIO236"),
-		MTK_FUNCTION(1, "EXT_SDIO3"),
-		MTK_FUNCTION(2, "IDDIG")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(237, "EXT_SDIO2"),
-		"D8", "mt7623",
-		MTK_EINT_FUNCTION(0, 123),
-		MTK_FUNCTION(0, "GPIO237"),
-		MTK_FUNCTION(1, "EXT_SDIO2"),
-		MTK_FUNCTION(2, "DRV_VBUS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(238, "EXT_SDIO1"),
-		"D9", "mt7623",
-		MTK_EINT_FUNCTION(0, 124),
-		MTK_FUNCTION(0, "GPIO238"),
-		MTK_FUNCTION(1, "EXT_SDIO1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(239, "EXT_SDIO0"),
-		"B8", "mt7623",
-		MTK_EINT_FUNCTION(0, 125),
-		MTK_FUNCTION(0, "GPIO239"),
-		MTK_FUNCTION(1, "EXT_SDIO0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(240, "EXT_XCS"),
-		"C9", "mt7623",
-		MTK_EINT_FUNCTION(0, 126),
-		MTK_FUNCTION(0, "GPIO240"),
-		MTK_FUNCTION(1, "EXT_XCS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(241, "EXT_SCK"),
-		"C8", "mt7623",
-		MTK_EINT_FUNCTION(0, 127),
-		MTK_FUNCTION(0, "GPIO241"),
-		MTK_FUNCTION(1, "EXT_SCK")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(242, "URTS2"),
-		"G18", "mt7623",
-		MTK_EINT_FUNCTION(0, 128),
-		MTK_FUNCTION(0, "GPIO242"),
-		MTK_FUNCTION(1, "URTS2"),
-		MTK_FUNCTION(2, "UTXD3"),
-		MTK_FUNCTION(3, "URXD3"),
-		MTK_FUNCTION(4, "SCL1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(243, "UCTS2"),
-		"H19", "mt7623",
-		MTK_EINT_FUNCTION(0, 129),
-		MTK_FUNCTION(0, "GPIO243"),
-		MTK_FUNCTION(1, "UCTS2"),
-		MTK_FUNCTION(2, "URXD3"),
-		MTK_FUNCTION(3, "UTXD3"),
-		MTK_FUNCTION(4, "SDA1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(244, "GPIO244"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO244")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(245, "GPIO245"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO245")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(246, "GPIO246"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO246")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(247, "GPIO247"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO247")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(248, "GPIO248"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO248")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(249, "GPIO249"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO249")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(250, "GPIO250"),
-		"A15", "mt7623",
-		MTK_EINT_FUNCTION(0, 135),
-		MTK_FUNCTION(0, "GPIO250"),
-		MTK_FUNCTION(1, "TEST_MD7"),
-		MTK_FUNCTION(6, "PCIE0_CLKREQ_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(251, "GPIO251"),
-		"B15", "mt7623",
-		MTK_EINT_FUNCTION(0, 136),
-		MTK_FUNCTION(0, "GPIO251"),
-		MTK_FUNCTION(1, "TEST_MD6"),
-		MTK_FUNCTION(6, "PCIE0_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(252, "GPIO252"),
-		"C16", "mt7623",
-		MTK_EINT_FUNCTION(0, 137),
-		MTK_FUNCTION(0, "GPIO252"),
-		MTK_FUNCTION(1, "TEST_MD5"),
-		MTK_FUNCTION(6, "PCIE1_CLKREQ_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(253, "GPIO253"),
-		"D17", "mt7623",
-		MTK_EINT_FUNCTION(0, 138),
-		MTK_FUNCTION(0, "GPIO253"),
-		MTK_FUNCTION(1, "TEST_MD4"),
-		MTK_FUNCTION(6, "PCIE1_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(254, "GPIO254"),
-		"D16", "mt7623",
-		MTK_EINT_FUNCTION(0, 139),
-		MTK_FUNCTION(0, "GPIO254"),
-		MTK_FUNCTION(1, "TEST_MD3"),
-		MTK_FUNCTION(6, "PCIE2_CLKREQ_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(255, "GPIO255"),
-		"C17", "mt7623",
-		MTK_EINT_FUNCTION(0, 140),
-		MTK_FUNCTION(0, "GPIO255"),
-		MTK_FUNCTION(1, "TEST_MD2"),
-		MTK_FUNCTION(6, "PCIE2_WAKE_N")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(256, "GPIO256"),
-		"B17", "mt7623",
-		MTK_EINT_FUNCTION(0, 141),
-		MTK_FUNCTION(0, "GPIO256"),
-		MTK_FUNCTION(1, "TEST_MD1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(257, "GPIO257"),
-		"C15", "mt7623",
-		MTK_EINT_FUNCTION(0, 142),
-		MTK_FUNCTION(0, "GPIO257"),
-		MTK_FUNCTION(1, "TEST_MD0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(258, "GPIO258"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO258")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(259, "GPIO259"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO259")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(260, "GPIO260"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO260")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(261, "MSDC1_INS"),
-		"AD1", "mt7623",
-		MTK_EINT_FUNCTION(0, 146),
-		MTK_FUNCTION(0, "GPIO261"),
-		MTK_FUNCTION(1, "MSDC1_INS")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(262, "G2_TXEN"),
-		"A23", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO262"),
-		MTK_FUNCTION(1, "G2_TXEN")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(263, "G2_TXD3"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO263"),
-		MTK_FUNCTION(1, "G2_TXD3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(264, "G2_TXD2"),
-		"C24", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO264"),
-		MTK_FUNCTION(1, "G2_TXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(265, "G2_TXD1"),
-		"B25", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO265"),
-		MTK_FUNCTION(1, "G2_TXD1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(266, "G2_TXD0"),
-		"A24", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO266"),
-		MTK_FUNCTION(1, "G2_TXD0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(267, "G2_TXCLK"),
-		"C23", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO267"),
-		MTK_FUNCTION(1, "G2_TXC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(268, "G2_RXCLK"),
-		"B23", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO268"),
-		MTK_FUNCTION(1, "G2_RXC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(269, "G2_RXD0"),
-		"D21", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO269"),
-		MTK_FUNCTION(1, "G2_RXD0")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(270, "G2_RXD1"),
-		"B22", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO270"),
-		MTK_FUNCTION(1, "G2_RXD1")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(271, "G2_RXD2"),
-		"A22", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO271"),
-		MTK_FUNCTION(1, "G2_RXD2")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(272, "G2_RXD3"),
-		"C22", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO272"),
-		MTK_FUNCTION(1, "G2_RXD3")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(273, "GPIO273"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO273")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(274, "G2_RXDV"),
-		"C21", "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO274"),
-		MTK_FUNCTION(1, "G2_RXDV")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(275, "G2_MDC"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO275"),
-		MTK_FUNCTION(1, "MDC")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(276, "G2_MDIO"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO276"),
-		MTK_FUNCTION(1, "MDIO")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(277, "GPIO277"),
-		NULL, "mt7623",
-		MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
-		MTK_FUNCTION(0, "GPIO277")
-	),
-	MTK_PIN(
-		PINCTRL_PIN(278, "JTAG_RESET"),
-		"H20", "mt7623",
-		MTK_EINT_FUNCTION(0, 147),
-		MTK_FUNCTION(0, "GPIO278"),
-		MTK_FUNCTION(1, "JTAG_RESET")
-	),
-};
-
-#endif /* __PINCTRL_MTK_MT7623_H */
-- 
1.9.1

^ permalink raw reply related

* [PATCH v2 25/30] arm: dts: mt7623: rename mt7623-evb.dts to arch/arm/boot/dts/mt7623n-rfb.dtsi
From: Sean Wang @ 2017-05-01  7:06 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170428203025.gdrtbudfzwy5z4h5@rob-hp-laptop>

On Fri, 2017-04-28 at 15:30 -0500, Rob Herring wrote:
> On Wed, Apr 26, 2017 at 05:26:09PM +0800, sean.wang at mediatek.com wrote:
> > From: Sean Wang <sean.wang@mediatek.com>
> > 
> > There are 2 versions of the SoC. MT7623N is almost identical to MT7623A
> > but has some additional multimedia features. The reference boards are
> > available as NAND or MMC and might have a different ethernet setup. In
> > order to reduce the duplication of devicetree code we add an intermediate
> > dtsi file for these reference boards. Additionally Mediatek pointed out,
> > that the EVB is yet another board and the board in question is infact the
> > RFB. Take this into account while renaming the files.
> 
> You are breaking compatibility with existing DTs. Just document which 
> flavor you want "mediatek,mt7623" to refer to and add the new one. Or 
> just add 2 new strings but keep the old one.
> 

Hi Rob,

really appreciate your patient guidance.

I prefer to using the way one you suggest: the old one is kept and
refers to mt7623n SoC and new one will be added for mt7623a Soc.

	Sean

> > 
> > Signed-off-by: John Crispin <john@phrozen.org>
> > Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> > 
> > ---
> >  Documentation/devicetree/bindings/arm/mediatek.txt |  6 ++--
> >  arch/arm/boot/dts/Makefile                         |  2 +-
> >  arch/arm/boot/dts/mt7623-evb.dts                   | 33 ----------------------
> >  arch/arm/boot/dts/mt7623n-rfb-nand.dts             | 21 ++++++++++++++
> >  arch/arm/boot/dts/mt7623n-rfb.dtsi                 | 29 +++++++++++++++++++
> >  arch/arm/mach-mediatek/mediatek.c                  |  4 +--
> >  arch/arm/mach-mediatek/platsmp.c                   |  2 +-
> >  7 files changed, 57 insertions(+), 40 deletions(-)
> >  delete mode 100644 arch/arm/boot/dts/mt7623-evb.dts
> >  create mode 100644 arch/arm/boot/dts/mt7623n-rfb-nand.dts
> >  create mode 100644 arch/arm/boot/dts/mt7623n-rfb.dtsi
> > 
> > diff --git a/Documentation/devicetree/bindings/arm/mediatek.txt b/Documentation/devicetree/bindings/arm/mediatek.txt
> > index c860b24..7f7c804 100644
> > --- a/Documentation/devicetree/bindings/arm/mediatek.txt
> > +++ b/Documentation/devicetree/bindings/arm/mediatek.txt
> > @@ -12,7 +12,7 @@ compatible: Must contain one of
> >     "mediatek,mt6592"
> >     "mediatek,mt6755"
> >     "mediatek,mt6795"
> > -   "mediatek,mt7623"
> > +   "mediatek,mt7623n"
> >     "mediatek,mt8127"
> >     "mediatek,mt8135"
> >     "mediatek,mt8173"

^ permalink raw reply

* [PATCH v2 29/30] dt-bindings: add vendor prefix for bananapi
From: Sean Wang @ 2017-05-01  6:58 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170428203727.m6jm5w6nb2iirxih@rob-hp-laptop>

On Fri, 2017-04-28 at 15:37 -0500, Rob Herring wrote:
> On Wed, Apr 26, 2017 at 05:26:13PM +0800, sean.wang at mediatek.com wrote:
> > From: Sean Wang <sean.wang@mediatek.com>
> > 
> > Banana Pi team in Sinovoip Co., Limited which are dedicated to
> > design and manufacture open hardware product.
> > 
> > Website: http://www.banana-pi.org/
> > 
> > Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> > ---
> >  Documentation/devicetree/bindings/vendor-prefixes.txt | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
> > index ec0bfb9..8ca0f3c 100644
> > --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
> > +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
> > @@ -44,6 +44,7 @@ avia	avia semiconductor
> >  avic	Shanghai AVIC Optoelectronics Co., Ltd.
> >  axentia	Axentia Technologies AB
> >  axis	Axis Communications AB
> > +bananapi Banana Pi SINOVOP CO., LIMITED
> 
> s/SINOVOP/SINOVOIP/ 

Hi Rob,

thanks for your careful reviewing , i will correct it in the next
version.

BTW, Could those related dts changes go through your tree if everything
looks good? Because I find Matthias have been inactive for a while and
the latest branch in his tree seems still staying on 4.10.

	Sean

> 
> >  boe	BOE Technology Group Co., Ltd.
> >  bosch	Bosch Sensortec GmbH
> >  boundary	Boundary Devices Inc.
> > -- 
> > 1.9.1
> > 

^ permalink raw reply

* [PATCH v2 02/30] pinctrl: mediatek: reuse pinctrl driver for mt7623
From: Sean Wang @ 2017-05-01  6:44 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <CACRpkdbR-k3wgD+7KoV6d7yg1uduXpa9MO0+woEibQYPeYzgYw@mail.gmail.com>

On Fri, 2017-04-28 at 10:01 +0200, Linus Walleij wrote:
> On Wed, Apr 26, 2017 at 11:25 AM,  <sean.wang@mediatek.com> wrote:
> 
> > From: Sean Wang <sean.wang@mediatek.com>
> >
> > mt7623 pinctrl driver can be compatible with mt2701 one,
> > so the patch reuses the driver and deletes those redundant
> > ones.
> >
> > Cc: John Crispin <john@phrozen.org>
> > Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> 
> Partly correct.
> 
> >         "mediatek,mt6397-pinctrl", compatible with mt6397 pinctrl.
> > -       "mediatek,mt7623-pinctrl", compatible with mt7623 pinctrl.
> 
> NO don't do this.
> 
> "compatible" means exactly this: this hardware is compatible with
> this driver. That is why we have it!
> 
> So instead of mt7623 pretending to be mt2701, let the mt2701 driver
> list that it is compatible with mt7623, simple.
> 
> So patch pinctrl-mt2701.c mt2701_pctrl_match[] instead.
> 

Hi Linus,

really appreciate your clear guidance and reviewing on this

I will fix it up in the next version
	
	Sean

> Yours,
> Linus Walleij

^ permalink raw reply

* [PATCH 2/2] dmaengine: Add STM32 MDMA driver
From: Vinod Koul @ 2017-05-01  6:12 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <d1d92f79-ce3c-e057-7f47-1fd5e42fa5dc@st.com>

On Wed, Apr 26, 2017 at 12:35:46PM +0000, Pierre Yves MORDRET wrote:
> On 04/06/2017 09:08 AM, Vinod Koul wrote:
> >> +static int stm32_mdma_get_width(struct stm32_mdma_chan *chan,
> >> +				enum dma_slave_buswidth width)
> >> +{
> >> +	switch (width) {
> >> +	case DMA_SLAVE_BUSWIDTH_1_BYTE:
> >> +		return STM32_MDMA_BYTE;
> >> +	case DMA_SLAVE_BUSWIDTH_2_BYTES:
> >> +		return STM32_MDMA_HALF_WORD;
> >> +	case DMA_SLAVE_BUSWIDTH_4_BYTES:
> >> +		return STM32_MDMA_WORD;
> >> +	case DMA_SLAVE_BUSWIDTH_8_BYTES:
> >> +		return STM32_MDMA_DOUBLE_WORD;
> >
> > IIUC we can do this with ffs()
> 
> I don't believe we can do that. This function translates DMA_SLAVE enum 
> into internal register representation.

Yes and internal represenation seemed to be ffs() of dmanegine one.

> >> +subsys_initcall(stm32_mdma_init);
> >
> > why subsys?
> >
> 
> subsys_initcall level is to ensure MDMA is going to be probed before its 
> clients

Please use deffered probe approach for that

-- 
~Vinod

^ permalink raw reply

* [PATCH 2/5] dmaengine: Add STM32 DMAMUX driver
From: Vinod Koul @ 2017-05-01  6:03 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <d18cb12d-1fd1-39d2-501a-18c000b9982e@st.com>

On Wed, Apr 26, 2017 at 09:17:37AM +0000, Pierre Yves MORDRET wrote:
> >> +
> >> +	ret = of_property_read_u32(node, "dma-channels",
> >> +				   &dmamux->dmamux_channels);
> >
> > can we have property_xxx calls alone, that way driver is not strictly
> > dependent on of
> 
> Can you please explain what you are asking for ? Not sure to understand 
> correctly.

Use device_property_read_u32() which is a generic property API.


> >> +static int __init stm32_dmamux_init(void)
> >> +{
> >> +	return platform_driver_register(&stm32_dmamux_driver);
> >> +}
> >> +arch_initcall(stm32_dmamux_init);
> >
> > why not module init, wouldnt defer probe solve the dependencies
> >
> 
> The reason behind many devices (device_initcall level) rely on DMAs. If 
> init is deferred DMAMUX driver will be probed twice if dependents rely 
> on it. This sounds not a good call. This explains arch_initcall level.

Why not deferred probe was introduced to help with dependencies...

-- 
~Vinod

^ permalink raw reply

* [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues.
From: Jon Masters @ 2017-05-01  4:53 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170424184250.667-1-david.daney@cavium.com>

On 04/24/2017 02:42 PM, David Daney wrote:
> We have discovered in rare circumstances, guest execution may result
> in host not receiving one or more interrupts.  This does not otherwise
> affect guest or host execution and/or isolation.

Thanks David. I have tested these and can confirm that a 4.11 machine
previously experiencing an issue has stable VMs with these.

Tested-by: Jon Masters <jcm@redhat.com>

^ permalink raw reply

* [PATCH] [media] pxa_camera: fix module remove codepath for v4l2 clock
From: Petr Cvek @ 2017-05-01  4:44 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <87a87111s6.fsf@belgarion.home>

Dne 28.4.2017 v 08:31 Robert Jarzmik napsal(a):
> Petr Cvek <petr.cvek@tul.cz> writes:
> 
>> I will post some other bugfixes (and feature adding) for pxa_camera soon. Do you wish to be CC'd? 
>>
>> P.S. Who is the the maintainer of pxa_camera BTW? Still Guennadi Liakhovetski?
> Euh no, that's me.

OK ... so when I remove the ov9640 driver from soc_camera (palmz72 and magician used it with soc_camera+pxa_camera) does that mean I will be its maintainer?

Petr

^ permalink raw reply

* [PATCH v2 2/2] ARM: sun8i: a83t: Replace underscores with hyphens in pinmux node names
From: Chen-Yu Tsai @ 2017-05-01  3:14 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <20170501031408.10469-1-wens@csie.org>

We should use hyphens and not underscores in device node names.

Replace the ones that were just added.

Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
 arch/arm/boot/dts/sun8i-a83t.dtsi | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi
index aecde8be53bc..c0a1e4f74b89 100644
--- a/arch/arm/boot/dts/sun8i-a83t.dtsi
+++ b/arch/arm/boot/dts/sun8i-a83t.dtsi
@@ -174,7 +174,7 @@
 			#interrupt-cells = <3>;
 			#gpio-cells = <3>;
 
-			mmc0_pins: mmc0_pins {
+			mmc0_pins: mmc0-pins {
 				pins = "PF0", "PF1", "PF2",
 				       "PF3", "PF4", "PF5";
 				function = "mmc0";
@@ -182,12 +182,12 @@
 				bias-pull-up;
 			};
 
-			uart0_pb_pins: uart0_pb_pins {
+			uart0_pb_pins: uart0-pb-pins {
 				pins = "PB9", "PB10";
 				function = "uart0";
 			};
 
-			uart0_pf_pins: uart0_pf_pins {
+			uart0_pf_pins: uart0-pf-pins {
 				pins = "PF2", "PF4";
 				function = "uart0";
 			};
-- 
2.11.0

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox