xref: /linux/drivers/pinctrl/aspeed/pinctrl-aspeed-g7-soc1.c (revision 53c7db5c1916afcecc8683ae01ff8415c708a883)
14af4eb66SBilly Tsai // SPDX-License-Identifier: GPL-2.0-only
24af4eb66SBilly Tsai /*
34af4eb66SBilly Tsai  * Pinctrl driver for Aspeed G7 SoC1
44af4eb66SBilly Tsai  *
54af4eb66SBilly Tsai  * Copyright (C) 2026 Aspeed Technology Inc.
64af4eb66SBilly Tsai  */
74af4eb66SBilly Tsai 
84af4eb66SBilly Tsai #include <linux/errno.h>
94af4eb66SBilly Tsai #include <linux/mfd/syscon.h>
104af4eb66SBilly Tsai #include <linux/module.h>
114af4eb66SBilly Tsai #include <linux/of.h>
124af4eb66SBilly Tsai #include <linux/pinctrl/pinconf-generic.h>
134af4eb66SBilly Tsai #include <linux/pinctrl/pinconf.h>
144af4eb66SBilly Tsai #include <linux/pinctrl/pinctrl.h>
154af4eb66SBilly Tsai #include <linux/pinctrl/pinmux.h>
164af4eb66SBilly Tsai #include <linux/platform_device.h>
174af4eb66SBilly Tsai #include <linux/regmap.h>
184af4eb66SBilly Tsai #include <linux/slab.h>
194af4eb66SBilly Tsai 
204af4eb66SBilly Tsai #include "../core.h"
214af4eb66SBilly Tsai #include "../pinconf.h"
224af4eb66SBilly Tsai #include "../pinctrl-utils.h"
234af4eb66SBilly Tsai #include "../pinmux.h"
244af4eb66SBilly Tsai 
254af4eb66SBilly Tsai #define ASPEED_G7_SOC1_NR_PINS 220
264af4eb66SBilly Tsai #define ASPEED_G7_SOC1_REG_WIDTH 32
274af4eb66SBilly Tsai #define ASPEED_G7_SOC1_REG_STRIDE 4
284af4eb66SBilly Tsai 
294af4eb66SBilly Tsai #define ASPEED_G7_SOC1_MUX_BASE          0x400
304af4eb66SBilly Tsai #define ASPEED_G7_SOC1_BIAS_BASE         0x480
314af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_BASE          0x4C0
324af4eb66SBilly Tsai #define ASPEED_G7_SOC1_PCIE_REG          0x908
334af4eb66SBilly Tsai #define ASPEED_G7_SOC1_USB_MODE_REG      0x3B0
344af4eb66SBilly Tsai #define ASPEED_G7_SOC1_SGMII_REG         0x47C
354af4eb66SBilly Tsai 
364af4eb66SBilly Tsai /*
374af4eb66SBilly Tsai  * Each pin occupies a 4-bit slot in the MUX registers (MUX_BITS_PER_PIN),
384af4eb66SBilly Tsai  * but only bits [2:0] select the mux function; bit 3 is reserved read-only
394af4eb66SBilly Tsai  * and must not be written.  MUX_FUNC_MASK therefore covers 3 bits, not 4.
404af4eb66SBilly Tsai  */
414af4eb66SBilly Tsai #define ASPEED_G7_SOC1_MUX_FUNC_MASK 0x7
424af4eb66SBilly Tsai #define ASPEED_G7_SOC1_MUX_BITS_PER_PIN 4
434af4eb66SBilly Tsai #define ASPEED_G7_SOC1_MUX_PINS_PER_REG \
444af4eb66SBilly Tsai 	(ASPEED_G7_SOC1_REG_WIDTH / ASPEED_G7_SOC1_MUX_BITS_PER_PIN)
454af4eb66SBilly Tsai 
464af4eb66SBilly Tsai #define ASPEED_G7_SOC1_BIAS_FUNC_MASK 0x1
474af4eb66SBilly Tsai #define ASPEED_G7_SOC1_BIAS_BITS_PER_PIN 1
484af4eb66SBilly Tsai #define ASPEED_G7_SOC1_BIAS_PINS_PER_REG \
494af4eb66SBilly Tsai 	(ASPEED_G7_SOC1_REG_WIDTH / ASPEED_G7_SOC1_BIAS_BITS_PER_PIN)
504af4eb66SBilly Tsai 
514af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_FUNC_MASK 0x3
524af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_BITS_PER_PIN 2
534af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_PINS_PER_REG \
544af4eb66SBilly Tsai 	(ASPEED_G7_SOC1_REG_WIDTH / ASPEED_G7_SOC1_DRV_BITS_PER_PIN)
554af4eb66SBilly Tsai 
564af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA 4
574af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_STRENGTH_HW_BASE 1
584af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_STRENGTH_MIN_MA \
594af4eb66SBilly Tsai 	(ASPEED_G7_SOC1_DRV_STRENGTH_HW_BASE * ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA)
604af4eb66SBilly Tsai #define ASPEED_G7_SOC1_DRV_STRENGTH_MAX_MA \
614af4eb66SBilly Tsai 	((ASPEED_G7_SOC1_DRV_FUNC_MASK + ASPEED_G7_SOC1_DRV_STRENGTH_HW_BASE) * \
624af4eb66SBilly Tsai 	 ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA)
634af4eb66SBilly Tsai 
644af4eb66SBilly Tsai /*
654af4eb66SBilly Tsai  * NOTE: The numeric values of these enum entries are significant.
664af4eb66SBilly Tsai  * They must match the SoC GPIO numbering / ball-to-GPIO ID mapping.
674af4eb66SBilly Tsai  * Do not reorder alphabetically.
684af4eb66SBilly Tsai  */
694af4eb66SBilly Tsai enum {
704af4eb66SBilly Tsai 	C16,
714af4eb66SBilly Tsai 	C14,
724af4eb66SBilly Tsai 	C11,
734af4eb66SBilly Tsai 	D9,
744af4eb66SBilly Tsai 	F14,
754af4eb66SBilly Tsai 	D10,
764af4eb66SBilly Tsai 	C12,
774af4eb66SBilly Tsai 	C13,
784af4eb66SBilly Tsai 	AC26,
794af4eb66SBilly Tsai 	AA25,
804af4eb66SBilly Tsai 	AB23,
814af4eb66SBilly Tsai 	U22,
824af4eb66SBilly Tsai 	V21,
834af4eb66SBilly Tsai 	N26,
844af4eb66SBilly Tsai 	P25,
854af4eb66SBilly Tsai 	N25,
864af4eb66SBilly Tsai 	V23,
874af4eb66SBilly Tsai 	W22,
884af4eb66SBilly Tsai 	AB26,
894af4eb66SBilly Tsai 	AD26,
904af4eb66SBilly Tsai 	P26,
914af4eb66SBilly Tsai 	AE26,
924af4eb66SBilly Tsai 	AF26,
934af4eb66SBilly Tsai 	AF25,
944af4eb66SBilly Tsai 	AE25,
954af4eb66SBilly Tsai 	AD25,
964af4eb66SBilly Tsai 	AF23,
974af4eb66SBilly Tsai 	AF20,
984af4eb66SBilly Tsai 	AF21,
994af4eb66SBilly Tsai 	AE21,
1004af4eb66SBilly Tsai 	AE23,
1014af4eb66SBilly Tsai 	AD22,
1024af4eb66SBilly Tsai 	AF17,
1034af4eb66SBilly Tsai 	AA16,
1044af4eb66SBilly Tsai 	Y16,
1054af4eb66SBilly Tsai 	V17,
1064af4eb66SBilly Tsai 	J13,
1074af4eb66SBilly Tsai 	AB16,
1084af4eb66SBilly Tsai 	AC16,
1094af4eb66SBilly Tsai 	AF16,
1104af4eb66SBilly Tsai 	AA15,
1114af4eb66SBilly Tsai 	AB15,
1124af4eb66SBilly Tsai 	AC15,
1134af4eb66SBilly Tsai 	AD15,
1144af4eb66SBilly Tsai 	Y15,
1154af4eb66SBilly Tsai 	AA14,
1164af4eb66SBilly Tsai 	W16,
1174af4eb66SBilly Tsai 	V16,
1184af4eb66SBilly Tsai 	AB18,
1194af4eb66SBilly Tsai 	AC18,
1204af4eb66SBilly Tsai 	K13,
1214af4eb66SBilly Tsai 	AA17,
1224af4eb66SBilly Tsai 	AB17,
1234af4eb66SBilly Tsai 	AD16,
1244af4eb66SBilly Tsai 	AC17,
1254af4eb66SBilly Tsai 	AD17,
1264af4eb66SBilly Tsai 	AE16,
1274af4eb66SBilly Tsai 	AE17,
1284af4eb66SBilly Tsai 	AB24,
1294af4eb66SBilly Tsai 	W26,
1304af4eb66SBilly Tsai 	HOLE0,
1314af4eb66SBilly Tsai 	HOLE1,
1324af4eb66SBilly Tsai 	HOLE2,
1334af4eb66SBilly Tsai 	HOLE3,
1344af4eb66SBilly Tsai 	W25,
1354af4eb66SBilly Tsai 	Y23,
1364af4eb66SBilly Tsai 	Y24,
1374af4eb66SBilly Tsai 	W21,
1384af4eb66SBilly Tsai 	AA23,
1394af4eb66SBilly Tsai 	AC22,
1404af4eb66SBilly Tsai 	AB22,
1414af4eb66SBilly Tsai 	Y21,
1424af4eb66SBilly Tsai 	AE20,
1434af4eb66SBilly Tsai 	AF19,
1444af4eb66SBilly Tsai 	Y22,
1454af4eb66SBilly Tsai 	AA20,
1464af4eb66SBilly Tsai 	AA22,
1474af4eb66SBilly Tsai 	AB20,
1484af4eb66SBilly Tsai 	AF18,
1494af4eb66SBilly Tsai 	AE19,
1504af4eb66SBilly Tsai 	AD20,
1514af4eb66SBilly Tsai 	AC20,
1524af4eb66SBilly Tsai 	AA21,
1534af4eb66SBilly Tsai 	AB21,
1544af4eb66SBilly Tsai 	AC19,
1554af4eb66SBilly Tsai 	AE18,
1564af4eb66SBilly Tsai 	AD19,
1574af4eb66SBilly Tsai 	AD18,
1584af4eb66SBilly Tsai 	U25,
1594af4eb66SBilly Tsai 	U26,
1604af4eb66SBilly Tsai 	Y26,
1614af4eb66SBilly Tsai 	AA24,
1624af4eb66SBilly Tsai 	R25,
1634af4eb66SBilly Tsai 	AA26,
1644af4eb66SBilly Tsai 	R26,
1654af4eb66SBilly Tsai 	Y25,
1664af4eb66SBilly Tsai 	B16,
1674af4eb66SBilly Tsai 	D14,
1684af4eb66SBilly Tsai 	B15,
1694af4eb66SBilly Tsai 	B14,
1704af4eb66SBilly Tsai 	C17,
1714af4eb66SBilly Tsai 	B13,
1724af4eb66SBilly Tsai 	E14,
1734af4eb66SBilly Tsai 	C15,
1744af4eb66SBilly Tsai 	D24,
1754af4eb66SBilly Tsai 	B23,
1764af4eb66SBilly Tsai 	B22,
1774af4eb66SBilly Tsai 	C23,
1784af4eb66SBilly Tsai 	B18,
1794af4eb66SBilly Tsai 	B21,
1804af4eb66SBilly Tsai 	M15,
1814af4eb66SBilly Tsai 	B19,
1824af4eb66SBilly Tsai 	B26,
1834af4eb66SBilly Tsai 	A25,
1844af4eb66SBilly Tsai 	A24,
1854af4eb66SBilly Tsai 	B24,
1864af4eb66SBilly Tsai 	E26,
1874af4eb66SBilly Tsai 	A21,
1884af4eb66SBilly Tsai 	A19,
1894af4eb66SBilly Tsai 	A18,
1904af4eb66SBilly Tsai 	D26,
1914af4eb66SBilly Tsai 	C26,
1924af4eb66SBilly Tsai 	A23,
1934af4eb66SBilly Tsai 	A22,
1944af4eb66SBilly Tsai 	B25,
1954af4eb66SBilly Tsai 	F26,
1964af4eb66SBilly Tsai 	A26,
1974af4eb66SBilly Tsai 	A14,
1984af4eb66SBilly Tsai 	E10,
1994af4eb66SBilly Tsai 	E13,
2004af4eb66SBilly Tsai 	D12,
2014af4eb66SBilly Tsai 	F10,
2024af4eb66SBilly Tsai 	E11,
2034af4eb66SBilly Tsai 	F11,
2044af4eb66SBilly Tsai 	F13,
2054af4eb66SBilly Tsai 	N15,
2064af4eb66SBilly Tsai 	C20,
2074af4eb66SBilly Tsai 	C19,
2084af4eb66SBilly Tsai 	A8,
2094af4eb66SBilly Tsai 	R14,
2104af4eb66SBilly Tsai 	A7,
2114af4eb66SBilly Tsai 	P14,
2124af4eb66SBilly Tsai 	D20,
2134af4eb66SBilly Tsai 	A6,
2144af4eb66SBilly Tsai 	B6,
2154af4eb66SBilly Tsai 	N14,
2164af4eb66SBilly Tsai 	B7,
2174af4eb66SBilly Tsai 	B8,
2184af4eb66SBilly Tsai 	B9,
2194af4eb66SBilly Tsai 	M14,
2204af4eb66SBilly Tsai 	J11,
2214af4eb66SBilly Tsai 	E7,
2224af4eb66SBilly Tsai 	D19,
2234af4eb66SBilly Tsai 	B11,
2244af4eb66SBilly Tsai 	D15,
2254af4eb66SBilly Tsai 	B12,
2264af4eb66SBilly Tsai 	B10,
2274af4eb66SBilly Tsai 	P13,
2284af4eb66SBilly Tsai 	C18,
2294af4eb66SBilly Tsai 	C6,
2304af4eb66SBilly Tsai 	C7,
2314af4eb66SBilly Tsai 	D7,
2324af4eb66SBilly Tsai 	N13,
2334af4eb66SBilly Tsai 	C8,
2344af4eb66SBilly Tsai 	C9,
2354af4eb66SBilly Tsai 	C10,
2364af4eb66SBilly Tsai 	M16,
2374af4eb66SBilly Tsai 	A15,
2384af4eb66SBilly Tsai 	G11,
2394af4eb66SBilly Tsai 	H7,
2404af4eb66SBilly Tsai 	H8,
2414af4eb66SBilly Tsai 	H9,
2424af4eb66SBilly Tsai 	H10,
2434af4eb66SBilly Tsai 	H11,
2444af4eb66SBilly Tsai 	J9,
2454af4eb66SBilly Tsai 	J10,
2464af4eb66SBilly Tsai 	E9,
2474af4eb66SBilly Tsai 	F9,
2484af4eb66SBilly Tsai 	F8,
2494af4eb66SBilly Tsai 	M13,
2504af4eb66SBilly Tsai 	F7,
2514af4eb66SBilly Tsai 	D8,
2524af4eb66SBilly Tsai 	E8,
2534af4eb66SBilly Tsai 	L12,
2544af4eb66SBilly Tsai 	F12,
2554af4eb66SBilly Tsai 	E12,
2564af4eb66SBilly Tsai 	J12,
2574af4eb66SBilly Tsai 	G7,
2584af4eb66SBilly Tsai 	G8,
2594af4eb66SBilly Tsai 	G9,
2604af4eb66SBilly Tsai 	G10,
2614af4eb66SBilly Tsai 	K12,
2624af4eb66SBilly Tsai 	W17,
2634af4eb66SBilly Tsai 	V18,
2644af4eb66SBilly Tsai 	W18,
2654af4eb66SBilly Tsai 	Y17,
2664af4eb66SBilly Tsai 	AA18,
2674af4eb66SBilly Tsai 	AA13,
2684af4eb66SBilly Tsai 	Y18,
2694af4eb66SBilly Tsai 	AA12,
2704af4eb66SBilly Tsai 	W20,
2714af4eb66SBilly Tsai 	V20,
2724af4eb66SBilly Tsai 	Y11,
2734af4eb66SBilly Tsai 	V14,
2744af4eb66SBilly Tsai 	V19,
2754af4eb66SBilly Tsai 	W14,
2764af4eb66SBilly Tsai 	Y20,
2774af4eb66SBilly Tsai 	AB19,
2784af4eb66SBilly Tsai 	U21,
2794af4eb66SBilly Tsai 	T24,
2804af4eb66SBilly Tsai 	V24,
2814af4eb66SBilly Tsai 	V22,
2824af4eb66SBilly Tsai 	T23,
2834af4eb66SBilly Tsai 	AC25,
2844af4eb66SBilly Tsai 	AB25,
2854af4eb66SBilly Tsai 	AC24,
2864af4eb66SBilly Tsai 	PCIERC2_PERST,
2874af4eb66SBilly Tsai 	PORTC_MODE,
2884af4eb66SBilly Tsai 	PORTD_MODE,
2894af4eb66SBilly Tsai 	SGMII0,
2904af4eb66SBilly Tsai };
2914af4eb66SBilly Tsai 
2924af4eb66SBilly Tsai struct aspeed_g7_soc1_pinctrl {
2934af4eb66SBilly Tsai 	struct device *dev;
2944af4eb66SBilly Tsai 	struct regmap *regmap;
2954af4eb66SBilly Tsai 	struct pinctrl_dev *pctl;
2964af4eb66SBilly Tsai };
2974af4eb66SBilly Tsai 
2984af4eb66SBilly Tsai struct aspeed_g7_field {
2994af4eb66SBilly Tsai 	unsigned int reg;
3004af4eb66SBilly Tsai 	unsigned int shift;
3014af4eb66SBilly Tsai 	unsigned int mask;
3024af4eb66SBilly Tsai };
3034af4eb66SBilly Tsai 
3044af4eb66SBilly Tsai static struct aspeed_g7_field
3054af4eb66SBilly Tsai aspeed_g7_soc1_pinmux_field_from_pin(unsigned int pin)
3064af4eb66SBilly Tsai {
3074af4eb66SBilly Tsai 	return (struct aspeed_g7_field){
3084af4eb66SBilly Tsai 		.reg = ASPEED_G7_SOC1_MUX_BASE +
3094af4eb66SBilly Tsai 		       (pin / ASPEED_G7_SOC1_MUX_PINS_PER_REG) *
3104af4eb66SBilly Tsai 			       ASPEED_G7_SOC1_REG_STRIDE,
3114af4eb66SBilly Tsai 		.shift = (pin % ASPEED_G7_SOC1_MUX_PINS_PER_REG) *
3124af4eb66SBilly Tsai 			 ASPEED_G7_SOC1_MUX_BITS_PER_PIN,
3134af4eb66SBilly Tsai 		.mask = ASPEED_G7_SOC1_MUX_FUNC_MASK,
3144af4eb66SBilly Tsai 	};
3154af4eb66SBilly Tsai }
3164af4eb66SBilly Tsai 
3174af4eb66SBilly Tsai static struct aspeed_g7_field
3184af4eb66SBilly Tsai aspeed_g7_soc1_bias_field_from_pin(unsigned int pin)
3194af4eb66SBilly Tsai {
3204af4eb66SBilly Tsai 	return (struct aspeed_g7_field){
3214af4eb66SBilly Tsai 		.reg = ASPEED_G7_SOC1_BIAS_BASE +
3224af4eb66SBilly Tsai 		       (pin / ASPEED_G7_SOC1_BIAS_PINS_PER_REG) *
3234af4eb66SBilly Tsai 			       ASPEED_G7_SOC1_REG_STRIDE,
3244af4eb66SBilly Tsai 		.shift = pin % ASPEED_G7_SOC1_BIAS_PINS_PER_REG,
3254af4eb66SBilly Tsai 		.mask = ASPEED_G7_SOC1_BIAS_FUNC_MASK,
3264af4eb66SBilly Tsai 	};
3274af4eb66SBilly Tsai }
3284af4eb66SBilly Tsai 
3294af4eb66SBilly Tsai static struct aspeed_g7_field
3304af4eb66SBilly Tsai aspeed_g7_soc1_drv_field_from_idx(unsigned int idx)
3314af4eb66SBilly Tsai {
3324af4eb66SBilly Tsai 	return (struct aspeed_g7_field){
3334af4eb66SBilly Tsai 		.reg = ASPEED_G7_SOC1_DRV_BASE +
3344af4eb66SBilly Tsai 		       (idx / ASPEED_G7_SOC1_DRV_PINS_PER_REG) *
3354af4eb66SBilly Tsai 			       ASPEED_G7_SOC1_REG_STRIDE,
3364af4eb66SBilly Tsai 		.shift = (idx % ASPEED_G7_SOC1_DRV_PINS_PER_REG) *
3374af4eb66SBilly Tsai 			 ASPEED_G7_SOC1_DRV_BITS_PER_PIN,
3384af4eb66SBilly Tsai 		.mask = ASPEED_G7_SOC1_DRV_FUNC_MASK,
3394af4eb66SBilly Tsai 	};
3404af4eb66SBilly Tsai }
3414af4eb66SBilly Tsai 
3424af4eb66SBilly Tsai #define PIN(n) PINCTRL_PIN(n, #n)
3434af4eb66SBilly Tsai 
3444af4eb66SBilly Tsai static const struct pinctrl_pin_desc aspeed_g7_soc1_pins[] = {
3454af4eb66SBilly Tsai 	PIN(C16),
3464af4eb66SBilly Tsai 	PIN(C14),
3474af4eb66SBilly Tsai 	PIN(C11),
3484af4eb66SBilly Tsai 	PIN(D9),
3494af4eb66SBilly Tsai 	PIN(F14),
3504af4eb66SBilly Tsai 	PIN(D10),
3514af4eb66SBilly Tsai 	PIN(C12),
3524af4eb66SBilly Tsai 	PIN(C13),
3534af4eb66SBilly Tsai 	PIN(AC26),
3544af4eb66SBilly Tsai 	PIN(AA25),
3554af4eb66SBilly Tsai 	PIN(AB23),
3564af4eb66SBilly Tsai 	PIN(U22),
3574af4eb66SBilly Tsai 	PIN(V21),
3584af4eb66SBilly Tsai 	PIN(N26),
3594af4eb66SBilly Tsai 	PIN(P25),
3604af4eb66SBilly Tsai 	PIN(N25),
3614af4eb66SBilly Tsai 	PIN(V23),
3624af4eb66SBilly Tsai 	PIN(W22),
3634af4eb66SBilly Tsai 	PIN(AB26),
3644af4eb66SBilly Tsai 	PIN(AD26),
3654af4eb66SBilly Tsai 	PIN(P26),
3664af4eb66SBilly Tsai 	PIN(AE26),
3674af4eb66SBilly Tsai 	PIN(AF26),
3684af4eb66SBilly Tsai 	PIN(AF25),
3694af4eb66SBilly Tsai 	PIN(AE25),
3704af4eb66SBilly Tsai 	PIN(AD25),
3714af4eb66SBilly Tsai 	PIN(AF23),
3724af4eb66SBilly Tsai 	PIN(AF20),
3734af4eb66SBilly Tsai 	PIN(AF21),
3744af4eb66SBilly Tsai 	PIN(AE21),
3754af4eb66SBilly Tsai 	PIN(AE23),
3764af4eb66SBilly Tsai 	PIN(AD22),
3774af4eb66SBilly Tsai 	PIN(AF17),
3784af4eb66SBilly Tsai 	PIN(AA16),
3794af4eb66SBilly Tsai 	PIN(Y16),
3804af4eb66SBilly Tsai 	PIN(V17),
3814af4eb66SBilly Tsai 	PIN(J13),
3824af4eb66SBilly Tsai 	PIN(AB16),
3834af4eb66SBilly Tsai 	PIN(AC16),
3844af4eb66SBilly Tsai 	PIN(AF16),
3854af4eb66SBilly Tsai 	PIN(AA15),
3864af4eb66SBilly Tsai 	PIN(AB15),
3874af4eb66SBilly Tsai 	PIN(AC15),
3884af4eb66SBilly Tsai 	PIN(AD15),
3894af4eb66SBilly Tsai 	PIN(Y15),
3904af4eb66SBilly Tsai 	PIN(AA14),
3914af4eb66SBilly Tsai 	PIN(W16),
3924af4eb66SBilly Tsai 	PIN(V16),
3934af4eb66SBilly Tsai 	PIN(AB18),
3944af4eb66SBilly Tsai 	PIN(AC18),
3954af4eb66SBilly Tsai 	PIN(K13),
3964af4eb66SBilly Tsai 	PIN(AA17),
3974af4eb66SBilly Tsai 	PIN(AB17),
3984af4eb66SBilly Tsai 	PIN(AD16),
3994af4eb66SBilly Tsai 	PIN(AC17),
4004af4eb66SBilly Tsai 	PIN(AD17),
4014af4eb66SBilly Tsai 	PIN(AE16),
4024af4eb66SBilly Tsai 	PIN(AE17),
4034af4eb66SBilly Tsai 	PIN(AB24),
4044af4eb66SBilly Tsai 	PIN(W26),
4054af4eb66SBilly Tsai 	PIN(HOLE0),
4064af4eb66SBilly Tsai 	PIN(HOLE1),
4074af4eb66SBilly Tsai 	PIN(HOLE2),
4084af4eb66SBilly Tsai 	PIN(HOLE3),
4094af4eb66SBilly Tsai 	PIN(W25),
4104af4eb66SBilly Tsai 	PIN(Y23),
4114af4eb66SBilly Tsai 	PIN(Y24),
4124af4eb66SBilly Tsai 	PIN(W21),
4134af4eb66SBilly Tsai 	PIN(AA23),
4144af4eb66SBilly Tsai 	PIN(AC22),
4154af4eb66SBilly Tsai 	PIN(AB22),
4164af4eb66SBilly Tsai 	PIN(Y21),
4174af4eb66SBilly Tsai 	PIN(AE20),
4184af4eb66SBilly Tsai 	PIN(AF19),
4194af4eb66SBilly Tsai 	PIN(Y22),
4204af4eb66SBilly Tsai 	PIN(AA20),
4214af4eb66SBilly Tsai 	PIN(AA22),
4224af4eb66SBilly Tsai 	PIN(AB20),
4234af4eb66SBilly Tsai 	PIN(AF18),
4244af4eb66SBilly Tsai 	PIN(AE19),
4254af4eb66SBilly Tsai 	PIN(AD20),
4264af4eb66SBilly Tsai 	PIN(AC20),
4274af4eb66SBilly Tsai 	PIN(AA21),
4284af4eb66SBilly Tsai 	PIN(AB21),
4294af4eb66SBilly Tsai 	PIN(AC19),
4304af4eb66SBilly Tsai 	PIN(AE18),
4314af4eb66SBilly Tsai 	PIN(AD19),
4324af4eb66SBilly Tsai 	PIN(AD18),
4334af4eb66SBilly Tsai 	PIN(U25),
4344af4eb66SBilly Tsai 	PIN(U26),
4354af4eb66SBilly Tsai 	PIN(Y26),
4364af4eb66SBilly Tsai 	PIN(AA24),
4374af4eb66SBilly Tsai 	PIN(R25),
4384af4eb66SBilly Tsai 	PIN(AA26),
4394af4eb66SBilly Tsai 	PIN(R26),
4404af4eb66SBilly Tsai 	PIN(Y25),
4414af4eb66SBilly Tsai 	PIN(B16),
4424af4eb66SBilly Tsai 	PIN(D14),
4434af4eb66SBilly Tsai 	PIN(B15),
4444af4eb66SBilly Tsai 	PIN(B14),
4454af4eb66SBilly Tsai 	PIN(C17),
4464af4eb66SBilly Tsai 	PIN(B13),
4474af4eb66SBilly Tsai 	PIN(E14),
4484af4eb66SBilly Tsai 	PIN(C15),
4494af4eb66SBilly Tsai 	PIN(D24),
4504af4eb66SBilly Tsai 	PIN(B23),
4514af4eb66SBilly Tsai 	PIN(B22),
4524af4eb66SBilly Tsai 	PIN(C23),
4534af4eb66SBilly Tsai 	PIN(B18),
4544af4eb66SBilly Tsai 	PIN(B21),
4554af4eb66SBilly Tsai 	PIN(M15),
4564af4eb66SBilly Tsai 	PIN(B19),
4574af4eb66SBilly Tsai 	PIN(B26),
4584af4eb66SBilly Tsai 	PIN(A25),
4594af4eb66SBilly Tsai 	PIN(A24),
4604af4eb66SBilly Tsai 	PIN(B24),
4614af4eb66SBilly Tsai 	PIN(E26),
4624af4eb66SBilly Tsai 	PIN(A21),
4634af4eb66SBilly Tsai 	PIN(A19),
4644af4eb66SBilly Tsai 	PIN(A18),
4654af4eb66SBilly Tsai 	PIN(D26),
4664af4eb66SBilly Tsai 	PIN(C26),
4674af4eb66SBilly Tsai 	PIN(A23),
4684af4eb66SBilly Tsai 	PIN(A22),
4694af4eb66SBilly Tsai 	PIN(B25),
4704af4eb66SBilly Tsai 	PIN(F26),
4714af4eb66SBilly Tsai 	PIN(A26),
4724af4eb66SBilly Tsai 	PIN(A14),
4734af4eb66SBilly Tsai 	PIN(E10),
4744af4eb66SBilly Tsai 	PIN(E13),
4754af4eb66SBilly Tsai 	PIN(D12),
4764af4eb66SBilly Tsai 	PIN(F10),
4774af4eb66SBilly Tsai 	PIN(E11),
4784af4eb66SBilly Tsai 	PIN(F11),
4794af4eb66SBilly Tsai 	PIN(F13),
4804af4eb66SBilly Tsai 	PIN(N15),
4814af4eb66SBilly Tsai 	PIN(C20),
4824af4eb66SBilly Tsai 	PIN(C19),
4834af4eb66SBilly Tsai 	PIN(A8),
4844af4eb66SBilly Tsai 	PIN(R14),
4854af4eb66SBilly Tsai 	PIN(A7),
4864af4eb66SBilly Tsai 	PIN(P14),
4874af4eb66SBilly Tsai 	PIN(D20),
4884af4eb66SBilly Tsai 	PIN(A6),
4894af4eb66SBilly Tsai 	PIN(B6),
4904af4eb66SBilly Tsai 	PIN(N14),
4914af4eb66SBilly Tsai 	PIN(B7),
4924af4eb66SBilly Tsai 	PIN(B8),
4934af4eb66SBilly Tsai 	PIN(B9),
4944af4eb66SBilly Tsai 	PIN(M14),
4954af4eb66SBilly Tsai 	PIN(J11),
4964af4eb66SBilly Tsai 	PIN(E7),
4974af4eb66SBilly Tsai 	PIN(D19),
4984af4eb66SBilly Tsai 	PIN(B11),
4994af4eb66SBilly Tsai 	PIN(D15),
5004af4eb66SBilly Tsai 	PIN(B12),
5014af4eb66SBilly Tsai 	PIN(B10),
5024af4eb66SBilly Tsai 	PIN(P13),
5034af4eb66SBilly Tsai 	PIN(C18),
5044af4eb66SBilly Tsai 	PIN(C6),
5054af4eb66SBilly Tsai 	PIN(C7),
5064af4eb66SBilly Tsai 	PIN(D7),
5074af4eb66SBilly Tsai 	PIN(N13),
5084af4eb66SBilly Tsai 	PIN(C8),
5094af4eb66SBilly Tsai 	PIN(C9),
5104af4eb66SBilly Tsai 	PIN(C10),
5114af4eb66SBilly Tsai 	PIN(M16),
5124af4eb66SBilly Tsai 	PIN(A15),
5134af4eb66SBilly Tsai 	PIN(G11),
5144af4eb66SBilly Tsai 	PIN(H7),
5154af4eb66SBilly Tsai 	PIN(H8),
5164af4eb66SBilly Tsai 	PIN(H9),
5174af4eb66SBilly Tsai 	PIN(H10),
5184af4eb66SBilly Tsai 	PIN(H11),
5194af4eb66SBilly Tsai 	PIN(J9),
5204af4eb66SBilly Tsai 	PIN(J10),
5214af4eb66SBilly Tsai 	PIN(E9),
5224af4eb66SBilly Tsai 	PIN(F9),
5234af4eb66SBilly Tsai 	PIN(F8),
5244af4eb66SBilly Tsai 	PIN(M13),
5254af4eb66SBilly Tsai 	PIN(F7),
5264af4eb66SBilly Tsai 	PIN(D8),
5274af4eb66SBilly Tsai 	PIN(E8),
5284af4eb66SBilly Tsai 	PIN(L12),
5294af4eb66SBilly Tsai 	PIN(F12),
5304af4eb66SBilly Tsai 	PIN(E12),
5314af4eb66SBilly Tsai 	PIN(J12),
5324af4eb66SBilly Tsai 	PIN(G7),
5334af4eb66SBilly Tsai 	PIN(G8),
5344af4eb66SBilly Tsai 	PIN(G9),
5354af4eb66SBilly Tsai 	PIN(G10),
5364af4eb66SBilly Tsai 	PIN(K12),
5374af4eb66SBilly Tsai 	PIN(W17),
5384af4eb66SBilly Tsai 	PIN(V18),
5394af4eb66SBilly Tsai 	PIN(W18),
5404af4eb66SBilly Tsai 	PIN(Y17),
5414af4eb66SBilly Tsai 	PIN(AA18),
5424af4eb66SBilly Tsai 	PIN(AA13),
5434af4eb66SBilly Tsai 	PIN(Y18),
5444af4eb66SBilly Tsai 	PIN(AA12),
5454af4eb66SBilly Tsai 	PIN(W20),
5464af4eb66SBilly Tsai 	PIN(V20),
5474af4eb66SBilly Tsai 	PIN(Y11),
5484af4eb66SBilly Tsai 	PIN(V14),
5494af4eb66SBilly Tsai 	PIN(V19),
5504af4eb66SBilly Tsai 	PIN(W14),
5514af4eb66SBilly Tsai 	PIN(Y20),
5524af4eb66SBilly Tsai 	PIN(AB19),
5534af4eb66SBilly Tsai 	PIN(U21),
5544af4eb66SBilly Tsai 	PIN(T24),
5554af4eb66SBilly Tsai 	PIN(V24),
5564af4eb66SBilly Tsai 	PIN(V22),
5574af4eb66SBilly Tsai 	PIN(T23),
5584af4eb66SBilly Tsai 	PIN(AC25),
5594af4eb66SBilly Tsai 	PIN(AB25),
5604af4eb66SBilly Tsai 	PIN(AC24),
5614af4eb66SBilly Tsai 	PIN(PCIERC2_PERST),
5624af4eb66SBilly Tsai 	PIN(PORTC_MODE),
5634af4eb66SBilly Tsai 	PIN(PORTD_MODE),
5644af4eb66SBilly Tsai 	PIN(SGMII0),
5654af4eb66SBilly Tsai };
5664af4eb66SBilly Tsai 
5674af4eb66SBilly Tsai static const struct pinctrl_ops aspeed_g7_soc1_pctl_ops = {
5684af4eb66SBilly Tsai 	.get_groups_count = pinctrl_generic_get_group_count,
5694af4eb66SBilly Tsai 	.get_group_name = pinctrl_generic_get_group_name,
5704af4eb66SBilly Tsai 	.get_group_pins = pinctrl_generic_get_group_pins,
5714af4eb66SBilly Tsai 	.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
5724af4eb66SBilly Tsai 	.dt_free_map = pinctrl_utils_free_map,
5734af4eb66SBilly Tsai };
5744af4eb66SBilly Tsai 
5754af4eb66SBilly Tsai struct aspeed_g7_soc1_function {
5764af4eb66SBilly Tsai 	struct pinfunction pinfunction;
5774af4eb66SBilly Tsai 	const u8 *muxvals;
5784af4eb66SBilly Tsai };
5794af4eb66SBilly Tsai 
5804af4eb66SBilly Tsai static int aspeed_g7_soc1_drive_strength_to_hw(u32 strength,
5814af4eb66SBilly Tsai 					       unsigned int *val)
5824af4eb66SBilly Tsai {
5834af4eb66SBilly Tsai 	if (strength < ASPEED_G7_SOC1_DRV_STRENGTH_MIN_MA ||
5844af4eb66SBilly Tsai 	    strength > ASPEED_G7_SOC1_DRV_STRENGTH_MAX_MA ||
5854af4eb66SBilly Tsai 	    strength % ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA)
5864af4eb66SBilly Tsai 		return -EINVAL;
5874af4eb66SBilly Tsai 
5884af4eb66SBilly Tsai 	*val = (strength / ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA) -
5894af4eb66SBilly Tsai 	       ASPEED_G7_SOC1_DRV_STRENGTH_HW_BASE;
5904af4eb66SBilly Tsai 
5914af4eb66SBilly Tsai 	return 0;
5924af4eb66SBilly Tsai }
5934af4eb66SBilly Tsai 
5944af4eb66SBilly Tsai static int aspeed_g7_soc1_set_mux(struct pinctrl_dev *pctldev,
5954af4eb66SBilly Tsai 				  unsigned int fselector, unsigned int group)
5964af4eb66SBilly Tsai {
5974af4eb66SBilly Tsai 	struct aspeed_g7_soc1_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
5984af4eb66SBilly Tsai 	const struct aspeed_g7_soc1_function *soc1_func;
5994af4eb66SBilly Tsai 	const struct function_desc *fd;
6004af4eb66SBilly Tsai 	const struct pinfunction *func;
6014af4eb66SBilly Tsai 	const struct pingroup *grp;
6024af4eb66SBilly Tsai 	struct group_desc *gd;
6034af4eb66SBilly Tsai 	const char *gname;
6044af4eb66SBilly Tsai 	int i, g_idx = -1, ret;
6054af4eb66SBilly Tsai 
6064af4eb66SBilly Tsai 	gd = pinctrl_generic_get_group(pctldev, group);
6074af4eb66SBilly Tsai 	if (!gd)
6084af4eb66SBilly Tsai 		return -EINVAL;
6094af4eb66SBilly Tsai 
6104af4eb66SBilly Tsai 	grp = &gd->grp;
6114af4eb66SBilly Tsai 
6124af4eb66SBilly Tsai 	fd = pinmux_generic_get_function(pctldev, fselector);
6134af4eb66SBilly Tsai 	if (!fd)
6144af4eb66SBilly Tsai 		return -EINVAL;
6154af4eb66SBilly Tsai 
6164af4eb66SBilly Tsai 	soc1_func = fd->data;
6174af4eb66SBilly Tsai 	if (!soc1_func)
6184af4eb66SBilly Tsai 		return -EINVAL;
6194af4eb66SBilly Tsai 
6204af4eb66SBilly Tsai 	func = &soc1_func->pinfunction;
6214af4eb66SBilly Tsai 	gname = grp->name;
6224af4eb66SBilly Tsai 
6234af4eb66SBilly Tsai 	for (i = 0; i < func->ngroups; i++) {
6244af4eb66SBilly Tsai 		if (!strcmp(gname, func->groups[i])) {
6254af4eb66SBilly Tsai 			g_idx = i;
6264af4eb66SBilly Tsai 			break;
6274af4eb66SBilly Tsai 		}
6284af4eb66SBilly Tsai 	}
6294af4eb66SBilly Tsai 
6304af4eb66SBilly Tsai 	if (g_idx < 0)
6314af4eb66SBilly Tsai 		return -EINVAL;
6324af4eb66SBilly Tsai 
6334af4eb66SBilly Tsai 	for (i = 0; i < grp->npins; i++) {
6344af4eb66SBilly Tsai 		unsigned int val = soc1_func->muxvals[g_idx];
6354af4eb66SBilly Tsai 		unsigned int pin = grp->pins[i];
6364af4eb66SBilly Tsai 		struct aspeed_g7_field field;
6374af4eb66SBilly Tsai 
6384af4eb66SBilly Tsai 		if (pin == PCIERC2_PERST) {
6394af4eb66SBilly Tsai 			/*
6404af4eb66SBilly Tsai 			 * PCIERC2_PERST is a special case: it is managed by a
6414af4eb66SBilly Tsai 			 * dedicated control register (0x908) instead of the
6424af4eb66SBilly Tsai 			 * standard 4-bit multi-function field.
6434af4eb66SBilly Tsai 			 */
6444af4eb66SBilly Tsai 			field.reg = ASPEED_G7_SOC1_PCIE_REG;
6454af4eb66SBilly Tsai 			field.shift = 0;
6464af4eb66SBilly Tsai 			field.mask = 0x1;
6474af4eb66SBilly Tsai 			val = 1;
6484af4eb66SBilly Tsai 		} else if (pin == PORTC_MODE || pin == PORTD_MODE) {
6494af4eb66SBilly Tsai 			/*
6504af4eb66SBilly Tsai 			 * PORTC_MODE and PORTD_MODE are virtual "pins" that
6514af4eb66SBilly Tsai 			 * control the USB 2.0 controller mode settings.
6524af4eb66SBilly Tsai 			 * These reside in a specific control register (0x3B0)
6534af4eb66SBilly Tsai 			 * with non-standard bit widths.
6544af4eb66SBilly Tsai 			 */
6554af4eb66SBilly Tsai 			field.reg = ASPEED_G7_SOC1_USB_MODE_REG;
6564af4eb66SBilly Tsai 			field.mask = 0x3;
6574af4eb66SBilly Tsai 			field.shift = pin == PORTC_MODE ? 0 : 2;
6584af4eb66SBilly Tsai 		} else if (pin == SGMII0) {
6594af4eb66SBilly Tsai 			/*
6604af4eb66SBilly Tsai 			 * SGMII0 is a virtual pin whose mux control resides at
6614af4eb66SBilly Tsai 			 * SCU47C bit 0, outside the contiguous pin-indexed MUX
6624af4eb66SBilly Tsai 			 * register range starting at MUX_BASE.  The field is
6634af4eb66SBilly Tsai 			 * 1 bit wide; use a 1-bit mask to avoid clobbering
6644af4eb66SBilly Tsai 			 * adjacent bits in SCU47C.
6654af4eb66SBilly Tsai 			 */
6664af4eb66SBilly Tsai 			field.reg = ASPEED_G7_SOC1_SGMII_REG;
6674af4eb66SBilly Tsai 			field.shift = 0;
6684af4eb66SBilly Tsai 			field.mask = 0x1;
6694af4eb66SBilly Tsai 		} else {
6704af4eb66SBilly Tsai 			/* Standard 4-bit-per-pin multi-function configuration */
6714af4eb66SBilly Tsai 			field = aspeed_g7_soc1_pinmux_field_from_pin(pin);
6724af4eb66SBilly Tsai 		}
6734af4eb66SBilly Tsai 
6744af4eb66SBilly Tsai 		dev_dbg(pctl->dev,
6754af4eb66SBilly Tsai 			"Setting pin %u reg 0x%x shift %u to function %s (muxval=0x%x)\n",
6764af4eb66SBilly Tsai 			pin, field.reg, field.shift, func->name, val);
6774af4eb66SBilly Tsai 
6784af4eb66SBilly Tsai 		ret = regmap_update_bits(pctl->regmap, field.reg,
6794af4eb66SBilly Tsai 					 field.mask << field.shift,
6804af4eb66SBilly Tsai 					 val << field.shift);
6814af4eb66SBilly Tsai 		if (ret)
6824af4eb66SBilly Tsai 			return ret;
6834af4eb66SBilly Tsai 	}
6844af4eb66SBilly Tsai 
6854af4eb66SBilly Tsai 	return 0;
6864af4eb66SBilly Tsai }
6874af4eb66SBilly Tsai 
6884af4eb66SBilly Tsai static int aspeed_g7_soc1_gpio_request_enable(struct pinctrl_dev *pctldev,
6894af4eb66SBilly Tsai 					      struct pinctrl_gpio_range *range,
6904af4eb66SBilly Tsai 					      unsigned int pin)
6914af4eb66SBilly Tsai {
6924af4eb66SBilly Tsai 	struct aspeed_g7_soc1_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
6934af4eb66SBilly Tsai 	struct aspeed_g7_field field;
694*be3ee6e6SBilly Tsai 	unsigned int val = 0;
6954af4eb66SBilly Tsai 	int ret = -ENOTSUPP;
6964af4eb66SBilly Tsai 
6974af4eb66SBilly Tsai 	if (pin <= AC24) {
698*be3ee6e6SBilly Tsai 		/*
699*be3ee6e6SBilly Tsai 		 * Balls W17 through AB19 are the ADC-capable pins: mux
700*be3ee6e6SBilly Tsai 		 * function 0 selects the ADC input and function 1 selects
701*be3ee6e6SBilly Tsai 		 * GPIO, unlike all other pins where function 0 is GPIO.
702*be3ee6e6SBilly Tsai 		 */
703*be3ee6e6SBilly Tsai 		if (pin >= W17 && pin <= AB19)
704*be3ee6e6SBilly Tsai 			val = 1;
7054af4eb66SBilly Tsai 		field = aspeed_g7_soc1_pinmux_field_from_pin(pin);
7064af4eb66SBilly Tsai 		ret = regmap_update_bits(pctl->regmap, field.reg,
707*be3ee6e6SBilly Tsai 					 field.mask << field.shift,
708*be3ee6e6SBilly Tsai 					 val << field.shift);
7094af4eb66SBilly Tsai 	}
7104af4eb66SBilly Tsai 
7114af4eb66SBilly Tsai 	return ret;
7124af4eb66SBilly Tsai }
7134af4eb66SBilly Tsai 
7144af4eb66SBilly Tsai static const struct pinmux_ops aspeed_g7_soc1_pmx_ops = {
7154af4eb66SBilly Tsai 	.get_functions_count = pinmux_generic_get_function_count,
7164af4eb66SBilly Tsai 	.get_function_name = pinmux_generic_get_function_name,
7174af4eb66SBilly Tsai 	.get_function_groups = pinmux_generic_get_function_groups,
7184af4eb66SBilly Tsai 	.set_mux = aspeed_g7_soc1_set_mux,
7194af4eb66SBilly Tsai 	.gpio_request_enable = aspeed_g7_soc1_gpio_request_enable,
7204af4eb66SBilly Tsai 	.strict = true,
7214af4eb66SBilly Tsai };
7224af4eb66SBilly Tsai 
7234af4eb66SBilly Tsai /*
7244af4eb66SBilly Tsai  * aspeed_g7_soc1_drv_map - Mapping table for pin drive strength control.
7254af4eb66SBilly Tsai  *
7264af4eb66SBilly Tsai  * In AST2700 SOC1, drive strength configuration is architecturally decoupled
7274af4eb66SBilly Tsai  * from the main pin mux registers (0x400 range). It is managed by a separate
7284af4eb66SBilly Tsai  * set of registers starting at 0x4C0.
7294af4eb66SBilly Tsai  *
7304af4eb66SBilly Tsai  * This table is required because:
7314af4eb66SBilly Tsai  * 1. The mapping between physical pin IDs and drive strength control slots
7324af4eb66SBilly Tsai  *    is non-linear and sparse.
7334af4eb66SBilly Tsai  *    For example, W25 maps to field index 8 (stored as 9),
7344af4eb66SBilly Tsai  *    meaning it occupies bits [17:16] of the first 0x4C0 register.
7354af4eb66SBilly Tsai  * 2. Only a subset of physical pins supports drive strength configuration.
7364af4eb66SBilly Tsai  *
7374af4eb66SBilly Tsai  * The table stores (drive strength field index + 1).
7384af4eb66SBilly Tsai  * The field index refers to the 2-bit drive strength field position within the
7394af4eb66SBilly Tsai  * 0x4C0 register range. A value of 0 indicates that the pin does not support
7404af4eb66SBilly Tsai  * drive strength configuration (returning -ENOTSUPP).
7414af4eb66SBilly Tsai  * This +1 offset allows us to rely on C's default zero-initialization for
7424af4eb66SBilly Tsai  * unsupported pins while avoiding compiler warnings regarding overridden
7434af4eb66SBilly Tsai  * initializers.
7444af4eb66SBilly Tsai  */
7454af4eb66SBilly Tsai static const int aspeed_g7_soc1_drv_map[ASPEED_G7_SOC1_NR_PINS] = {
7464af4eb66SBilly Tsai 	[C16] = 1,   [C14] = 2,	  [C11] = 3,   [D9] = 4,    [F14] = 5,	 [D10] = 6,   [C12] = 7,
7474af4eb66SBilly Tsai 	[C13] = 8,   [W25] = 9,	  [Y23] = 10,  [Y24] = 11,  [W21] = 12,	 [AA23] = 13, [AC22] = 14,
7484af4eb66SBilly Tsai 	[AB22] = 15, [Y21] = 16,  [AE20] = 17, [AF19] = 18, [Y22] = 19,	 [AA20] = 20, [AA22] = 21,
7494af4eb66SBilly Tsai 	[AB20] = 22, [AF18] = 23, [AE19] = 24, [AD20] = 25, [AC20] = 26, [AA21] = 27, [AB21] = 28,
7504af4eb66SBilly Tsai 	[AC19] = 29, [AE18] = 30, [AD19] = 31, [AD18] = 32, [U25] = 33,	 [U26] = 34,  [Y26] = 35,
7514af4eb66SBilly Tsai 	[AA24] = 36, [R25] = 37,  [AA26] = 38, [R26] = 39,  [Y25] = 40,	 [B16] = 41,  [D14] = 42,
7524af4eb66SBilly Tsai 	[B15] = 43,  [B14] = 44,  [C17] = 45,  [B13] = 46,  [E14] = 47,	 [C15] = 48,  [D24] = 49,
7534af4eb66SBilly Tsai 	[B23] = 50,  [B22] = 51,  [C23] = 52,  [B18] = 53,  [B21] = 54,	 [M15] = 55,  [B19] = 56,
7544af4eb66SBilly Tsai 	[B26] = 57,  [A25] = 58,  [A24] = 59,  [B24] = 60,  [E26] = 61,	 [A21] = 62,  [A19] = 63,
7554af4eb66SBilly Tsai 	[A18] = 64,  [D26] = 65,  [C26] = 66,  [A23] = 67,  [A22] = 68,	 [B25] = 69,  [F26] = 70,
7564af4eb66SBilly Tsai 	[A26] = 71,  [A14] = 72,  [E10] = 73,  [E13] = 74,  [D12] = 75,	 [F10] = 76,  [E11] = 77,
7574af4eb66SBilly Tsai 	[F11] = 78,  [F13] = 79,  [N15] = 80,  [C20] = 81,  [C19] = 82,	 [A8] = 83,   [R14] = 84,
7584af4eb66SBilly Tsai 	[A7] = 85,   [P14] = 86,  [D20] = 87,  [A6] = 88,   [B6] = 89,	 [N14] = 90,  [B7] = 91,
7594af4eb66SBilly Tsai 	[B8] = 92,   [B9] = 93,	  [M14] = 94,  [J11] = 95,  [E7] = 96,	 [D19] = 97,  [B11] = 98,
7604af4eb66SBilly Tsai 	[D15] = 99,  [B12] = 100, [B10] = 101, [P13] = 102, [C18] = 103, [C6] = 104,  [C7] = 105,
7614af4eb66SBilly Tsai 	[D7] = 106,  [N13] = 107, [C8] = 108,  [C9] = 109,  [C10] = 110, [M16] = 111, [A15] = 112,
7624af4eb66SBilly Tsai 	[E9] = 113,  [F9] = 114,  [F8] = 115,  [M13] = 116, [F7] = 117,	 [D8] = 118,  [E8] = 119,
7634af4eb66SBilly Tsai 	[L12] = 120,
7644af4eb66SBilly Tsai };
7654af4eb66SBilly Tsai 
7664af4eb66SBilly Tsai static int aspeed_g7_soc1_pin_config_get(struct pinctrl_dev *pctldev,
7674af4eb66SBilly Tsai 					 unsigned int pin,
7684af4eb66SBilly Tsai 					 unsigned long *config)
7694af4eb66SBilly Tsai {
7704af4eb66SBilly Tsai 	struct aspeed_g7_soc1_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
7714af4eb66SBilly Tsai 	enum pin_config_param param = pinconf_to_config_param(*config);
7724af4eb66SBilly Tsai 	struct aspeed_g7_field field;
7734af4eb66SBilly Tsai 	unsigned int val, val_raw;
7744af4eb66SBilly Tsai 	int ret, ds_idx;
7754af4eb66SBilly Tsai 
7764af4eb66SBilly Tsai 	if (pin > AC24)
7774af4eb66SBilly Tsai 		return -EINVAL;
7784af4eb66SBilly Tsai 
7794af4eb66SBilly Tsai 	switch (param) {
7804af4eb66SBilly Tsai 	case PIN_CONFIG_BIAS_DISABLE:
7814af4eb66SBilly Tsai 		field = aspeed_g7_soc1_bias_field_from_pin(pin);
7824af4eb66SBilly Tsai 		break;
7834af4eb66SBilly Tsai 	case PIN_CONFIG_BIAS_PULL_DOWN:
7844af4eb66SBilly Tsai 	case PIN_CONFIG_BIAS_PULL_UP:
7854af4eb66SBilly Tsai 		/*
7864af4eb66SBilly Tsai 		 * The hardware has a single 1-bit enable/disable field per
7874af4eb66SBilly Tsai 		 * pin; pull direction is fixed in silicon and cannot be read
7884af4eb66SBilly Tsai 		 * back from the register.  Reject readback requests for a
7894af4eb66SBilly Tsai 		 * specific pull direction.
7904af4eb66SBilly Tsai 		 */
7914af4eb66SBilly Tsai 		return -ENOTSUPP;
7924af4eb66SBilly Tsai 	case PIN_CONFIG_DRIVE_STRENGTH:
7934af4eb66SBilly Tsai 		ds_idx = aspeed_g7_soc1_drv_map[pin];
7944af4eb66SBilly Tsai 		if (!ds_idx)
7954af4eb66SBilly Tsai 			return -ENOTSUPP;
7964af4eb66SBilly Tsai 		ds_idx--; /* Adjust back to 0-based hardware index */
7974af4eb66SBilly Tsai 		field = aspeed_g7_soc1_drv_field_from_idx(ds_idx);
7984af4eb66SBilly Tsai 		break;
7994af4eb66SBilly Tsai 	default:
8004af4eb66SBilly Tsai 		return -ENOTSUPP;
8014af4eb66SBilly Tsai 	}
8024af4eb66SBilly Tsai 
8034af4eb66SBilly Tsai 	ret = regmap_read(pctl->regmap, field.reg, &val_raw);
8044af4eb66SBilly Tsai 	if (ret)
8054af4eb66SBilly Tsai 		return ret;
8064af4eb66SBilly Tsai 
8074af4eb66SBilly Tsai 	val = (val_raw & (field.mask << field.shift)) >> field.shift;
8084af4eb66SBilly Tsai 	if (param == PIN_CONFIG_DRIVE_STRENGTH)
8094af4eb66SBilly Tsai 		val = (val + ASPEED_G7_SOC1_DRV_STRENGTH_HW_BASE) *
8104af4eb66SBilly Tsai 		      ASPEED_G7_SOC1_DRV_STRENGTH_STEP_MA;
8114af4eb66SBilly Tsai 
8124af4eb66SBilly Tsai 	if (!val)
8134af4eb66SBilly Tsai 		return -EINVAL;
8144af4eb66SBilly Tsai 
8154af4eb66SBilly Tsai 	*config = pinconf_to_config_packed(param, val);
8164af4eb66SBilly Tsai 
8174af4eb66SBilly Tsai 	return 0;
8184af4eb66SBilly Tsai }
8194af4eb66SBilly Tsai 
8204af4eb66SBilly Tsai static int aspeed_g7_soc1_pin_config_set(struct pinctrl_dev *pctldev,
8214af4eb66SBilly Tsai 					 unsigned int pin,
8224af4eb66SBilly Tsai 					 unsigned long *configs,
8234af4eb66SBilly Tsai 					 unsigned int num_configs)
8244af4eb66SBilly Tsai {
8254af4eb66SBilly Tsai 	struct aspeed_g7_soc1_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
8264af4eb66SBilly Tsai 	struct aspeed_g7_field field;
8274af4eb66SBilly Tsai 	enum pin_config_param param;
8284af4eb66SBilly Tsai 	int i, ret, ds_idx;
8294af4eb66SBilly Tsai 	unsigned int val;
8304af4eb66SBilly Tsai 	u32 arg;
8314af4eb66SBilly Tsai 
8324af4eb66SBilly Tsai 	if (pin > AC24)
8334af4eb66SBilly Tsai 		return -EINVAL;
8344af4eb66SBilly Tsai 
8354af4eb66SBilly Tsai 	for (i = 0; i < num_configs; i++) {
8364af4eb66SBilly Tsai 		param = pinconf_to_config_param(configs[i]);
8374af4eb66SBilly Tsai 		arg = pinconf_to_config_argument(configs[i]);
8384af4eb66SBilly Tsai 
8394af4eb66SBilly Tsai 		switch (param) {
8404af4eb66SBilly Tsai 		case PIN_CONFIG_BIAS_PULL_DOWN:
8414af4eb66SBilly Tsai 		case PIN_CONFIG_BIAS_PULL_UP:
8424af4eb66SBilly Tsai 			/*
8434af4eb66SBilly Tsai 			 * The hardware has one enable/disable bit per pin;
8444af4eb66SBilly Tsai 			 * pull direction is fixed in silicon.  Both PULL_UP
8454af4eb66SBilly Tsai 			 * and PULL_DOWN map to "enable bias"; the caller must
8464af4eb66SBilly Tsai 			 * request the direction that the hardware provides.
8474af4eb66SBilly Tsai 			 */
8484af4eb66SBilly Tsai 		case PIN_CONFIG_BIAS_DISABLE:
8494af4eb66SBilly Tsai 			field = aspeed_g7_soc1_bias_field_from_pin(pin);
8504af4eb66SBilly Tsai 			val = (param == PIN_CONFIG_BIAS_DISABLE) ? 1 : 0;
8514af4eb66SBilly Tsai 			break;
8524af4eb66SBilly Tsai 		case PIN_CONFIG_DRIVE_STRENGTH:
8534af4eb66SBilly Tsai 			ds_idx = aspeed_g7_soc1_drv_map[pin];
8544af4eb66SBilly Tsai 			if (!ds_idx)
8554af4eb66SBilly Tsai 				return -ENOTSUPP;
8564af4eb66SBilly Tsai 			ds_idx--; /* Adjust back to 0-based hardware index */
8574af4eb66SBilly Tsai 			field = aspeed_g7_soc1_drv_field_from_idx(ds_idx);
8584af4eb66SBilly Tsai 			ret = aspeed_g7_soc1_drive_strength_to_hw(arg, &val);
8594af4eb66SBilly Tsai 			if (ret)
8604af4eb66SBilly Tsai 				return ret;
8614af4eb66SBilly Tsai 			break;
8624af4eb66SBilly Tsai 		default:
8634af4eb66SBilly Tsai 			return -ENOTSUPP;
8644af4eb66SBilly Tsai 		}
8654af4eb66SBilly Tsai 
8664af4eb66SBilly Tsai 		dev_dbg(pctl->dev,
8674af4eb66SBilly Tsai 			"Configuring pin %u reg 0x%x shift %u param %d arg %u val 0x%x\n",
8684af4eb66SBilly Tsai 			pin, field.reg, field.shift, param, arg, val);
8694af4eb66SBilly Tsai 
8704af4eb66SBilly Tsai 		ret = regmap_update_bits(pctl->regmap, field.reg,
8714af4eb66SBilly Tsai 					 field.mask << field.shift,
8724af4eb66SBilly Tsai 					 val << field.shift);
8734af4eb66SBilly Tsai 
8744af4eb66SBilly Tsai 		if (ret)
8754af4eb66SBilly Tsai 			return ret;
8764af4eb66SBilly Tsai 	}
8774af4eb66SBilly Tsai 
8784af4eb66SBilly Tsai 	return 0;
8794af4eb66SBilly Tsai }
8804af4eb66SBilly Tsai 
8814af4eb66SBilly Tsai static int aspeed_g7_soc1_pin_config_group_get(struct pinctrl_dev *pctldev,
8824af4eb66SBilly Tsai 					       unsigned int selector,
8834af4eb66SBilly Tsai 					       unsigned long *config)
8844af4eb66SBilly Tsai {
8854af4eb66SBilly Tsai 	const unsigned int *pins;
8864af4eb66SBilly Tsai 	unsigned int npins;
8874af4eb66SBilly Tsai 	int ret;
8884af4eb66SBilly Tsai 
8894af4eb66SBilly Tsai 	ret = pinctrl_generic_get_group_pins(pctldev, selector, &pins, &npins);
8904af4eb66SBilly Tsai 	if (ret)
8914af4eb66SBilly Tsai 		return ret;
8924af4eb66SBilly Tsai 	if (!npins)
8934af4eb66SBilly Tsai 		return -ENODEV;
8944af4eb66SBilly Tsai 
8954af4eb66SBilly Tsai 	return aspeed_g7_soc1_pin_config_get(pctldev, pins[0], config);
8964af4eb66SBilly Tsai }
8974af4eb66SBilly Tsai 
8984af4eb66SBilly Tsai static int aspeed_g7_soc1_pin_config_group_set(struct pinctrl_dev *pctldev,
8994af4eb66SBilly Tsai 					       unsigned int selector,
9004af4eb66SBilly Tsai 					       unsigned long *configs,
9014af4eb66SBilly Tsai 					       unsigned int num_configs)
9024af4eb66SBilly Tsai {
9034af4eb66SBilly Tsai 	const unsigned int *pins;
9044af4eb66SBilly Tsai 	unsigned int npins;
9054af4eb66SBilly Tsai 	int ret;
9064af4eb66SBilly Tsai 	int i;
9074af4eb66SBilly Tsai 
9084af4eb66SBilly Tsai 	ret = pinctrl_generic_get_group_pins(pctldev, selector, &pins, &npins);
9094af4eb66SBilly Tsai 	if (ret)
9104af4eb66SBilly Tsai 		return ret;
9114af4eb66SBilly Tsai 
9124af4eb66SBilly Tsai 	for (i = 0; i < npins; i++) {
9134af4eb66SBilly Tsai 		ret = aspeed_g7_soc1_pin_config_set(pctldev, pins[i], configs,
9144af4eb66SBilly Tsai 						    num_configs);
9154af4eb66SBilly Tsai 		if (ret)
9164af4eb66SBilly Tsai 			return ret;
9174af4eb66SBilly Tsai 	}
9184af4eb66SBilly Tsai 
9194af4eb66SBilly Tsai 	return 0;
9204af4eb66SBilly Tsai }
9214af4eb66SBilly Tsai 
9224af4eb66SBilly Tsai static const struct pinconf_ops aspeed_g7_soc1_conf_ops = {
9234af4eb66SBilly Tsai 	.is_generic = true,
9244af4eb66SBilly Tsai 	.pin_config_get = aspeed_g7_soc1_pin_config_get,
9254af4eb66SBilly Tsai 	.pin_config_set = aspeed_g7_soc1_pin_config_set,
9264af4eb66SBilly Tsai 	.pin_config_group_get = aspeed_g7_soc1_pin_config_group_get,
9274af4eb66SBilly Tsai 	.pin_config_group_set = aspeed_g7_soc1_pin_config_group_set,
9284af4eb66SBilly Tsai 	.pin_config_config_dbg_show = pinconf_generic_dump_config,
9294af4eb66SBilly Tsai };
9304af4eb66SBilly Tsai 
9314af4eb66SBilly Tsai static const struct pinctrl_desc aspeed_g7_soc1_desc = {
9324af4eb66SBilly Tsai 	.name = "aspeed-g7-soc1-pinctrl",
9334af4eb66SBilly Tsai 	.pins = aspeed_g7_soc1_pins,
9344af4eb66SBilly Tsai 	.npins = ARRAY_SIZE(aspeed_g7_soc1_pins),
9354af4eb66SBilly Tsai 	.pctlops = &aspeed_g7_soc1_pctl_ops,
9364af4eb66SBilly Tsai 	.pmxops = &aspeed_g7_soc1_pmx_ops,
9374af4eb66SBilly Tsai 	.confops = &aspeed_g7_soc1_conf_ops,
9384af4eb66SBilly Tsai 	.owner = THIS_MODULE,
9394af4eb66SBilly Tsai };
9404af4eb66SBilly Tsai 
9414af4eb66SBilly Tsai  #define PIN_GROUP(name, ...) static const unsigned int name ## _pins[] = { __VA_ARGS__ }
9424af4eb66SBilly Tsai 
9434af4eb66SBilly Tsai /* Pin Groups and Functions */
9444af4eb66SBilly Tsai PIN_GROUP(ADC0, W17);
9454af4eb66SBilly Tsai PIN_GROUP(ADC1, V18);
9464af4eb66SBilly Tsai PIN_GROUP(ADC10, Y11);
9474af4eb66SBilly Tsai PIN_GROUP(ADC11, V14);
9484af4eb66SBilly Tsai PIN_GROUP(ADC12, V19);
9494af4eb66SBilly Tsai PIN_GROUP(ADC13, W14);
9504af4eb66SBilly Tsai PIN_GROUP(ADC14, Y20);
9514af4eb66SBilly Tsai PIN_GROUP(ADC15, AB19);
9524af4eb66SBilly Tsai PIN_GROUP(ADC2, W18);
9534af4eb66SBilly Tsai PIN_GROUP(ADC3, Y17);
9544af4eb66SBilly Tsai PIN_GROUP(ADC4, AA18);
9554af4eb66SBilly Tsai PIN_GROUP(ADC5, AA13);
9564af4eb66SBilly Tsai PIN_GROUP(ADC6, Y18);
9574af4eb66SBilly Tsai PIN_GROUP(ADC7, AA12);
9584af4eb66SBilly Tsai PIN_GROUP(ADC8, W20);
9594af4eb66SBilly Tsai PIN_GROUP(ADC9, V20);
9604af4eb66SBilly Tsai PIN_GROUP(AUXPWRGOOD0, W14);
9614af4eb66SBilly Tsai PIN_GROUP(AUXPWRGOOD1, Y20);
9624af4eb66SBilly Tsai PIN_GROUP(CANBUS, G7, G8, G9);
9634af4eb66SBilly Tsai PIN_GROUP(DI2C0, C16, D9);
9644af4eb66SBilly Tsai PIN_GROUP(DI2C1, C14, F14);
9654af4eb66SBilly Tsai PIN_GROUP(DI2C10, R25, AA26);
9664af4eb66SBilly Tsai PIN_GROUP(DI2C11, R26, Y25);
9674af4eb66SBilly Tsai PIN_GROUP(DI2C12, W25, Y23);
9684af4eb66SBilly Tsai PIN_GROUP(DI2C13, Y24, W21);
9694af4eb66SBilly Tsai PIN_GROUP(DI2C14, AA23, AC22);
9704af4eb66SBilly Tsai PIN_GROUP(DI2C15, AB22, Y21);
9714af4eb66SBilly Tsai PIN_GROUP(DI2C2, D10, C12);
9724af4eb66SBilly Tsai PIN_GROUP(DI2C3, C11, C13);
9734af4eb66SBilly Tsai PIN_GROUP(DI2C8, U25, U26);
9744af4eb66SBilly Tsai PIN_GROUP(DI2C9, Y26, AA24);
9754af4eb66SBilly Tsai PIN_GROUP(DSGPM0, D19, B10, C7, D7);
9764af4eb66SBilly Tsai PIN_GROUP(ESPI0, B16, D14, B15, B14, C17, B13, E14, C15);
9774af4eb66SBilly Tsai PIN_GROUP(ESPI1, C16, C14, C11, D9, F14, D10, C12, C13);
9784af4eb66SBilly Tsai PIN_GROUP(FSI0, AD20, AC20);
9794af4eb66SBilly Tsai PIN_GROUP(FSI1, AA21, AB21);
9804af4eb66SBilly Tsai PIN_GROUP(FSI2, AC19, AE18);
9814af4eb66SBilly Tsai PIN_GROUP(FSI3, AD19, AD18);
9824af4eb66SBilly Tsai PIN_GROUP(FWQSPI, M16, A15);
9834af4eb66SBilly Tsai PIN_GROUP(FWSPIABR, A14);
9844af4eb66SBilly Tsai PIN_GROUP(FWWPN, N15);
9854af4eb66SBilly Tsai PIN_GROUP(HBLED, V24);
9864af4eb66SBilly Tsai PIN_GROUP(HVI3C0, U25, U26);
9874af4eb66SBilly Tsai PIN_GROUP(HVI3C1, Y26, AA24);
9884af4eb66SBilly Tsai PIN_GROUP(HVI3C12, W25, Y23);
9894af4eb66SBilly Tsai PIN_GROUP(HVI3C13, Y24, W21);
9904af4eb66SBilly Tsai PIN_GROUP(HVI3C14, AA23, AC22);
9914af4eb66SBilly Tsai PIN_GROUP(HVI3C15, AB22, Y21);
9924af4eb66SBilly Tsai PIN_GROUP(HVI3C2, R25, AA26);
9934af4eb66SBilly Tsai PIN_GROUP(HVI3C3, R26, Y25);
9944af4eb66SBilly Tsai PIN_GROUP(I2C0, G11, H7);
9954af4eb66SBilly Tsai PIN_GROUP(I2C1, H8, H9);
9964af4eb66SBilly Tsai PIN_GROUP(I2C10, G8, G9);
9974af4eb66SBilly Tsai PIN_GROUP(I2C11, G10, K12);
9984af4eb66SBilly Tsai PIN_GROUP(I2C12, AC18, AA17);
9994af4eb66SBilly Tsai PIN_GROUP(I2C13, AB17, AD16);
10004af4eb66SBilly Tsai PIN_GROUP(I2C14, AC17, AD17);
10014af4eb66SBilly Tsai PIN_GROUP(I2C15, AE16, AE17);
10024af4eb66SBilly Tsai PIN_GROUP(I2C2, H10, H11);
10034af4eb66SBilly Tsai PIN_GROUP(I2C3, J9, J10);
10044af4eb66SBilly Tsai PIN_GROUP(I2C4, E9, F9);
10054af4eb66SBilly Tsai PIN_GROUP(I2C5, F8, M13);
10064af4eb66SBilly Tsai PIN_GROUP(I2C6, F7, D8);
10074af4eb66SBilly Tsai PIN_GROUP(I2C7, E8, L12);
10084af4eb66SBilly Tsai PIN_GROUP(I2C8, F12, E12);
10094af4eb66SBilly Tsai PIN_GROUP(I2C9, J12, G7);
10104af4eb66SBilly Tsai PIN_GROUP(I2CF0, F12, E12, J12, G7);
10114af4eb66SBilly Tsai PIN_GROUP(I2CF1, E9, F9, F8, M13);
10124af4eb66SBilly Tsai PIN_GROUP(I2CF2, F7, D8, E8, L12);
10134af4eb66SBilly Tsai PIN_GROUP(I3C10, AC19, AE18);
10144af4eb66SBilly Tsai PIN_GROUP(I3C11, AD19, AD18);
10154af4eb66SBilly Tsai PIN_GROUP(I3C4, AE20, AF19);
10164af4eb66SBilly Tsai PIN_GROUP(I3C5, Y22, AA20);
10174af4eb66SBilly Tsai PIN_GROUP(I3C6, AA22, AB20);
10184af4eb66SBilly Tsai PIN_GROUP(I3C7, AF18, AE19);
10194af4eb66SBilly Tsai PIN_GROUP(I3C8, AD20, AC20);
10204af4eb66SBilly Tsai PIN_GROUP(I3C9, AA21, AB21);
10214af4eb66SBilly Tsai PIN_GROUP(JTAGM1, D12, F10, E11, F11, F13);
10224af4eb66SBilly Tsai PIN_GROUP(LPC0, AF26, AF25, B16, D14, B15, B14, C17, B13, E14, C15);
10234af4eb66SBilly Tsai PIN_GROUP(LPC1, C16, C14, C11, D9, F14, D10, C12, C13, AE16, AE17);
10244af4eb66SBilly Tsai PIN_GROUP(LTPI, U25, U26, Y26, AA24);
10254af4eb66SBilly Tsai PIN_GROUP(LTPI_PS_I2C0, G11, H7);
10264af4eb66SBilly Tsai PIN_GROUP(LTPI_PS_I2C1, H8, H9);
10274af4eb66SBilly Tsai PIN_GROUP(LTPI_PS_I2C2, H10, H11);
10284af4eb66SBilly Tsai PIN_GROUP(LTPI_PS_I2C3, J9, J10);
10294af4eb66SBilly Tsai PIN_GROUP(MACLINK0, U21);
10304af4eb66SBilly Tsai PIN_GROUP(MACLINK1, AC24);
10314af4eb66SBilly Tsai PIN_GROUP(MACLINK2, T24);
10324af4eb66SBilly Tsai PIN_GROUP(MDIO0, B9, M14);
10334af4eb66SBilly Tsai PIN_GROUP(MDIO1, C9, C10);
10344af4eb66SBilly Tsai PIN_GROUP(MDIO2, E10, E13);
10354af4eb66SBilly Tsai PIN_GROUP(NCTS0, AF17);
10364af4eb66SBilly Tsai PIN_GROUP(NCTS1, AA15);
10374af4eb66SBilly Tsai PIN_GROUP(NCTS5, V21);
10384af4eb66SBilly Tsai PIN_GROUP(NCTS6, AB26);
10394af4eb66SBilly Tsai PIN_GROUP(NDCD0, AA16);
10404af4eb66SBilly Tsai PIN_GROUP(NDCD1, AB15);
10414af4eb66SBilly Tsai PIN_GROUP(NDCD5, N26);
10424af4eb66SBilly Tsai PIN_GROUP(NDCD6, AD26);
10434af4eb66SBilly Tsai PIN_GROUP(NDSR0, Y16);
10444af4eb66SBilly Tsai PIN_GROUP(NDSR1, AC15);
10454af4eb66SBilly Tsai PIN_GROUP(NDSR5, P25);
10464af4eb66SBilly Tsai PIN_GROUP(NDSR6, P26);
10474af4eb66SBilly Tsai PIN_GROUP(NDTR0, J13);
10484af4eb66SBilly Tsai PIN_GROUP(NDTR1, Y15);
10494af4eb66SBilly Tsai PIN_GROUP(NDTR5, V23);
10504af4eb66SBilly Tsai PIN_GROUP(NDTR6, AF26);
10514af4eb66SBilly Tsai PIN_GROUP(NRI0, V17);
10524af4eb66SBilly Tsai PIN_GROUP(NRI1, AD15);
10534af4eb66SBilly Tsai PIN_GROUP(NRI5, N25);
10544af4eb66SBilly Tsai PIN_GROUP(NRI6, AE26);
10554af4eb66SBilly Tsai PIN_GROUP(NRTS0, AB16);
10564af4eb66SBilly Tsai PIN_GROUP(NRTS1, AA14);
10574af4eb66SBilly Tsai PIN_GROUP(NRTS5, W22);
10584af4eb66SBilly Tsai PIN_GROUP(NRTS6, AF25);
10594af4eb66SBilly Tsai PIN_GROUP(OSCCLK, C17);
10604af4eb66SBilly Tsai PIN_GROUP(PE2SGRSTN, E10, PCIERC2_PERST);
10614af4eb66SBilly Tsai PIN_GROUP(PWM0, AE25);
10624af4eb66SBilly Tsai PIN_GROUP(PWM1, AD25);
10634af4eb66SBilly Tsai PIN_GROUP(PWM10, AB17);
10644af4eb66SBilly Tsai PIN_GROUP(PWM11, AD16);
10654af4eb66SBilly Tsai PIN_GROUP(PWM12, AC17);
10664af4eb66SBilly Tsai PIN_GROUP(PWM13, AD17);
10674af4eb66SBilly Tsai PIN_GROUP(PWM14, AE16);
10684af4eb66SBilly Tsai PIN_GROUP(PWM15, AE17);
10694af4eb66SBilly Tsai PIN_GROUP(PWM2, AF23);
10704af4eb66SBilly Tsai PIN_GROUP(PWM3, AF20);
10714af4eb66SBilly Tsai PIN_GROUP(PWM4, AF21);
10724af4eb66SBilly Tsai PIN_GROUP(PWM5, AE21);
10734af4eb66SBilly Tsai PIN_GROUP(PWM6, AE23);
10744af4eb66SBilly Tsai PIN_GROUP(PWM7, AD22);
10754af4eb66SBilly Tsai PIN_GROUP(PWM8, K13);
10764af4eb66SBilly Tsai PIN_GROUP(PWM9, AA17);
10774af4eb66SBilly Tsai PIN_GROUP(QSPI0, C23, B18);
10784af4eb66SBilly Tsai PIN_GROUP(QSPI1, B24, E26);
10794af4eb66SBilly Tsai PIN_GROUP(QSPI2, B25, F26);
10804af4eb66SBilly Tsai PIN_GROUP(RGMII0, C20, C19, A8, R14, A7, P14, D20, A6, B6, N14, B7, B8);
10814af4eb66SBilly Tsai PIN_GROUP(RGMII1, D19, B11, D15, B12, B10, P13, C18, C6, C7, D7, N13, C8);
10824af4eb66SBilly Tsai PIN_GROUP(RMII0, C20, A8, R14, A7, P14, A6, B6, N14);
10834af4eb66SBilly Tsai PIN_GROUP(RMII0RCLKO, D20);
10844af4eb66SBilly Tsai PIN_GROUP(RMII1, D19, D15, B12, B10, P13, C6, C7, D7);
10854af4eb66SBilly Tsai PIN_GROUP(RMII1RCLKO, C18);
10864af4eb66SBilly Tsai PIN_GROUP(SALT0, AC17);
10874af4eb66SBilly Tsai PIN_GROUP(SALT1, AD17);
10884af4eb66SBilly Tsai PIN_GROUP(SALT10, Y18);
10894af4eb66SBilly Tsai PIN_GROUP(SALT11, AA12);
10904af4eb66SBilly Tsai PIN_GROUP(SALT12, AB26);
10914af4eb66SBilly Tsai PIN_GROUP(SALT13, AD26);
10924af4eb66SBilly Tsai PIN_GROUP(SALT14, P26);
10934af4eb66SBilly Tsai PIN_GROUP(SALT15, AE26);
10944af4eb66SBilly Tsai PIN_GROUP(SALT2, AC15);
10954af4eb66SBilly Tsai PIN_GROUP(SALT3, AD15);
10964af4eb66SBilly Tsai PIN_GROUP(SALT4, W17);
10974af4eb66SBilly Tsai PIN_GROUP(SALT5, V18);
10984af4eb66SBilly Tsai PIN_GROUP(SALT6, W18);
10994af4eb66SBilly Tsai PIN_GROUP(SALT7, Y17);
11004af4eb66SBilly Tsai PIN_GROUP(SALT8, AA18);
11014af4eb66SBilly Tsai PIN_GROUP(SALT9, AA13);
11024af4eb66SBilly Tsai PIN_GROUP(SD, C16, C14, C11, D9, F14, D10, C12, C13);
11034af4eb66SBilly Tsai PIN_GROUP(SGMII, SGMII0);
11044af4eb66SBilly Tsai PIN_GROUP(SGPM0, U21, T24, V22, T23);
11054af4eb66SBilly Tsai PIN_GROUP(SGPM1, AC25, AB25, AB24, W26);
11064af4eb66SBilly Tsai PIN_GROUP(SGPS, B11, C18, N13, C8);
11074af4eb66SBilly Tsai PIN_GROUP(SIOONCTRLN0, AE23);
11084af4eb66SBilly Tsai PIN_GROUP(SIOONCTRLN1, AA15);
11094af4eb66SBilly Tsai PIN_GROUP(SIOPBIN0, AD25);
11104af4eb66SBilly Tsai PIN_GROUP(SIOPBIN1, AA16);
11114af4eb66SBilly Tsai PIN_GROUP(SIOPBON0, AE25);
11124af4eb66SBilly Tsai PIN_GROUP(SIOPBON1, AF17);
11134af4eb66SBilly Tsai PIN_GROUP(SIOPWREQN0, AE21);
11144af4eb66SBilly Tsai PIN_GROUP(SIOPWREQN1, AB16);
11154af4eb66SBilly Tsai PIN_GROUP(SIOPWRGD1, AB15);
11164af4eb66SBilly Tsai PIN_GROUP(SIOS3N0, AF20);
11174af4eb66SBilly Tsai PIN_GROUP(SIOS3N1, V17);
11184af4eb66SBilly Tsai PIN_GROUP(SIOS5N0, AF21);
11194af4eb66SBilly Tsai PIN_GROUP(SIOS5N1, J13);
11204af4eb66SBilly Tsai PIN_GROUP(SIOSCIN0, AF23);
11214af4eb66SBilly Tsai PIN_GROUP(SIOSCIN1, Y16);
11224af4eb66SBilly Tsai PIN_GROUP(SMON0, U21, T24, V22, T23);
11234af4eb66SBilly Tsai PIN_GROUP(SMON1, W26, AC25, AB25);
11244af4eb66SBilly Tsai PIN_GROUP(SPI0, D24, B23, B22);
11254af4eb66SBilly Tsai PIN_GROUP(SPI0ABR, M15);
11264af4eb66SBilly Tsai PIN_GROUP(SPI0CS1, B21);
11274af4eb66SBilly Tsai PIN_GROUP(SPI0WPN, B19);
11284af4eb66SBilly Tsai PIN_GROUP(SPI1, B26, A25, A24);
11294af4eb66SBilly Tsai PIN_GROUP(SPI1ABR, A19);
11304af4eb66SBilly Tsai PIN_GROUP(SPI1CS1, A21);
11314af4eb66SBilly Tsai PIN_GROUP(SPI1WPN, A18);
11324af4eb66SBilly Tsai PIN_GROUP(SPI2, D26, C26, A23, A22);
11334af4eb66SBilly Tsai PIN_GROUP(SPI2CS1, A26);
11344af4eb66SBilly Tsai PIN_GROUP(TACH0, AC26);
11354af4eb66SBilly Tsai PIN_GROUP(TACH1, AA25);
11364af4eb66SBilly Tsai PIN_GROUP(TACH10, AB26);
11374af4eb66SBilly Tsai PIN_GROUP(TACH11, AD26);
11384af4eb66SBilly Tsai PIN_GROUP(TACH12, P26);
11394af4eb66SBilly Tsai PIN_GROUP(TACH13, AE26);
11404af4eb66SBilly Tsai PIN_GROUP(TACH14, AF26);
11414af4eb66SBilly Tsai PIN_GROUP(TACH15, AF25);
11424af4eb66SBilly Tsai PIN_GROUP(TACH2, AB23);
11434af4eb66SBilly Tsai PIN_GROUP(TACH3, U22);
11444af4eb66SBilly Tsai PIN_GROUP(TACH4, V21);
11454af4eb66SBilly Tsai PIN_GROUP(TACH5, N26);
11464af4eb66SBilly Tsai PIN_GROUP(TACH6, P25);
11474af4eb66SBilly Tsai PIN_GROUP(TACH7, N25);
11484af4eb66SBilly Tsai PIN_GROUP(TACH8, V23);
11494af4eb66SBilly Tsai PIN_GROUP(TACH9, W22);
11504af4eb66SBilly Tsai PIN_GROUP(THRU0, AC26, AA25);
11514af4eb66SBilly Tsai PIN_GROUP(THRU1, AB23, U22);
11524af4eb66SBilly Tsai PIN_GROUP(THRU2, A19, A18);
11534af4eb66SBilly Tsai PIN_GROUP(THRU3, B25, F26);
11544af4eb66SBilly Tsai PIN_GROUP(UART0, AC16, AF16);
11554af4eb66SBilly Tsai PIN_GROUP(UART1, W16, V16);
11564af4eb66SBilly Tsai PIN_GROUP(UART2, AB18, AC18);
11574af4eb66SBilly Tsai PIN_GROUP(UART3, K13, AA17);
11584af4eb66SBilly Tsai PIN_GROUP(UART5, AB17, AD16);
11594af4eb66SBilly Tsai PIN_GROUP(UART6, AC17, AD17);
11604af4eb66SBilly Tsai PIN_GROUP(UART7, AE16, AE17);
11614af4eb66SBilly Tsai PIN_GROUP(UART8, M15, B19);
11624af4eb66SBilly Tsai PIN_GROUP(UART9, B26, A25);
11634af4eb66SBilly Tsai PIN_GROUP(UART10, A24, B24);
11644af4eb66SBilly Tsai PIN_GROUP(UART11, E26, A21);
11654af4eb66SBilly Tsai PIN_GROUP(USB2CD, PORTC_MODE);
11664af4eb66SBilly Tsai PIN_GROUP(USB2CH, PORTC_MODE);
11674af4eb66SBilly Tsai PIN_GROUP(USB2CU, PORTC_MODE);
11684af4eb66SBilly Tsai PIN_GROUP(USB2CUD, PORTC_MODE);
11694af4eb66SBilly Tsai PIN_GROUP(USB2DD, PORTD_MODE);
11704af4eb66SBilly Tsai PIN_GROUP(USB2DH, PORTD_MODE);
11714af4eb66SBilly Tsai PIN_GROUP(USBUART, G10, K12);
11724af4eb66SBilly Tsai PIN_GROUP(VGA, J11, E7);
11734af4eb66SBilly Tsai PIN_GROUP(VPI, C16, C14, C11, D9, F14, D10, AC26, AA25, AB23, U22, V21, N26,
11744af4eb66SBilly Tsai 	  P25, N25, V23, W22, AB26, AD26, P26, AE26, AF26, AF25, AE25, AD25,
11754af4eb66SBilly Tsai 	  AF23, AF20, AF21, AE21);
11764af4eb66SBilly Tsai PIN_GROUP(WDTRST0N, K13);
11774af4eb66SBilly Tsai PIN_GROUP(WDTRST1N, AA17);
11784af4eb66SBilly Tsai PIN_GROUP(WDTRST2N, AB17);
11794af4eb66SBilly Tsai PIN_GROUP(WDTRST3N, AD16);
11804af4eb66SBilly Tsai PIN_GROUP(WDTRST4N, AC25);
11814af4eb66SBilly Tsai PIN_GROUP(WDTRST5N, AB25);
11824af4eb66SBilly Tsai PIN_GROUP(WDTRST6N, AC24);
11834af4eb66SBilly Tsai PIN_GROUP(WDTRST7N, AB24);
11844af4eb66SBilly Tsai 
11854af4eb66SBilly Tsai #define GROUP(n) PINCTRL_PINGROUP(#n, n##_pins, ARRAY_SIZE(n##_pins))
11864af4eb66SBilly Tsai 
11874af4eb66SBilly Tsai static const struct pingroup aspeed_g7_soc1_groups[] = {
11884af4eb66SBilly Tsai 	GROUP(ADC0),
11894af4eb66SBilly Tsai 	GROUP(ADC1),
11904af4eb66SBilly Tsai 	GROUP(ADC10),
11914af4eb66SBilly Tsai 	GROUP(ADC11),
11924af4eb66SBilly Tsai 	GROUP(ADC12),
11934af4eb66SBilly Tsai 	GROUP(ADC13),
11944af4eb66SBilly Tsai 	GROUP(ADC14),
11954af4eb66SBilly Tsai 	GROUP(ADC15),
11964af4eb66SBilly Tsai 	GROUP(ADC2),
11974af4eb66SBilly Tsai 	GROUP(ADC3),
11984af4eb66SBilly Tsai 	GROUP(ADC4),
11994af4eb66SBilly Tsai 	GROUP(ADC5),
12004af4eb66SBilly Tsai 	GROUP(ADC6),
12014af4eb66SBilly Tsai 	GROUP(ADC7),
12024af4eb66SBilly Tsai 	GROUP(ADC8),
12034af4eb66SBilly Tsai 	GROUP(ADC9),
12044af4eb66SBilly Tsai 	GROUP(AUXPWRGOOD0),
12054af4eb66SBilly Tsai 	GROUP(AUXPWRGOOD1),
12064af4eb66SBilly Tsai 	GROUP(CANBUS),
12074af4eb66SBilly Tsai 	GROUP(DI2C0),
12084af4eb66SBilly Tsai 	GROUP(DI2C1),
12094af4eb66SBilly Tsai 	GROUP(DI2C10),
12104af4eb66SBilly Tsai 	GROUP(DI2C11),
12114af4eb66SBilly Tsai 	GROUP(DI2C12),
12124af4eb66SBilly Tsai 	GROUP(DI2C13),
12134af4eb66SBilly Tsai 	GROUP(DI2C14),
12144af4eb66SBilly Tsai 	GROUP(DI2C15),
12154af4eb66SBilly Tsai 	GROUP(DI2C2),
12164af4eb66SBilly Tsai 	GROUP(DI2C3),
12174af4eb66SBilly Tsai 	GROUP(DI2C8),
12184af4eb66SBilly Tsai 	GROUP(DI2C9),
12194af4eb66SBilly Tsai 	GROUP(DSGPM0),
12204af4eb66SBilly Tsai 	GROUP(ESPI0),
12214af4eb66SBilly Tsai 	GROUP(ESPI1),
12224af4eb66SBilly Tsai 	GROUP(FSI0),
12234af4eb66SBilly Tsai 	GROUP(FSI1),
12244af4eb66SBilly Tsai 	GROUP(FSI2),
12254af4eb66SBilly Tsai 	GROUP(FSI3),
12264af4eb66SBilly Tsai 	GROUP(FWQSPI),
12274af4eb66SBilly Tsai 	GROUP(FWSPIABR),
12284af4eb66SBilly Tsai 	GROUP(FWWPN),
12294af4eb66SBilly Tsai 	GROUP(HBLED),
12304af4eb66SBilly Tsai 	GROUP(HVI3C0),
12314af4eb66SBilly Tsai 	GROUP(HVI3C1),
12324af4eb66SBilly Tsai 	GROUP(HVI3C12),
12334af4eb66SBilly Tsai 	GROUP(HVI3C13),
12344af4eb66SBilly Tsai 	GROUP(HVI3C14),
12354af4eb66SBilly Tsai 	GROUP(HVI3C15),
12364af4eb66SBilly Tsai 	GROUP(HVI3C2),
12374af4eb66SBilly Tsai 	GROUP(HVI3C3),
12384af4eb66SBilly Tsai 	GROUP(I2C0),
12394af4eb66SBilly Tsai 	GROUP(I2C1),
12404af4eb66SBilly Tsai 	GROUP(I2C10),
12414af4eb66SBilly Tsai 	GROUP(I2C11),
12424af4eb66SBilly Tsai 	GROUP(I2C12),
12434af4eb66SBilly Tsai 	GROUP(I2C13),
12444af4eb66SBilly Tsai 	GROUP(I2C14),
12454af4eb66SBilly Tsai 	GROUP(I2C15),
12464af4eb66SBilly Tsai 	GROUP(I2C2),
12474af4eb66SBilly Tsai 	GROUP(I2C3),
12484af4eb66SBilly Tsai 	GROUP(I2C4),
12494af4eb66SBilly Tsai 	GROUP(I2C5),
12504af4eb66SBilly Tsai 	GROUP(I2C6),
12514af4eb66SBilly Tsai 	GROUP(I2C7),
12524af4eb66SBilly Tsai 	GROUP(I2C8),
12534af4eb66SBilly Tsai 	GROUP(I2C9),
12544af4eb66SBilly Tsai 	GROUP(I2CF0),
12554af4eb66SBilly Tsai 	GROUP(I2CF1),
12564af4eb66SBilly Tsai 	GROUP(I2CF2),
12574af4eb66SBilly Tsai 	GROUP(I3C10),
12584af4eb66SBilly Tsai 	GROUP(I3C11),
12594af4eb66SBilly Tsai 	GROUP(I3C4),
12604af4eb66SBilly Tsai 	GROUP(I3C5),
12614af4eb66SBilly Tsai 	GROUP(I3C6),
12624af4eb66SBilly Tsai 	GROUP(I3C7),
12634af4eb66SBilly Tsai 	GROUP(I3C8),
12644af4eb66SBilly Tsai 	GROUP(I3C9),
12654af4eb66SBilly Tsai 	GROUP(JTAGM1),
12664af4eb66SBilly Tsai 	GROUP(LPC0),
12674af4eb66SBilly Tsai 	GROUP(LPC1),
12684af4eb66SBilly Tsai 	GROUP(LTPI),
12694af4eb66SBilly Tsai 	GROUP(LTPI_PS_I2C0),
12704af4eb66SBilly Tsai 	GROUP(LTPI_PS_I2C1),
12714af4eb66SBilly Tsai 	GROUP(LTPI_PS_I2C2),
12724af4eb66SBilly Tsai 	GROUP(LTPI_PS_I2C3),
12734af4eb66SBilly Tsai 	GROUP(MACLINK0),
12744af4eb66SBilly Tsai 	GROUP(MACLINK1),
12754af4eb66SBilly Tsai 	GROUP(MACLINK2),
12764af4eb66SBilly Tsai 	GROUP(MDIO0),
12774af4eb66SBilly Tsai 	GROUP(MDIO1),
12784af4eb66SBilly Tsai 	GROUP(MDIO2),
12794af4eb66SBilly Tsai 	GROUP(NCTS0),
12804af4eb66SBilly Tsai 	GROUP(NCTS1),
12814af4eb66SBilly Tsai 	GROUP(NCTS5),
12824af4eb66SBilly Tsai 	GROUP(NCTS6),
12834af4eb66SBilly Tsai 	GROUP(NDCD0),
12844af4eb66SBilly Tsai 	GROUP(NDCD1),
12854af4eb66SBilly Tsai 	GROUP(NDCD5),
12864af4eb66SBilly Tsai 	GROUP(NDCD6),
12874af4eb66SBilly Tsai 	GROUP(NDSR0),
12884af4eb66SBilly Tsai 	GROUP(NDSR1),
12894af4eb66SBilly Tsai 	GROUP(NDSR5),
12904af4eb66SBilly Tsai 	GROUP(NDSR6),
12914af4eb66SBilly Tsai 	GROUP(NDTR0),
12924af4eb66SBilly Tsai 	GROUP(NDTR1),
12934af4eb66SBilly Tsai 	GROUP(NDTR5),
12944af4eb66SBilly Tsai 	GROUP(NDTR6),
12954af4eb66SBilly Tsai 	GROUP(NRI0),
12964af4eb66SBilly Tsai 	GROUP(NRI1),
12974af4eb66SBilly Tsai 	GROUP(NRI5),
12984af4eb66SBilly Tsai 	GROUP(NRI6),
12994af4eb66SBilly Tsai 	GROUP(NRTS0),
13004af4eb66SBilly Tsai 	GROUP(NRTS1),
13014af4eb66SBilly Tsai 	GROUP(NRTS5),
13024af4eb66SBilly Tsai 	GROUP(NRTS6),
13034af4eb66SBilly Tsai 	GROUP(OSCCLK),
13044af4eb66SBilly Tsai 	GROUP(PE2SGRSTN),
13054af4eb66SBilly Tsai 	GROUP(PWM0),
13064af4eb66SBilly Tsai 	GROUP(PWM1),
13074af4eb66SBilly Tsai 	GROUP(PWM10),
13084af4eb66SBilly Tsai 	GROUP(PWM11),
13094af4eb66SBilly Tsai 	GROUP(PWM12),
13104af4eb66SBilly Tsai 	GROUP(PWM13),
13114af4eb66SBilly Tsai 	GROUP(PWM14),
13124af4eb66SBilly Tsai 	GROUP(PWM15),
13134af4eb66SBilly Tsai 	GROUP(PWM2),
13144af4eb66SBilly Tsai 	GROUP(PWM3),
13154af4eb66SBilly Tsai 	GROUP(PWM4),
13164af4eb66SBilly Tsai 	GROUP(PWM5),
13174af4eb66SBilly Tsai 	GROUP(PWM6),
13184af4eb66SBilly Tsai 	GROUP(PWM7),
13194af4eb66SBilly Tsai 	GROUP(PWM8),
13204af4eb66SBilly Tsai 	GROUP(PWM9),
13214af4eb66SBilly Tsai 	GROUP(QSPI0),
13224af4eb66SBilly Tsai 	GROUP(QSPI1),
13234af4eb66SBilly Tsai 	GROUP(QSPI2),
13244af4eb66SBilly Tsai 	GROUP(RGMII0),
13254af4eb66SBilly Tsai 	GROUP(RGMII1),
13264af4eb66SBilly Tsai 	GROUP(RMII0),
13274af4eb66SBilly Tsai 	GROUP(RMII0RCLKO),
13284af4eb66SBilly Tsai 	GROUP(RMII1),
13294af4eb66SBilly Tsai 	GROUP(RMII1RCLKO),
13304af4eb66SBilly Tsai 	GROUP(SALT0),
13314af4eb66SBilly Tsai 	GROUP(SALT1),
13324af4eb66SBilly Tsai 	GROUP(SALT10),
13334af4eb66SBilly Tsai 	GROUP(SALT11),
13344af4eb66SBilly Tsai 	GROUP(SALT12),
13354af4eb66SBilly Tsai 	GROUP(SALT13),
13364af4eb66SBilly Tsai 	GROUP(SALT14),
13374af4eb66SBilly Tsai 	GROUP(SALT15),
13384af4eb66SBilly Tsai 	GROUP(SALT2),
13394af4eb66SBilly Tsai 	GROUP(SALT3),
13404af4eb66SBilly Tsai 	GROUP(SALT4),
13414af4eb66SBilly Tsai 	GROUP(SALT5),
13424af4eb66SBilly Tsai 	GROUP(SALT6),
13434af4eb66SBilly Tsai 	GROUP(SALT7),
13444af4eb66SBilly Tsai 	GROUP(SALT8),
13454af4eb66SBilly Tsai 	GROUP(SALT9),
13464af4eb66SBilly Tsai 	GROUP(SD),
13474af4eb66SBilly Tsai 	GROUP(SGMII),
13484af4eb66SBilly Tsai 	GROUP(SGPM0),
13494af4eb66SBilly Tsai 	GROUP(SGPM1),
13504af4eb66SBilly Tsai 	GROUP(SGPS),
13514af4eb66SBilly Tsai 	GROUP(SIOONCTRLN0),
13524af4eb66SBilly Tsai 	GROUP(SIOONCTRLN1),
13534af4eb66SBilly Tsai 	GROUP(SIOPBIN0),
13544af4eb66SBilly Tsai 	GROUP(SIOPBIN1),
13554af4eb66SBilly Tsai 	GROUP(SIOPBON0),
13564af4eb66SBilly Tsai 	GROUP(SIOPBON1),
13574af4eb66SBilly Tsai 	GROUP(SIOPWREQN0),
13584af4eb66SBilly Tsai 	GROUP(SIOPWREQN1),
13594af4eb66SBilly Tsai 	GROUP(SIOPWRGD1),
13604af4eb66SBilly Tsai 	GROUP(SIOS3N0),
13614af4eb66SBilly Tsai 	GROUP(SIOS3N1),
13624af4eb66SBilly Tsai 	GROUP(SIOS5N0),
13634af4eb66SBilly Tsai 	GROUP(SIOS5N1),
13644af4eb66SBilly Tsai 	GROUP(SIOSCIN0),
13654af4eb66SBilly Tsai 	GROUP(SIOSCIN1),
13664af4eb66SBilly Tsai 	GROUP(SMON0),
13674af4eb66SBilly Tsai 	GROUP(SMON1),
13684af4eb66SBilly Tsai 	GROUP(SPI0),
13694af4eb66SBilly Tsai 	GROUP(SPI0ABR),
13704af4eb66SBilly Tsai 	GROUP(SPI0CS1),
13714af4eb66SBilly Tsai 	GROUP(SPI0WPN),
13724af4eb66SBilly Tsai 	GROUP(SPI1),
13734af4eb66SBilly Tsai 	GROUP(SPI1ABR),
13744af4eb66SBilly Tsai 	GROUP(SPI1CS1),
13754af4eb66SBilly Tsai 	GROUP(SPI1WPN),
13764af4eb66SBilly Tsai 	GROUP(SPI2),
13774af4eb66SBilly Tsai 	GROUP(SPI2CS1),
13784af4eb66SBilly Tsai 	GROUP(TACH0),
13794af4eb66SBilly Tsai 	GROUP(TACH1),
13804af4eb66SBilly Tsai 	GROUP(TACH10),
13814af4eb66SBilly Tsai 	GROUP(TACH11),
13824af4eb66SBilly Tsai 	GROUP(TACH12),
13834af4eb66SBilly Tsai 	GROUP(TACH13),
13844af4eb66SBilly Tsai 	GROUP(TACH14),
13854af4eb66SBilly Tsai 	GROUP(TACH15),
13864af4eb66SBilly Tsai 	GROUP(TACH2),
13874af4eb66SBilly Tsai 	GROUP(TACH3),
13884af4eb66SBilly Tsai 	GROUP(TACH4),
13894af4eb66SBilly Tsai 	GROUP(TACH5),
13904af4eb66SBilly Tsai 	GROUP(TACH6),
13914af4eb66SBilly Tsai 	GROUP(TACH7),
13924af4eb66SBilly Tsai 	GROUP(TACH8),
13934af4eb66SBilly Tsai 	GROUP(TACH9),
13944af4eb66SBilly Tsai 	GROUP(THRU0),
13954af4eb66SBilly Tsai 	GROUP(THRU1),
13964af4eb66SBilly Tsai 	GROUP(THRU2),
13974af4eb66SBilly Tsai 	GROUP(THRU3),
13984af4eb66SBilly Tsai 	GROUP(UART0),
13994af4eb66SBilly Tsai 	GROUP(UART1),
14004af4eb66SBilly Tsai 	GROUP(UART10),
14014af4eb66SBilly Tsai 	GROUP(UART11),
14024af4eb66SBilly Tsai 	GROUP(UART2),
14034af4eb66SBilly Tsai 	GROUP(UART3),
14044af4eb66SBilly Tsai 	GROUP(UART5),
14054af4eb66SBilly Tsai 	GROUP(UART6),
14064af4eb66SBilly Tsai 	GROUP(UART7),
14074af4eb66SBilly Tsai 	GROUP(UART8),
14084af4eb66SBilly Tsai 	GROUP(UART9),
14094af4eb66SBilly Tsai 	GROUP(USB2CD),
14104af4eb66SBilly Tsai 	GROUP(USB2CH),
14114af4eb66SBilly Tsai 	GROUP(USB2CU),
14124af4eb66SBilly Tsai 	GROUP(USB2CUD),
14134af4eb66SBilly Tsai 	GROUP(USB2DD),
14144af4eb66SBilly Tsai 	GROUP(USB2DH),
14154af4eb66SBilly Tsai 	GROUP(USBUART),
14164af4eb66SBilly Tsai 	GROUP(VGA),
14174af4eb66SBilly Tsai 	GROUP(VPI),
14184af4eb66SBilly Tsai 	GROUP(WDTRST0N),
14194af4eb66SBilly Tsai 	GROUP(WDTRST1N),
14204af4eb66SBilly Tsai 	GROUP(WDTRST2N),
14214af4eb66SBilly Tsai 	GROUP(WDTRST3N),
14224af4eb66SBilly Tsai 	GROUP(WDTRST4N),
14234af4eb66SBilly Tsai 	GROUP(WDTRST5N),
14244af4eb66SBilly Tsai 	GROUP(WDTRST6N),
14254af4eb66SBilly Tsai 	GROUP(WDTRST7N),
14264af4eb66SBilly Tsai };
14274af4eb66SBilly Tsai 
14284af4eb66SBilly Tsai /**
14294af4eb66SBilly Tsai  * VM() - Helper macro to unwrap a parenthesized list of arguments.
14304af4eb66SBilly Tsai  * @...: The parenthesized list to be unwrapped.
14314af4eb66SBilly Tsai  *
14324af4eb66SBilly Tsai  * Since the C preprocessor treats commas inside braces {} as argument
14334af4eb66SBilly Tsai  * separators for macros, we wrap lists (like mux values) in parentheses ()
14344af4eb66SBilly Tsai  * to protect them during macro expansion. This macro strips those
14354af4eb66SBilly Tsai  * parentheses when the values are needed for array initialization.
14364af4eb66SBilly Tsai  */
14374af4eb66SBilly Tsai #define VM(...) __VA_ARGS__
14384af4eb66SBilly Tsai 
14394af4eb66SBilly Tsai /**
14404af4eb66SBilly Tsai  * FUNC() - Macro to initialize an aspeed_g7_soc1_function entry.
14414af4eb66SBilly Tsai  * @n: Name of the pin function.
14424af4eb66SBilly Tsai  * @m: Parenthesized list of mux values, mapped 1:1 to the groups list.
14434af4eb66SBilly Tsai  * @...: Variable list of pin group names associated with this function.
14444af4eb66SBilly Tsai  *
14454af4eb66SBilly Tsai  * This macro solves complex static initialization by:
14464af4eb66SBilly Tsai  * 1. Creating anonymous arrays for both group names and mux values
14474af4eb66SBilly Tsai  *    using C99 Compound Literals.
14484af4eb66SBilly Tsai  * 2. Using VM(m) to unwrap mux values into the array initializer.
14494af4eb66SBilly Tsai  * 3. Calculating the number of groups via sizeof() division, which
14504af4eb66SBilly Tsai  *    bypasses the __must_be_array() check performed by ARRAY_SIZE()
14514af4eb66SBilly Tsai  *    that often fails on compound literals in the kernel environment.
14524af4eb66SBilly Tsai  *
14534af4eb66SBilly Tsai  * Example: FUNC(i2c0, (1, 4), "i2c0", "di2c0")
14544af4eb66SBilly Tsai  *          Maps "i2c0" group to mux value 1 and "di2c0" group to mux value 4.
14554af4eb66SBilly Tsai  */
14564af4eb66SBilly Tsai #define FUNC(n, m, ...)                                                                          \
14574af4eb66SBilly Tsai 	{                                                                                        \
14584af4eb66SBilly Tsai 		.pinfunction = {                                                                 \
14594af4eb66SBilly Tsai 			.name = #n,                                                              \
14604af4eb66SBilly Tsai 			.groups = (const char *const[]){ __VA_ARGS__ },                          \
14614af4eb66SBilly Tsai 			.ngroups = sizeof((const char *const[]){ __VA_ARGS__ }) / sizeof(char *), \
14624af4eb66SBilly Tsai 		},                                                                               \
14634af4eb66SBilly Tsai 		.muxvals = (const u8[]){ VM m }                                                  \
14644af4eb66SBilly Tsai 	}
14654af4eb66SBilly Tsai 
14664af4eb66SBilly Tsai static const struct aspeed_g7_soc1_function aspeed_g7_soc1_functions[] = {
14674af4eb66SBilly Tsai 	FUNC(ADC0, (0), "ADC0"),
14684af4eb66SBilly Tsai 	FUNC(ADC1, (0), "ADC1"),
14694af4eb66SBilly Tsai 	FUNC(ADC10, (0), "ADC10"),
14704af4eb66SBilly Tsai 	FUNC(ADC11, (0), "ADC11"),
14714af4eb66SBilly Tsai 	FUNC(ADC12, (0), "ADC12"),
14724af4eb66SBilly Tsai 	FUNC(ADC13, (0), "ADC13"),
14734af4eb66SBilly Tsai 	FUNC(ADC14, (0), "ADC14"),
14744af4eb66SBilly Tsai 	FUNC(ADC15, (0), "ADC15"),
14754af4eb66SBilly Tsai 	FUNC(ADC2, (0), "ADC2"),
14764af4eb66SBilly Tsai 	FUNC(ADC3, (0), "ADC3"),
14774af4eb66SBilly Tsai 	FUNC(ADC4, (0), "ADC4"),
14784af4eb66SBilly Tsai 	FUNC(ADC5, (0), "ADC5"),
14794af4eb66SBilly Tsai 	FUNC(ADC6, (0), "ADC6"),
14804af4eb66SBilly Tsai 	FUNC(ADC7, (0), "ADC7"),
14814af4eb66SBilly Tsai 	FUNC(ADC8, (0), "ADC8"),
14824af4eb66SBilly Tsai 	FUNC(ADC9, (0), "ADC9"),
14834af4eb66SBilly Tsai 	FUNC(AUXPWRGOOD0, (2), "AUXPWRGOOD0"),
14844af4eb66SBilly Tsai 	FUNC(AUXPWRGOOD1, (2), "AUXPWRGOOD1"),
14854af4eb66SBilly Tsai 	FUNC(CANBUS, (2), "CANBUS"),
14864af4eb66SBilly Tsai 	FUNC(ESPI0, (1), "ESPI0"),
14874af4eb66SBilly Tsai 	FUNC(ESPI1, (1), "ESPI1"),
14884af4eb66SBilly Tsai 	FUNC(FSI0, (2), "FSI0"),
14894af4eb66SBilly Tsai 	FUNC(FSI1, (2), "FSI1"),
14904af4eb66SBilly Tsai 	FUNC(FSI2, (2), "FSI2"),
14914af4eb66SBilly Tsai 	FUNC(FSI3, (2), "FSI3"),
14924af4eb66SBilly Tsai 	FUNC(FWQSPI, (1), "FWQSPI"),
14934af4eb66SBilly Tsai 	FUNC(FWSPIABR, (1), "FWSPIABR"),
14944af4eb66SBilly Tsai 	FUNC(FWWPN, (1), "FWWPN"),
14954af4eb66SBilly Tsai 	FUNC(HBLED, (2), "HBLED"),
14964af4eb66SBilly Tsai 	FUNC(I2C0, (1, 2, 4), "I2C0", "LTPI_PS_I2C0", "DI2C0"),
14974af4eb66SBilly Tsai 	FUNC(I2C1, (1, 2, 4), "I2C1", "LTPI_PS_I2C1", "DI2C1"),
14984af4eb66SBilly Tsai 	FUNC(I2C10, (1, 2), "I2C10", "DI2C10"),
14994af4eb66SBilly Tsai 	FUNC(I2C11, (1, 2), "I2C11", "DI2C11"),
15004af4eb66SBilly Tsai 	FUNC(I2C12, (4, 2), "I2C12", "DI2C12"),
15014af4eb66SBilly Tsai 	FUNC(I2C13, (4, 2), "I2C13", "DI2C13"),
15024af4eb66SBilly Tsai 	FUNC(I2C14, (4, 2), "I2C14", "DI2C14"),
15034af4eb66SBilly Tsai 	FUNC(I2C15, (2, 2), "I2C15", "DI2C15"),
15044af4eb66SBilly Tsai 	FUNC(I2C2, (1, 2, 4), "I2C2", "LTPI_PS_I2C2", "DI2C2"),
15054af4eb66SBilly Tsai 	FUNC(I2C3, (1, 2, 4), "I2C3", "LTPI_PS_I2C3", "DI2C3"),
15064af4eb66SBilly Tsai 	FUNC(I2C4, (1), "I2C4"),
15074af4eb66SBilly Tsai 	FUNC(I2C5, (1), "I2C5"),
15084af4eb66SBilly Tsai 	FUNC(I2C6, (1), "I2C6"),
15094af4eb66SBilly Tsai 	FUNC(I2C7, (1), "I2C7"),
15104af4eb66SBilly Tsai 	FUNC(I2C8, (1, 2), "I2C8", "DI2C8"),
15114af4eb66SBilly Tsai 	FUNC(I2C9, (1, 2), "I2C9", "DI2C9"),
15124af4eb66SBilly Tsai 	FUNC(I2CF0, (5), "I2CF0"),
15134af4eb66SBilly Tsai 	FUNC(I2CF1, (5), "I2CF1"),
15144af4eb66SBilly Tsai 	FUNC(I2CF2, (5), "I2CF2"),
15154af4eb66SBilly Tsai 	FUNC(I3C0, (1), "HVI3C0"),
15164af4eb66SBilly Tsai 	FUNC(I3C1, (1), "HVI3C1"),
15174af4eb66SBilly Tsai 	FUNC(I3C10, (1), "I3C10"),
15184af4eb66SBilly Tsai 	FUNC(I3C11, (1), "I3C11"),
15194af4eb66SBilly Tsai 	FUNC(I3C12, (1), "HVI3C12"),
15204af4eb66SBilly Tsai 	FUNC(I3C13, (1), "HVI3C13"),
15214af4eb66SBilly Tsai 	FUNC(I3C14, (1), "HVI3C14"),
15224af4eb66SBilly Tsai 	FUNC(I3C15, (1), "HVI3C15"),
15234af4eb66SBilly Tsai 	FUNC(I3C2, (1), "HVI3C2"),
15244af4eb66SBilly Tsai 	FUNC(I3C3, (1), "HVI3C3"),
15254af4eb66SBilly Tsai 	FUNC(I3C4, (1), "I3C4"),
15264af4eb66SBilly Tsai 	FUNC(I3C5, (1), "I3C5"),
15274af4eb66SBilly Tsai 	FUNC(I3C6, (1), "I3C6"),
15284af4eb66SBilly Tsai 	FUNC(I3C7, (1), "I3C7"),
15294af4eb66SBilly Tsai 	FUNC(I3C8, (1), "I3C8"),
15304af4eb66SBilly Tsai 	FUNC(I3C9, (1), "I3C9"),
15314af4eb66SBilly Tsai 	FUNC(JTAGM1, (1), "JTAGM1"),
15324af4eb66SBilly Tsai 	FUNC(LPC0, (2), "LPC0"),
15334af4eb66SBilly Tsai 	FUNC(LPC1, (2), "LPC1"),
15344af4eb66SBilly Tsai 	FUNC(LTPI, (2), "LTPI"),
15354af4eb66SBilly Tsai 	FUNC(MACLINK0, (4), "MACLINK0"),
15364af4eb66SBilly Tsai 	FUNC(MACLINK1, (3), "MACLINK1"),
15374af4eb66SBilly Tsai 	FUNC(MACLINK2, (4), "MACLINK2"),
15384af4eb66SBilly Tsai 	FUNC(MDIO0, (1), "MDIO0"),
15394af4eb66SBilly Tsai 	FUNC(MDIO1, (1), "MDIO1"),
15404af4eb66SBilly Tsai 	FUNC(MDIO2, (1), "MDIO2"),
15414af4eb66SBilly Tsai 	FUNC(NCTS0, (1), "NCTS0"),
15424af4eb66SBilly Tsai 	FUNC(NCTS1, (1), "NCTS1"),
15434af4eb66SBilly Tsai 	FUNC(NCTS5, (4), "NCTS5"),
15444af4eb66SBilly Tsai 	FUNC(NCTS6, (4), "NCTS6"),
15454af4eb66SBilly Tsai 	FUNC(NDCD0, (1), "NDCD0"),
15464af4eb66SBilly Tsai 	FUNC(NDCD1, (1), "NDCD1"),
15474af4eb66SBilly Tsai 	FUNC(NDCD5, (4), "NDCD5"),
15484af4eb66SBilly Tsai 	FUNC(NDCD6, (4), "NDCD6"),
15494af4eb66SBilly Tsai 	FUNC(NDSR0, (1), "NDSR0"),
15504af4eb66SBilly Tsai 	FUNC(NDSR1, (1), "NDSR1"),
15514af4eb66SBilly Tsai 	FUNC(NDSR5, (4), "NDSR5"),
15524af4eb66SBilly Tsai 	FUNC(NDSR6, (4), "NDSR6"),
15534af4eb66SBilly Tsai 	FUNC(NDTR0, (1), "NDTR0"),
15544af4eb66SBilly Tsai 	FUNC(NDTR1, (1), "NDTR1"),
15554af4eb66SBilly Tsai 	FUNC(NDTR5, (4), "NDTR5"),
15564af4eb66SBilly Tsai 	FUNC(NDTR6, (4), "NDTR6"),
15574af4eb66SBilly Tsai 	FUNC(NRI0, (1), "NRI0"),
15584af4eb66SBilly Tsai 	FUNC(NRI1, (1), "NRI1"),
15594af4eb66SBilly Tsai 	FUNC(NRI5, (4), "NRI5"),
15604af4eb66SBilly Tsai 	FUNC(NRI6, (4), "NRI6"),
15614af4eb66SBilly Tsai 	FUNC(NRTS0, (1), "NRTS0"),
15624af4eb66SBilly Tsai 	FUNC(NRTS1, (1), "NRTS1"),
15634af4eb66SBilly Tsai 	FUNC(NRTS5, (4), "NRTS5"),
15644af4eb66SBilly Tsai 	FUNC(NRTS6, (4), "NRTS6"),
15654af4eb66SBilly Tsai 	FUNC(OSCCLK, (3), "OSCCLK"),
15664af4eb66SBilly Tsai 	FUNC(PCIERC, (2), "PE2SGRSTN"),
15674af4eb66SBilly Tsai 	FUNC(PWM0, (1), "PWM0"),
15684af4eb66SBilly Tsai 	FUNC(PWM1, (1), "PWM1"),
15694af4eb66SBilly Tsai 	FUNC(PWM10, (3), "PWM10"),
15704af4eb66SBilly Tsai 	FUNC(PWM11, (3), "PWM11"),
15714af4eb66SBilly Tsai 	FUNC(PWM12, (3), "PWM12"),
15724af4eb66SBilly Tsai 	FUNC(PWM13, (3), "PWM13"),
15734af4eb66SBilly Tsai 	FUNC(PWM14, (3), "PWM14"),
15744af4eb66SBilly Tsai 	FUNC(PWM15, (3), "PWM15"),
15754af4eb66SBilly Tsai 	FUNC(PWM2, (1), "PWM2"),
15764af4eb66SBilly Tsai 	FUNC(PWM3, (1), "PWM3"),
15774af4eb66SBilly Tsai 	FUNC(PWM4, (1), "PWM4"),
15784af4eb66SBilly Tsai 	FUNC(PWM5, (1), "PWM5"),
15794af4eb66SBilly Tsai 	FUNC(PWM6, (1), "PWM6"),
15804af4eb66SBilly Tsai 	FUNC(PWM7, (1), "PWM7"),
15814af4eb66SBilly Tsai 	FUNC(PWM8, (3), "PWM8"),
15824af4eb66SBilly Tsai 	FUNC(PWM9, (3), "PWM9"),
15834af4eb66SBilly Tsai 	FUNC(QSPI0, (1), "QSPI0"),
15844af4eb66SBilly Tsai 	FUNC(QSPI1, (1), "QSPI1"),
15854af4eb66SBilly Tsai 	FUNC(QSPI2, (1), "QSPI2"),
15864af4eb66SBilly Tsai 	FUNC(RGMII0, (1), "RGMII0"),
15874af4eb66SBilly Tsai 	FUNC(RGMII1, (1), "RGMII1"),
15884af4eb66SBilly Tsai 	FUNC(RMII0, (2), "RMII0"),
15894af4eb66SBilly Tsai 	FUNC(RMII0RCLKO, (2), "RMII0RCLKO"),
15904af4eb66SBilly Tsai 	FUNC(RMII1, (2), "RMII1"),
15914af4eb66SBilly Tsai 	FUNC(RMII1RCLKO, (2), "RMII1RCLKO"),
15924af4eb66SBilly Tsai 	FUNC(SALT0, (2), "SALT0"),
15934af4eb66SBilly Tsai 	FUNC(SALT1, (2), "SALT1"),
15944af4eb66SBilly Tsai 	FUNC(SALT10, (2), "SALT10"),
15954af4eb66SBilly Tsai 	FUNC(SALT11, (2), "SALT11"),
15964af4eb66SBilly Tsai 	FUNC(SALT12, (2), "SALT12"),
15974af4eb66SBilly Tsai 	FUNC(SALT13, (2), "SALT13"),
15984af4eb66SBilly Tsai 	FUNC(SALT14, (2), "SALT14"),
15994af4eb66SBilly Tsai 	FUNC(SALT15, (2), "SALT15"),
16004af4eb66SBilly Tsai 	FUNC(SALT2, (2), "SALT2"),
16014af4eb66SBilly Tsai 	FUNC(SALT3, (2), "SALT3"),
16024af4eb66SBilly Tsai 	FUNC(SALT4, (2), "SALT4"),
16034af4eb66SBilly Tsai 	FUNC(SALT5, (2), "SALT5"),
16044af4eb66SBilly Tsai 	FUNC(SALT6, (2), "SALT6"),
16054af4eb66SBilly Tsai 	FUNC(SALT7, (2), "SALT7"),
16064af4eb66SBilly Tsai 	FUNC(SALT8, (2), "SALT8"),
16074af4eb66SBilly Tsai 	FUNC(SALT9, (2), "SALT9"),
16084af4eb66SBilly Tsai 	FUNC(SD, (3), "SD"),
16094af4eb66SBilly Tsai 	FUNC(SGMII, (1), "SGMII"),
16104af4eb66SBilly Tsai 	FUNC(SGPM0, (1, 4), "SGPM0", "DSGPM0"),
16114af4eb66SBilly Tsai 	FUNC(SGPM1, (1), "SGPM1"),
16124af4eb66SBilly Tsai 	FUNC(SGPS, (5), "SGPS"),
16134af4eb66SBilly Tsai 	FUNC(SIOONCTRLN0, (2), "SIOONCTRLN0"),
16144af4eb66SBilly Tsai 	FUNC(SIOONCTRLN1, (2), "SIOONCTRLN1"),
16154af4eb66SBilly Tsai 	FUNC(SIOPBIN0, (2), "SIOPBIN0"),
16164af4eb66SBilly Tsai 	FUNC(SIOPBIN1, (2), "SIOPBIN1"),
16174af4eb66SBilly Tsai 	FUNC(SIOPBON0, (2), "SIOPBON0"),
16184af4eb66SBilly Tsai 	FUNC(SIOPBON1, (2), "SIOPBON1"),
16194af4eb66SBilly Tsai 	FUNC(SIOPWREQN0, (2), "SIOPWREQN0"),
16204af4eb66SBilly Tsai 	FUNC(SIOPWREQN1, (2), "SIOPWREQN1"),
16214af4eb66SBilly Tsai 	FUNC(SIOPWRGD1, (2), "SIOPWRGD1"),
16224af4eb66SBilly Tsai 	FUNC(SIOS3N0, (2), "SIOS3N0"),
16234af4eb66SBilly Tsai 	FUNC(SIOS3N1, (2), "SIOS3N1"),
16244af4eb66SBilly Tsai 	FUNC(SIOS5N0, (2), "SIOS5N0"),
16254af4eb66SBilly Tsai 	FUNC(SIOS5N1, (2), "SIOS5N1"),
16264af4eb66SBilly Tsai 	FUNC(SIOSCIN0, (2), "SIOSCIN0"),
16274af4eb66SBilly Tsai 	FUNC(SIOSCIN1, (2), "SIOSCIN1"),
16284af4eb66SBilly Tsai 	FUNC(SMON0, (2), "SMON0"),
16294af4eb66SBilly Tsai 	FUNC(SMON1, (4), "SMON1"),
16304af4eb66SBilly Tsai 	FUNC(SPI0, (1), "SPI0"),
16314af4eb66SBilly Tsai 	FUNC(SPI0ABR, (1), "SPI0ABR"),
16324af4eb66SBilly Tsai 	FUNC(SPI0CS1, (1), "SPI0CS1"),
16334af4eb66SBilly Tsai 	FUNC(SPI0WPN, (1), "SPI0WPN"),
16344af4eb66SBilly Tsai 	FUNC(SPI1, (1), "SPI1"),
16354af4eb66SBilly Tsai 	FUNC(SPI1ABR, (1), "SPI1ABR"),
16364af4eb66SBilly Tsai 	FUNC(SPI1CS1, (1), "SPI1CS1"),
16374af4eb66SBilly Tsai 	FUNC(SPI1WPN, (1), "SPI1WPN"),
16384af4eb66SBilly Tsai 	FUNC(SPI2, (1), "SPI2"),
16394af4eb66SBilly Tsai 	FUNC(SPI2CS1, (1), "SPI2CS1"),
16404af4eb66SBilly Tsai 	FUNC(TACH0, (1), "TACH0"),
16414af4eb66SBilly Tsai 	FUNC(TACH1, (1), "TACH1"),
16424af4eb66SBilly Tsai 	FUNC(TACH10, (1), "TACH10"),
16434af4eb66SBilly Tsai 	FUNC(TACH11, (1), "TACH11"),
16444af4eb66SBilly Tsai 	FUNC(TACH12, (1), "TACH12"),
16454af4eb66SBilly Tsai 	FUNC(TACH13, (1), "TACH13"),
16464af4eb66SBilly Tsai 	FUNC(TACH14, (1), "TACH14"),
16474af4eb66SBilly Tsai 	FUNC(TACH15, (1), "TACH15"),
16484af4eb66SBilly Tsai 	FUNC(TACH2, (1), "TACH2"),
16494af4eb66SBilly Tsai 	FUNC(TACH3, (1), "TACH3"),
16504af4eb66SBilly Tsai 	FUNC(TACH4, (1), "TACH4"),
16514af4eb66SBilly Tsai 	FUNC(TACH5, (1), "TACH5"),
16524af4eb66SBilly Tsai 	FUNC(TACH6, (1), "TACH6"),
16534af4eb66SBilly Tsai 	FUNC(TACH7, (1), "TACH7"),
16544af4eb66SBilly Tsai 	FUNC(TACH8, (1), "TACH8"),
16554af4eb66SBilly Tsai 	FUNC(TACH9, (1), "TACH9"),
16564af4eb66SBilly Tsai 	FUNC(THRU0, (2), "THRU0"),
16574af4eb66SBilly Tsai 	FUNC(THRU1, (2), "THRU1"),
16584af4eb66SBilly Tsai 	FUNC(THRU2, (4), "THRU2"),
16594af4eb66SBilly Tsai 	FUNC(THRU3, (4), "THRU3"),
16604af4eb66SBilly Tsai 	FUNC(UART0, (1), "UART0"),
16614af4eb66SBilly Tsai 	FUNC(UART1, (1), "UART1"),
16624af4eb66SBilly Tsai 	FUNC(UART10, (3), "UART10"),
16634af4eb66SBilly Tsai 	FUNC(UART11, (3), "UART11"),
16644af4eb66SBilly Tsai 	FUNC(UART2, (1), "UART2"),
16654af4eb66SBilly Tsai 	FUNC(UART3, (1), "UART3"),
16664af4eb66SBilly Tsai 	FUNC(UART5, (4), "UART5"),
16674af4eb66SBilly Tsai 	FUNC(UART6, (4), "UART6"),
16684af4eb66SBilly Tsai 	FUNC(UART7, (1), "UART7"),
16694af4eb66SBilly Tsai 	FUNC(UART8, (3), "UART8"),
16704af4eb66SBilly Tsai 	FUNC(UART9, (3), "UART9"),
16714af4eb66SBilly Tsai 	FUNC(USB2C, (0, 1, 2, 3), "USB2CUD", "USB2CD", "USB2CH", "USB2CU"),
16724af4eb66SBilly Tsai 	FUNC(USB2D, (1, 2), "USB2DD", "USB2DH"),
16734af4eb66SBilly Tsai 	FUNC(USBUART, (2), "USBUART"),
16744af4eb66SBilly Tsai 	FUNC(VGA, (1), "VGA"),
16754af4eb66SBilly Tsai 	FUNC(VPI, (5), "VPI"),
16764af4eb66SBilly Tsai 	FUNC(WDTRST0N, (2), "WDTRST0N"),
16774af4eb66SBilly Tsai 	FUNC(WDTRST1N, (2), "WDTRST1N"),
16784af4eb66SBilly Tsai 	FUNC(WDTRST2N, (2), "WDTRST2N"),
16794af4eb66SBilly Tsai 	FUNC(WDTRST3N, (2), "WDTRST3N"),
16804af4eb66SBilly Tsai 	FUNC(WDTRST4N, (2), "WDTRST4N"),
16814af4eb66SBilly Tsai 	FUNC(WDTRST5N, (2), "WDTRST5N"),
16824af4eb66SBilly Tsai 	FUNC(WDTRST6N, (2), "WDTRST6N"),
16834af4eb66SBilly Tsai 	FUNC(WDTRST7N, (2), "WDTRST7N"),
16844af4eb66SBilly Tsai };
16854af4eb66SBilly Tsai 
16864af4eb66SBilly Tsai static int aspeed_g7_soc1_pinctrl_probe(struct platform_device *pdev)
16874af4eb66SBilly Tsai {
16884af4eb66SBilly Tsai 	struct aspeed_g7_soc1_pinctrl *pctl;
16894af4eb66SBilly Tsai 	struct device *dev = &pdev->dev;
16904af4eb66SBilly Tsai 	int i, ret;
16914af4eb66SBilly Tsai 
16924af4eb66SBilly Tsai 	pctl = devm_kzalloc(dev, sizeof(*pctl), GFP_KERNEL);
16934af4eb66SBilly Tsai 	if (!pctl)
16944af4eb66SBilly Tsai 		return -ENOMEM;
16954af4eb66SBilly Tsai 
16964af4eb66SBilly Tsai 	pctl->dev = dev;
16974af4eb66SBilly Tsai 	pctl->regmap = syscon_node_to_regmap(dev->parent->of_node);
16984af4eb66SBilly Tsai 	if (IS_ERR(pctl->regmap)) {
16994af4eb66SBilly Tsai 		dev_err(dev, "Failed to get regmap from parent\n");
17004af4eb66SBilly Tsai 		return PTR_ERR(pctl->regmap);
17014af4eb66SBilly Tsai 	}
17024af4eb66SBilly Tsai 
17034af4eb66SBilly Tsai 	ret = devm_pinctrl_register_and_init(dev, &aspeed_g7_soc1_desc, pctl,
17044af4eb66SBilly Tsai 					     &pctl->pctl);
17054af4eb66SBilly Tsai 	if (ret) {
17064af4eb66SBilly Tsai 		dev_err(dev, "Failed to register pinctrl\n");
17074af4eb66SBilly Tsai 		return ret;
17084af4eb66SBilly Tsai 	}
17094af4eb66SBilly Tsai 
17104af4eb66SBilly Tsai 	for (i = 0; i < ARRAY_SIZE(aspeed_g7_soc1_groups); i++) {
17114af4eb66SBilly Tsai 		const struct pingroup *grp = &aspeed_g7_soc1_groups[i];
17124af4eb66SBilly Tsai 
17134af4eb66SBilly Tsai 		ret = pinctrl_generic_add_group(pctl->pctl, grp->name,
17144af4eb66SBilly Tsai 						(const unsigned int *)grp->pins,
17154af4eb66SBilly Tsai 						grp->npins, pctl);
17164af4eb66SBilly Tsai 		if (ret < 0) {
17174af4eb66SBilly Tsai 			dev_err(dev, "Failed to add group %s\n", grp->name);
17184af4eb66SBilly Tsai 			return ret;
17194af4eb66SBilly Tsai 		}
17204af4eb66SBilly Tsai 	}
17214af4eb66SBilly Tsai 
17224af4eb66SBilly Tsai 	for (i = 0; i < ARRAY_SIZE(aspeed_g7_soc1_functions); i++) {
17234af4eb66SBilly Tsai 		const struct aspeed_g7_soc1_function *func = &aspeed_g7_soc1_functions[i];
17244af4eb66SBilly Tsai 
17254af4eb66SBilly Tsai 		ret = pinmux_generic_add_function(pctl->pctl, func->pinfunction.name,
17264af4eb66SBilly Tsai 						  func->pinfunction.groups,
17274af4eb66SBilly Tsai 						  func->pinfunction.ngroups, (void *)func);
17284af4eb66SBilly Tsai 		if (ret < 0) {
17294af4eb66SBilly Tsai 			dev_err(dev, "Failed to add function %s\n", func->pinfunction.name);
17304af4eb66SBilly Tsai 			return ret;
17314af4eb66SBilly Tsai 		}
17324af4eb66SBilly Tsai 	}
17334af4eb66SBilly Tsai 
17344af4eb66SBilly Tsai 	return pinctrl_enable(pctl->pctl);
17354af4eb66SBilly Tsai }
17364af4eb66SBilly Tsai 
17374af4eb66SBilly Tsai static const struct of_device_id aspeed_g7_soc1_pinctrl_match[] = {
17384af4eb66SBilly Tsai 	{ .compatible = "aspeed,ast2700-soc1-pinctrl" },
17394af4eb66SBilly Tsai 	{}
17404af4eb66SBilly Tsai };
17414af4eb66SBilly Tsai MODULE_DEVICE_TABLE(of, aspeed_g7_soc1_pinctrl_match);
17424af4eb66SBilly Tsai 
17434af4eb66SBilly Tsai static struct platform_driver aspeed_g7_soc1_pinctrl_driver = {
17444af4eb66SBilly Tsai 	.probe = aspeed_g7_soc1_pinctrl_probe,
17454af4eb66SBilly Tsai 	.driver = {
17464af4eb66SBilly Tsai 		.name = "aspeed-g7-soc1-pinctrl",
17474af4eb66SBilly Tsai 		.of_match_table = aspeed_g7_soc1_pinctrl_match,
17484af4eb66SBilly Tsai 		.suppress_bind_attrs = true,
17494af4eb66SBilly Tsai 	},
17504af4eb66SBilly Tsai };
17514af4eb66SBilly Tsai 
17524af4eb66SBilly Tsai static int __init aspeed_g7_soc1_pinctrl_init(void)
17534af4eb66SBilly Tsai {
17544af4eb66SBilly Tsai 	return platform_driver_register(&aspeed_g7_soc1_pinctrl_driver);
17554af4eb66SBilly Tsai }
17564af4eb66SBilly Tsai arch_initcall(aspeed_g7_soc1_pinctrl_init);
1757