xref: /linux/drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c (revision a1c613ae4c322ddd58d5a8539dbfba2a0380a8c0)
19088276dSMesih Kilinc /*
29088276dSMesih Kilinc  * Allwinner new F-series F1C100s SoC (suniv) pinctrl driver.
39088276dSMesih Kilinc  *
49088276dSMesih Kilinc  * Copyright (C) 2018 Icenowy Zheng
59088276dSMesih Kilinc  *
69088276dSMesih Kilinc  * Icenowy Zheng <icenowy@aosc.io>
79088276dSMesih Kilinc  *
89088276dSMesih Kilinc  * Copyright (C) 2014 Jackie Hwang
99088276dSMesih Kilinc  *
109088276dSMesih Kilinc  * Jackie Hwang <huangshr@allwinnertech.com>
119088276dSMesih Kilinc  *
129088276dSMesih Kilinc  * Copyright (C) 2014 Chen-Yu Tsai
139088276dSMesih Kilinc  *
149088276dSMesih Kilinc  * Chen-Yu Tsai <wens@csie.org>
159088276dSMesih Kilinc  *
169088276dSMesih Kilinc  * Copyright (C) 2014 Maxime Ripard
179088276dSMesih Kilinc  *
189088276dSMesih Kilinc  * Maxime Ripard <maxime.ripard@free-electrons.com>
199088276dSMesih Kilinc  *
209088276dSMesih Kilinc  * This file is licensed under the terms of the GNU General Public
219088276dSMesih Kilinc  * License version 2.  This program is licensed "as is" without any
229088276dSMesih Kilinc  * warranty of any kind, whether express or implied.
239088276dSMesih Kilinc  */
249088276dSMesih Kilinc 
259088276dSMesih Kilinc #include <linux/module.h>
269088276dSMesih Kilinc #include <linux/platform_device.h>
279088276dSMesih Kilinc #include <linux/of.h>
289088276dSMesih Kilinc #include <linux/pinctrl/pinctrl.h>
299088276dSMesih Kilinc 
309088276dSMesih Kilinc #include "pinctrl-sunxi.h"
319088276dSMesih Kilinc static const struct sunxi_desc_pin suniv_f1c100s_pins[] = {
329088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),
339088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
349088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
359088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "rtp"),		/* X1 */
369088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* BCLK */
379088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* RTS */
389088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* CS */
399088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
409088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
419088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
429088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "rtp"),		/* X2 */
439088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* LRCK */
449088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* CTS */
459088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* MOSI */
469088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
479088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
489088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
499088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "rtp"),		/* Y1 */
509088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "pwm0"),		/* PWM0 */
519088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* IN */
529088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* RX */
53*e199975bSAndre Przywara 		  SUNXI_FUNCTION(0x6, "spi1")),		/* CLK */
549088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
559088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
569088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
579088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "rtp"),		/* Y2 */
589088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "ir0"),		/* RX */
599088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* OUT */
609088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* TX */
619088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* MISO */
629088276dSMesih Kilinc 	/* Hole */
639088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
649088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
659088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
669088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "dram"),		/* DQS0 */
679088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SCK */
689088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* BCLK */
699088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* RTS */
709088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* CS */
719088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
729088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
739088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
749088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "dram"),		/* DQS1 */
759088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SDA */
769088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* LRCK */
779088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* CTS */
789088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* MOSI */
799088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
809088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
819088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
829088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "dram"),		/* CKE */
839088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "pwm0"),		/* PWM0 */
849088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* IN */
859088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* RX */
869088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* CLK */
879088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
889088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
899088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
909088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "dram"),		/* DDR_REF_D */
919088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "ir0"),		/* RX */
929088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* OUT */
939088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart1"),		/* TX */
949088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x6, "spi1")),		/* MISO */
959088276dSMesih Kilinc 	/* Hole */
969088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
979088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
989088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "spi0"),		/* CLK */
999088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "mmc1")),		/* CLK */
1009088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
1019088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1029088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1039088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "spi0"),		/* CS */
1049088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "mmc1")),		/* CMD */
1059088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
1069088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1079088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1089088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "spi0"),		/* MISO */
1099088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "mmc1")),		/* D0 */
1109088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
1119088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1129088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1139088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "spi0"),		/* MOSI */
1149088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */
1159088276dSMesih Kilinc 	/* Hole */
1169088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
1179088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1189088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1199088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D2 */
1209088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SDA */
1219088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "rsb"),		/* SDA */
1229088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
1239088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
1249088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1259088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1269088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D3 */
1279088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart1"),		/* RTS */
1289088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
1299088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
1309088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1319088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1329088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D4*/
1339088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart1"),		/* CTS */
1349088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
1359088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
1369088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1379088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1389088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D5 */
1399088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart1"),		/* RX */
1409088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
1419088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
1429088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1439088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1449088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D6 */
1459088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart1"),		/* TX */
1469088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
1479088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
1489088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1499088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1509088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D7 */
1519088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SCK */
1529088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
1539088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
1549088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1559088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1569088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D10 */
1579088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SDA */
1589088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
1599088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
1609088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1619088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1629088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D11 */
1639088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2s"),		/* MCLK */
1649088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
1659088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
1669088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1679088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1689088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D12 */
1699088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2s"),		/* BCLK */
1709088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
1719088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
1729088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1739088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1749088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D13 */
1759088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2s"),		/* LRCK */
1769088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
1779088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
1789088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1799088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1809088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D14 */
1819088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2s"),		/* IN */
1829088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
1839088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
1849088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1859088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1869088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D15 */
1879088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2s"),		/* OUT */
1889088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),
1899088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
1909088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1919088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1929088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D18 */
1939088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SCK */
1949088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "rsb"),		/* SCK */
1959088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)),
1969088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
1979088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
1989088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
1999088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D19 */
2009088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* TX */
2019088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)),
2029088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
2039088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2049088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2059088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D20 */
206fa8785e5SIotaHydrae 		  SUNXI_FUNCTION(0x3, "uart2"),		/* RX */
2079088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),
2089088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
2099088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2109088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2119088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D21 */
2129088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* RTS */
2139088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2c2"),		/* SCK */
2149088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),
2159088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
2169088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2179088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2189088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D22 */
2199088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* CTS */
2209088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2c2"),		/* SDA */
2219088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),
2229088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
2239088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2249088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2259088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* D23 */
2269088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "spdif"),		/* OUT */
2279088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)),
2289088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
2299088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2309088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2319088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* CLK */
2329088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "spi0"),		/* CS */
2339088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)),
2349088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
2359088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2369088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2379088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* DE */
2389088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "spi0"),		/* MOSI */
2399088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)),
2409088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
2419088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2429088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2439088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* HYSNC */
2449088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "spi0"),		/* CLK */
2459088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)),
2469088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
2479088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2489088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2499088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "lcd"),		/* VSYNC */
2509088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "spi0"),		/* MISO */
2519088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)),
2529088276dSMesih Kilinc 	/* Hole */
2539088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
2549088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2559088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2569088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* HSYNC */
2579088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D0 */
2589088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2c2"),		/* SCK */
2599088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart0"),		/* RX */
2609088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),
2619088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
2629088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2639088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2649088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* VSYNC */
2659088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D1 */
2669088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2c2"),		/* SDA */
2679088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "uart0"),		/* TX */
2689088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),
2699088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
2709088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2719088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2729088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* PCLK */
2739088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D8 */
2749088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "clk"),		/* OUT */
2759088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),
2769088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
2779088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2789088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2799088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D0 */
2809088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D9 */
2819088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* BCLK */
2829088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "rsb"),		/* SCK */
2839088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),
2849088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
2859088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2869088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2879088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D1 */
2889088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D16 */
2899088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* LRCK */
2909088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "rsb"),		/* SDA */
2919088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),
2929088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
2939088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
2949088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
2959088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D2 */
2969088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "lcd"),		/* D17 */
2979088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* IN */
2989088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),
2999088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
3009088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3019088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3029088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D3 */
3039088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "pwm1"),		/* PWM1 */
3049088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "i2s"),		/* OUT */
3059088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x5, "spdif"),		/* OUT */
3069088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),
3079088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
3089088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3099088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3109088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D4 */
3119088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* TX */
3129088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "spi1"),		/* CS */
3139088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),
3149088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
3159088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3169088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3179088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D5 */
3189088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* RX */
3199088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */
3209088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),
3219088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
3229088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3239088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3249088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D6 */
3259088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* RTS */
3269088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */
3279088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),
3289088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
3299088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3309088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3319088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "csi"),		/* D7 */
3329088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart2"),		/* CTS */
3339088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */
3349088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),
3359088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
3369088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3379088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3389088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "clk0"),		/* OUT */
3399088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SCK */
3409088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "ir"),		/* RX */
3419088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),
3429088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
3439088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3449088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3459088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "i2s"),		/* MCLK */
3469088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SDA */
3479088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "pwm0"),		/* PWM0 */
3489088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),
3499088276dSMesih Kilinc 
3509088276dSMesih Kilinc 	/* Hole */
3519088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
3529088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3539088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3549088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
3559088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS */
3569088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "ir0"),		/* MS */
3579088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),
3589088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
3599088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3609088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3619088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
3629088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "dgb0"),		/* DI */
3639088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),
3649088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
3659088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3669088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3679088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
3689088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
3699088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),
3709088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
3719088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3729088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3739088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
3749088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
3759088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),
3769088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
3779088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3789088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3799088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
3809088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
3819088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),
3829088276dSMesih Kilinc 	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
3839088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x0, "gpio_in"),
3849088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x1, "gpio_out"),
3859088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
3869088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
3879088276dSMesih Kilinc 		  SUNXI_FUNCTION(0x4, "pwm1"),		/* PWM1 */
3889088276dSMesih Kilinc 		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),
3899088276dSMesih Kilinc };
3909088276dSMesih Kilinc 
3919088276dSMesih Kilinc static const struct sunxi_pinctrl_desc suniv_f1c100s_pinctrl_data = {
3929088276dSMesih Kilinc 	.pins = suniv_f1c100s_pins,
3939088276dSMesih Kilinc 	.npins = ARRAY_SIZE(suniv_f1c100s_pins),
3949088276dSMesih Kilinc 	.irq_banks = 3,
3959088276dSMesih Kilinc };
3969088276dSMesih Kilinc 
suniv_pinctrl_probe(struct platform_device * pdev)3979088276dSMesih Kilinc static int suniv_pinctrl_probe(struct platform_device *pdev)
3989088276dSMesih Kilinc {
3999088276dSMesih Kilinc 	return sunxi_pinctrl_init(pdev,
4009088276dSMesih Kilinc 				  &suniv_f1c100s_pinctrl_data);
4019088276dSMesih Kilinc }
4029088276dSMesih Kilinc 
4039088276dSMesih Kilinc static const struct of_device_id suniv_f1c100s_pinctrl_match[] = {
4049088276dSMesih Kilinc 	{ .compatible = "allwinner,suniv-f1c100s-pinctrl", },
4059088276dSMesih Kilinc 	{}
4069088276dSMesih Kilinc };
4079088276dSMesih Kilinc 
4089088276dSMesih Kilinc static struct platform_driver suniv_f1c100s_pinctrl_driver = {
4099088276dSMesih Kilinc 	.probe	= suniv_pinctrl_probe,
4109088276dSMesih Kilinc 	.driver	= {
4119088276dSMesih Kilinc 		.name		= "suniv-f1c100s-pinctrl",
4129088276dSMesih Kilinc 		.of_match_table	= suniv_f1c100s_pinctrl_match,
4139088276dSMesih Kilinc 	},
4149088276dSMesih Kilinc };
4159088276dSMesih Kilinc builtin_platform_driver(suniv_f1c100s_pinctrl_driver);
416