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