brintos

brintos / linux-shallow public Read only

0
0
Text · 21.9 KiB · f6b01a8 Raw
587 lines · c
1/*2 * Allwinner A23 SoCs pinctrl driver.3 *4 * Copyright (C) 2014 Chen-Yu Tsai5 *6 * Chen-Yu Tsai <wens@csie.org>7 *8 * Copyright (C) 2014 Maxime Ripard9 *10 * Maxime Ripard <maxime.ripard@free-electrons.com>11 *12 * This file is licensed under the terms of the GNU General Public13 * License version 2.  This program is licensed "as is" without any14 * warranty of any kind, whether express or implied.15 */16 17#include <linux/init.h>18#include <linux/platform_device.h>19#include <linux/of.h>20#include <linux/pinctrl/pinctrl.h>21 22#include "pinctrl-sunxi.h"23 24static const struct sunxi_desc_pin sun8i_a23_pins[] = {25	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),26		  SUNXI_FUNCTION(0x0, "gpio_in"),27		  SUNXI_FUNCTION(0x1, "gpio_out"),28		  SUNXI_FUNCTION(0x2, "spi1"),		/* CS */29		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS0 */30		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 0)),	/* PA_EINT0 */31	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),32		  SUNXI_FUNCTION(0x0, "gpio_in"),33		  SUNXI_FUNCTION(0x1, "gpio_out"),34		  SUNXI_FUNCTION(0x2, "spi1"),		/* CLK */35		  SUNXI_FUNCTION(0x3, "jtag"),		/* CKO */36		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 1)),	/* PA_EINT1 */37	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),38		  SUNXI_FUNCTION(0x0, "gpio_in"),39		  SUNXI_FUNCTION(0x1, "gpio_out"),40		  SUNXI_FUNCTION(0x2, "spi1"),		/* MOSI */41		  SUNXI_FUNCTION(0x3, "jtag"),		/* DOO */42		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 2)),	/* PA_EINT2 */43	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),44		  SUNXI_FUNCTION(0x0, "gpio_in"),45		  SUNXI_FUNCTION(0x1, "gpio_out"),46		  SUNXI_FUNCTION(0x2, "spi1"),		/* MISO */47		  SUNXI_FUNCTION(0x3, "jtag"),		/* DIO */48		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 3)),	/* PA_EINT3 */49	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4),50		  SUNXI_FUNCTION(0x0, "gpio_in"),51		  SUNXI_FUNCTION(0x1, "gpio_out"),52		  SUNXI_FUNCTION(0x2, "uart4"),		/* TX */53		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 4)),	/* PA_EINT4 */54	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5),55		  SUNXI_FUNCTION(0x0, "gpio_in"),56		  SUNXI_FUNCTION(0x1, "gpio_out"),57		  SUNXI_FUNCTION(0x2, "uart4"),		/* RX */58		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 5)),	/* PA_EINT5 */59	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6),60		  SUNXI_FUNCTION(0x0, "gpio_in"),61		  SUNXI_FUNCTION(0x1, "gpio_out"),62		  SUNXI_FUNCTION(0x2, "uart4"),		/* RTS */63		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 6)),	/* PA_EINT6 */64	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7),65		  SUNXI_FUNCTION(0x0, "gpio_in"),66		  SUNXI_FUNCTION(0x1, "gpio_out"),67		  SUNXI_FUNCTION(0x2, "uart4"),		/* CTS */68		  SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 7)),	/* PA_EINT7 */69	/* Hole */70	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),71		  SUNXI_FUNCTION(0x0, "gpio_in"),72		  SUNXI_FUNCTION(0x1, "gpio_out"),73		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */74		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 0)),	/* PB_EINT0 */75	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),76		  SUNXI_FUNCTION(0x0, "gpio_in"),77		  SUNXI_FUNCTION(0x1, "gpio_out"),78		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */79		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 1)),	/* PB_EINT1 */80	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),81		  SUNXI_FUNCTION(0x0, "gpio_in"),82		  SUNXI_FUNCTION(0x1, "gpio_out"),83		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */84		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 2)),	/* PB_EINT2 */85	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),86		  SUNXI_FUNCTION(0x0, "gpio_in"),87		  SUNXI_FUNCTION(0x1, "gpio_out"),88		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */89		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 3)),	/* PB_EINT3 */90	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),91		  SUNXI_FUNCTION(0x0, "gpio_in"),92		  SUNXI_FUNCTION(0x1, "gpio_out"),93		  SUNXI_FUNCTION(0x2, "i2s0"),		/* SYNC */94		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 4)),	/* PB_EINT4 */95	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),96		  SUNXI_FUNCTION(0x0, "gpio_in"),97		  SUNXI_FUNCTION(0x1, "gpio_out"),98		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DOUT */99		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 5)),	/* PB_EINT5 */100	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),101		  SUNXI_FUNCTION(0x0, "gpio_in"),102		  SUNXI_FUNCTION(0x1, "gpio_out"),103		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DIN */104		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 6)),	/* PB_EINT6 */105	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),106		  SUNXI_FUNCTION(0x0, "gpio_in"),107		  SUNXI_FUNCTION(0x1, "gpio_out"),108		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DI */109		  SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 7)),	/* PB_EINT7 */110	/* Hole */111	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),112		  SUNXI_FUNCTION(0x0, "gpio_in"),113		  SUNXI_FUNCTION(0x1, "gpio_out"),114		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */115		  SUNXI_FUNCTION(0x3, "spi0")),		/* MOSI */116	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),117		  SUNXI_FUNCTION(0x0, "gpio_in"),118		  SUNXI_FUNCTION(0x1, "gpio_out"),119		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */120		  SUNXI_FUNCTION(0x3, "spi0")),		/* MISO */121	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),122		  SUNXI_FUNCTION(0x0, "gpio_in"),123		  SUNXI_FUNCTION(0x1, "gpio_out"),124		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */125		  SUNXI_FUNCTION(0x3, "spi0")),		/* CLK */126	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),127		  SUNXI_FUNCTION(0x0, "gpio_in"),128		  SUNXI_FUNCTION(0x1, "gpio_out"),129		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE1 */130		  SUNXI_FUNCTION(0x3, "spi0")),		/* CS */131	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),132		  SUNXI_FUNCTION(0x0, "gpio_in"),133		  SUNXI_FUNCTION(0x1, "gpio_out"),134		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE0 */135	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),136		  SUNXI_FUNCTION(0x0, "gpio_in"),137		  SUNXI_FUNCTION(0x1, "gpio_out"),138		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */139		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */140	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),141		  SUNXI_FUNCTION(0x0, "gpio_in"),142		  SUNXI_FUNCTION(0x1, "gpio_out"),143		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */144		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CMD */145	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),146		  SUNXI_FUNCTION(0x0, "gpio_in"),147		  SUNXI_FUNCTION(0x1, "gpio_out"),148		  SUNXI_FUNCTION(0x2, "nand0")),	/* RB1 */149	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),150		  SUNXI_FUNCTION(0x0, "gpio_in"),151		  SUNXI_FUNCTION(0x1, "gpio_out"),152		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */153		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D0 */154	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),155		  SUNXI_FUNCTION(0x0, "gpio_in"),156		  SUNXI_FUNCTION(0x1, "gpio_out"),157		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */158		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D1 */159	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),160		  SUNXI_FUNCTION(0x0, "gpio_in"),161		  SUNXI_FUNCTION(0x1, "gpio_out"),162		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */163		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */164	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),165		  SUNXI_FUNCTION(0x0, "gpio_in"),166		  SUNXI_FUNCTION(0x1, "gpio_out"),167		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */168		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */169	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),170		  SUNXI_FUNCTION(0x0, "gpio_in"),171		  SUNXI_FUNCTION(0x1, "gpio_out"),172		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */173		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */174	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),175		  SUNXI_FUNCTION(0x0, "gpio_in"),176		  SUNXI_FUNCTION(0x1, "gpio_out"),177		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */178		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */179	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),180		  SUNXI_FUNCTION(0x0, "gpio_in"),181		  SUNXI_FUNCTION(0x1, "gpio_out"),182		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */183		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */184	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),185		  SUNXI_FUNCTION(0x0, "gpio_in"),186		  SUNXI_FUNCTION(0x1, "gpio_out"),187		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */188		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */189	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),190		  SUNXI_FUNCTION(0x0, "gpio_in"),191		  SUNXI_FUNCTION(0x1, "gpio_out"),192		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */193		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */194	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 17),195		  SUNXI_FUNCTION(0x0, "gpio_in"),196		  SUNXI_FUNCTION(0x1, "gpio_out"),197		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE2 */198	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 18),199		  SUNXI_FUNCTION(0x0, "gpio_in"),200		  SUNXI_FUNCTION(0x1, "gpio_out"),201		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE3 */202	/* Hole */203	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),204		  SUNXI_FUNCTION(0x0, "gpio_in"),205		  SUNXI_FUNCTION(0x1, "gpio_out"),206		  SUNXI_FUNCTION(0x2, "lcd0")),		/* D0 */207	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),208		  SUNXI_FUNCTION(0x0, "gpio_in"),209		  SUNXI_FUNCTION(0x1, "gpio_out"),210		  SUNXI_FUNCTION(0x2, "lcd0")),		/* D1 */211	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),212		  SUNXI_FUNCTION(0x0, "gpio_in"),213		  SUNXI_FUNCTION(0x1, "gpio_out"),214		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */215		  SUNXI_FUNCTION(0x3, "mmc1")),		/* CLK */216	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),217		  SUNXI_FUNCTION(0x0, "gpio_in"),218		  SUNXI_FUNCTION(0x1, "gpio_out"),219		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */220		  SUNXI_FUNCTION(0x3, "mmc1")),		/* CMD */221	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),222		  SUNXI_FUNCTION(0x0, "gpio_in"),223		  SUNXI_FUNCTION(0x1, "gpio_out"),224		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */225		  SUNXI_FUNCTION(0x3, "mmc1")),		/* D0 */226	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),227		  SUNXI_FUNCTION(0x0, "gpio_in"),228		  SUNXI_FUNCTION(0x1, "gpio_out"),229		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */230		  SUNXI_FUNCTION(0x3, "mmc1")),		/* D1 */231	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),232		  SUNXI_FUNCTION(0x0, "gpio_in"),233		  SUNXI_FUNCTION(0x1, "gpio_out"),234		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */235		  SUNXI_FUNCTION(0x3, "mmc1")),		/* D2 */236	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),237		  SUNXI_FUNCTION(0x0, "gpio_in"),238		  SUNXI_FUNCTION(0x1, "gpio_out"),239		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */240		  SUNXI_FUNCTION(0x3, "mmc1")),		/* D3 */241	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),242		  SUNXI_FUNCTION(0x0, "gpio_in"),243		  SUNXI_FUNCTION(0x1, "gpio_out"),244		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D8 */245		  SUNXI_FUNCTION(0x3, "uart3")),	/* TX */246	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),247		  SUNXI_FUNCTION(0x0, "gpio_in"),248		  SUNXI_FUNCTION(0x1, "gpio_out"),249		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D9 */250		  SUNXI_FUNCTION(0x3, "uart3")),	/* RX */251	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),252		  SUNXI_FUNCTION(0x0, "gpio_in"),253		  SUNXI_FUNCTION(0x1, "gpio_out"),254		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */255		  SUNXI_FUNCTION(0x3, "uart1")),	/* TX */256	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),257		  SUNXI_FUNCTION(0x0, "gpio_in"),258		  SUNXI_FUNCTION(0x1, "gpio_out"),259		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */260		  SUNXI_FUNCTION(0x3, "uart1")),	/* RX */261	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),262		  SUNXI_FUNCTION(0x0, "gpio_in"),263		  SUNXI_FUNCTION(0x1, "gpio_out"),264		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */265		  SUNXI_FUNCTION(0x3, "uart1")),	/* RTS */266	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),267		  SUNXI_FUNCTION(0x0, "gpio_in"),268		  SUNXI_FUNCTION(0x1, "gpio_out"),269		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */270		  SUNXI_FUNCTION(0x3, "uart1")),	/* CTS */271	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),272		  SUNXI_FUNCTION(0x0, "gpio_in"),273		  SUNXI_FUNCTION(0x1, "gpio_out"),274		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */275		  SUNXI_FUNCTION(0x3, "i2s1")),		/* SYNC */276	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),277		  SUNXI_FUNCTION(0x0, "gpio_in"),278		  SUNXI_FUNCTION(0x1, "gpio_out"),279		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */280		  SUNXI_FUNCTION(0x3, "i2s1")),		/* CLK */281	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),282		  SUNXI_FUNCTION(0x0, "gpio_in"),283		  SUNXI_FUNCTION(0x1, "gpio_out"),284		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D16 */285		  SUNXI_FUNCTION(0x3, "i2s1")),		/* DOUT */286	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),287		  SUNXI_FUNCTION(0x0, "gpio_in"),288		  SUNXI_FUNCTION(0x1, "gpio_out"),289		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D17 */290		  SUNXI_FUNCTION(0x3, "i2s1")),		/* DIN */291	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),292		  SUNXI_FUNCTION(0x0, "gpio_in"),293		  SUNXI_FUNCTION(0x1, "gpio_out"),294		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */295		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VN0 */296	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),297		  SUNXI_FUNCTION(0x0, "gpio_in"),298		  SUNXI_FUNCTION(0x1, "gpio_out"),299		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */300		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VP0 */301	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),302		  SUNXI_FUNCTION(0x0, "gpio_in"),303		  SUNXI_FUNCTION(0x1, "gpio_out"),304		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */305		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VP1 */306	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),307		  SUNXI_FUNCTION(0x0, "gpio_in"),308		  SUNXI_FUNCTION(0x1, "gpio_out"),309		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */310		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VN1 */311	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),312		  SUNXI_FUNCTION(0x0, "gpio_in"),313		  SUNXI_FUNCTION(0x1, "gpio_out"),314		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */315		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VP2 */316	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),317		  SUNXI_FUNCTION(0x0, "gpio_in"),318		  SUNXI_FUNCTION(0x1, "gpio_out"),319		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */320		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VN2 */321	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24),322		  SUNXI_FUNCTION(0x0, "gpio_in"),323		  SUNXI_FUNCTION(0x1, "gpio_out"),324		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */325		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VPC */326	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 25),327		  SUNXI_FUNCTION(0x0, "gpio_in"),328		  SUNXI_FUNCTION(0x1, "gpio_out"),329		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */330		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VNC */331	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 26),332		  SUNXI_FUNCTION(0x0, "gpio_in"),333		  SUNXI_FUNCTION(0x1, "gpio_out"),334		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */335		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VP3 */336	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 27),337		  SUNXI_FUNCTION(0x0, "gpio_in"),338		  SUNXI_FUNCTION(0x1, "gpio_out"),339		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */340		  SUNXI_FUNCTION(0x3, "lvds0")),	/* VN3 */341	/* Hole */342	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),343		  SUNXI_FUNCTION(0x0, "gpio_in"),344		  SUNXI_FUNCTION(0x1, "gpio_out"),345		  SUNXI_FUNCTION(0x2, "csi")),		/* PCLK */346	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),347		  SUNXI_FUNCTION(0x0, "gpio_in"),348		  SUNXI_FUNCTION(0x1, "gpio_out"),349		  SUNXI_FUNCTION(0x2, "csi")),		/* MCLK */350	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),351		  SUNXI_FUNCTION(0x0, "gpio_in"),352		  SUNXI_FUNCTION(0x1, "gpio_out"),353		  SUNXI_FUNCTION(0x2, "csi")),		/* HSYNC */354	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),355		  SUNXI_FUNCTION(0x0, "gpio_in"),356		  SUNXI_FUNCTION(0x1, "gpio_out"),357		  SUNXI_FUNCTION(0x2, "csi")),		/* VSYNC */358	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),359		  SUNXI_FUNCTION(0x0, "gpio_in"),360		  SUNXI_FUNCTION(0x1, "gpio_out"),361		  SUNXI_FUNCTION(0x2, "csi")),		/* D0 */362	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),363		  SUNXI_FUNCTION(0x0, "gpio_in"),364		  SUNXI_FUNCTION(0x1, "gpio_out"),365		  SUNXI_FUNCTION(0x2, "csi")),		/* D1 */366	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),367		  SUNXI_FUNCTION(0x0, "gpio_in"),368		  SUNXI_FUNCTION(0x1, "gpio_out"),369		  SUNXI_FUNCTION(0x2, "csi")),		/* D2 */370	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),371		  SUNXI_FUNCTION(0x0, "gpio_in"),372		  SUNXI_FUNCTION(0x1, "gpio_out"),373		  SUNXI_FUNCTION(0x2, "csi")),		/* D3 */374	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),375		  SUNXI_FUNCTION(0x0, "gpio_in"),376		  SUNXI_FUNCTION(0x1, "gpio_out"),377		  SUNXI_FUNCTION(0x2, "csi")),		/* D4 */378	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),379		  SUNXI_FUNCTION(0x0, "gpio_in"),380		  SUNXI_FUNCTION(0x1, "gpio_out"),381		  SUNXI_FUNCTION(0x2, "csi")),		/* D5 */382	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),383		  SUNXI_FUNCTION(0x0, "gpio_in"),384		  SUNXI_FUNCTION(0x1, "gpio_out"),385		  SUNXI_FUNCTION(0x2, "csi")),		/* D6 */386	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),387		  SUNXI_FUNCTION(0x0, "gpio_in"),388		  SUNXI_FUNCTION(0x1, "gpio_out"),389		  SUNXI_FUNCTION(0x2, "csi")),		/* D7 */390	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),391		  SUNXI_FUNCTION(0x0, "gpio_in"),392		  SUNXI_FUNCTION(0x1, "gpio_out"),393		  SUNXI_FUNCTION(0x2, "csi"),		/* SCK */394		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SCK */395	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),396		  SUNXI_FUNCTION(0x0, "gpio_in"),397		  SUNXI_FUNCTION(0x1, "gpio_out"),398		  SUNXI_FUNCTION(0x2, "csi"),		/* SDA */399		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SDA */400	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),401		  SUNXI_FUNCTION(0x0, "gpio_in"),402		  SUNXI_FUNCTION(0x1, "gpio_out")),403	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),404		  SUNXI_FUNCTION(0x0, "gpio_in"),405		  SUNXI_FUNCTION(0x1, "gpio_out")),406	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),407		  SUNXI_FUNCTION(0x0, "gpio_in"),408		  SUNXI_FUNCTION(0x1, "gpio_out")),409	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),410		  SUNXI_FUNCTION(0x0, "gpio_in"),411		  SUNXI_FUNCTION(0x1, "gpio_out")),412	/* Hole */413	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),414		  SUNXI_FUNCTION(0x0, "gpio_in"),415		  SUNXI_FUNCTION(0x1, "gpio_out"),416		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */417		  SUNXI_FUNCTION(0x3, "jtag")),		/* MS1 */418	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),419		  SUNXI_FUNCTION(0x0, "gpio_in"),420		  SUNXI_FUNCTION(0x1, "gpio_out"),421		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */422		  SUNXI_FUNCTION(0x3, "jtag")),		/* DI1 */423	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),424		  SUNXI_FUNCTION(0x0, "gpio_in"),425		  SUNXI_FUNCTION(0x1, "gpio_out"),426		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */427		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */428	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),429		  SUNXI_FUNCTION(0x0, "gpio_in"),430		  SUNXI_FUNCTION(0x1, "gpio_out"),431		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */432		  SUNXI_FUNCTION(0x3, "jtag")),		/* DO1 */433	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),434		  SUNXI_FUNCTION(0x0, "gpio_in"),435		  SUNXI_FUNCTION(0x1, "gpio_out"),436		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */437		  SUNXI_FUNCTION(0x3, "uart0")),	/* RX */438	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),439		  SUNXI_FUNCTION(0x0, "gpio_in"),440		  SUNXI_FUNCTION(0x1, "gpio_out"),441		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */442		  SUNXI_FUNCTION(0x3, "jtag")),		/* CK1 */443	/* Hole */444	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),445		  SUNXI_FUNCTION(0x0, "gpio_in"),446		  SUNXI_FUNCTION(0x1, "gpio_out"),447		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */448		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 0)),	/* PG_EINT0 */449	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),450		  SUNXI_FUNCTION(0x0, "gpio_in"),451		  SUNXI_FUNCTION(0x1, "gpio_out"),452		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */453		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 1)),	/* PG_EINT1 */454	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),455		  SUNXI_FUNCTION(0x0, "gpio_in"),456		  SUNXI_FUNCTION(0x1, "gpio_out"),457		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */458		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 2)),	/* PG_EINT2 */459	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),460		  SUNXI_FUNCTION(0x0, "gpio_in"),461		  SUNXI_FUNCTION(0x1, "gpio_out"),462		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */463		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 3)),	/* PG_EINT3 */464	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),465		  SUNXI_FUNCTION(0x0, "gpio_in"),466		  SUNXI_FUNCTION(0x1, "gpio_out"),467		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */468		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 4)),	/* PG_EINT4 */469	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),470		  SUNXI_FUNCTION(0x0, "gpio_in"),471		  SUNXI_FUNCTION(0x1, "gpio_out"),472		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */473		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 5)),	/* PG_EINT5 */474	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),475		  SUNXI_FUNCTION(0x0, "gpio_in"),476		  SUNXI_FUNCTION(0x1, "gpio_out"),477		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */478		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 6)),	/* PG_EINT6 */479	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),480		  SUNXI_FUNCTION(0x0, "gpio_in"),481		  SUNXI_FUNCTION(0x1, "gpio_out"),482		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */483		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 7)),	/* PG_EINT7 */484	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),485		  SUNXI_FUNCTION(0x0, "gpio_in"),486		  SUNXI_FUNCTION(0x1, "gpio_out"),487		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */488		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 8)),	/* PG_EINT8 */489	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),490		  SUNXI_FUNCTION(0x0, "gpio_in"),491		  SUNXI_FUNCTION(0x1, "gpio_out"),492		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */493		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 9)),	/* PG_EINT9 */494	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),495		  SUNXI_FUNCTION(0x0, "gpio_in"),496		  SUNXI_FUNCTION(0x1, "gpio_out"),497		  SUNXI_FUNCTION(0x2, "i2s1"),		/* SYNC */498		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 10)),	/* PG_EINT10 */499	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),500		  SUNXI_FUNCTION(0x0, "gpio_in"),501		  SUNXI_FUNCTION(0x1, "gpio_out"),502		  SUNXI_FUNCTION(0x2, "i2s1"),		/* CLK */503		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 11)),	/* PG_EINT11 */504	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),505		  SUNXI_FUNCTION(0x0, "gpio_in"),506		  SUNXI_FUNCTION(0x1, "gpio_out"),507		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DOUT */508		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 12)),	/* PG_EINT12 */509	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),510		  SUNXI_FUNCTION(0x0, "gpio_in"),511		  SUNXI_FUNCTION(0x1, "gpio_out"),512		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DIN */513		  SUNXI_FUNCTION_IRQ_BANK(0x4, 2, 13)),	/* PG_EINT13 */514	/* Hole */515	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),516		  SUNXI_FUNCTION(0x0, "gpio_in"),517		  SUNXI_FUNCTION(0x1, "gpio_out"),518		  SUNXI_FUNCTION(0x2, "pwm0")),519	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),520		  SUNXI_FUNCTION(0x0, "gpio_in"),521		  SUNXI_FUNCTION(0x1, "gpio_out"),522		  SUNXI_FUNCTION(0x2, "pwm1")),523	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),524		  SUNXI_FUNCTION(0x0, "gpio_in"),525		  SUNXI_FUNCTION(0x1, "gpio_out"),526		  SUNXI_FUNCTION(0x2, "i2c0")),		/* SCK */527	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),528		  SUNXI_FUNCTION(0x0, "gpio_in"),529		  SUNXI_FUNCTION(0x1, "gpio_out"),530		  SUNXI_FUNCTION(0x2, "i2c0")),		/* SDA */531	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),532		  SUNXI_FUNCTION(0x0, "gpio_in"),533		  SUNXI_FUNCTION(0x1, "gpio_out"),534		  SUNXI_FUNCTION(0x2, "i2c1")),		/* SCK */535	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),536		  SUNXI_FUNCTION(0x0, "gpio_in"),537		  SUNXI_FUNCTION(0x1, "gpio_out"),538		  SUNXI_FUNCTION(0x2, "i2c1")),		/* SDA */539	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),540		  SUNXI_FUNCTION(0x0, "gpio_in"),541		  SUNXI_FUNCTION(0x1, "gpio_out"),542		  SUNXI_FUNCTION(0x2, "spi0"),		/* CS */543		  SUNXI_FUNCTION(0x3, "uart3")),	/* TX */544	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),545		  SUNXI_FUNCTION(0x0, "gpio_in"),546		  SUNXI_FUNCTION(0x1, "gpio_out"),547		  SUNXI_FUNCTION(0x2, "spi0"),		/* CLK */548		  SUNXI_FUNCTION(0x3, "uart3")),	/* RX */549	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),550		  SUNXI_FUNCTION(0x0, "gpio_in"),551		  SUNXI_FUNCTION(0x1, "gpio_out"),552		  SUNXI_FUNCTION(0x2, "spi0"),		/* DOUT */553		  SUNXI_FUNCTION(0x3, "uart3")),	/* RTS */554	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),555		  SUNXI_FUNCTION(0x0, "gpio_in"),556		  SUNXI_FUNCTION(0x1, "gpio_out"),557		  SUNXI_FUNCTION(0x2, "spi0"),		/* DIN */558		  SUNXI_FUNCTION(0x3, "uart3")),	/* CTS */559};560 561static const struct sunxi_pinctrl_desc sun8i_a23_pinctrl_data = {562	.pins = sun8i_a23_pins,563	.npins = ARRAY_SIZE(sun8i_a23_pins),564	.irq_banks = 3,565	.disable_strict_mode = true,566};567 568static int sun8i_a23_pinctrl_probe(struct platform_device *pdev)569{570	return sunxi_pinctrl_init(pdev,571				  &sun8i_a23_pinctrl_data);572}573 574static const struct of_device_id sun8i_a23_pinctrl_match[] = {575	{ .compatible = "allwinner,sun8i-a23-pinctrl", },576	{}577};578 579static struct platform_driver sun8i_a23_pinctrl_driver = {580	.probe	= sun8i_a23_pinctrl_probe,581	.driver	= {582		.name		= "sun8i-a23-pinctrl",583		.of_match_table	= sun8i_a23_pinctrl_match,584	},585};586builtin_platform_driver(sun8i_a23_pinctrl_driver);587