brintos

brintos / linux-shallow public Read only

0
0
Text · 22.8 KiB · 1c23ce9 Raw
601 lines · c
1/*2 * Allwinner A64 SoCs pinctrl driver.3 *4 * Copyright (C) 2016 - ARM Ltd.5 * Author: Andre Przywara <andre.przywara@arm.com>6 *7 * Based on pinctrl-sun7i-a20.c, which is:8 * Copyright (C) 2014 Maxime Ripard <maxime.ripard@free-electrons.com>9 *10 * This file is licensed under the terms of the GNU General Public11 * License version 2.  This program is licensed "as is" without any12 * warranty of any kind, whether express or implied.13 */14 15#include <linux/module.h>16#include <linux/platform_device.h>17#include <linux/of.h>18#include <linux/pinctrl/pinctrl.h>19 20#include "pinctrl-sunxi.h"21 22static const struct sunxi_desc_pin a64_pins[] = {23	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),24		  SUNXI_FUNCTION(0x0, "gpio_in"),25		  SUNXI_FUNCTION(0x1, "gpio_out"),26		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */27		  SUNXI_FUNCTION(0x4, "jtag"),		/* MS0 */28		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),	/* EINT0 */29	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),30		  SUNXI_FUNCTION(0x0, "gpio_in"),31		  SUNXI_FUNCTION(0x1, "gpio_out"),32		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */33		  SUNXI_FUNCTION(0x4, "jtag"),		/* CK0 */34		  SUNXI_FUNCTION(0x5, "sim"),		/* VCCEN */35		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),		/* EINT1 */36	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),37		  SUNXI_FUNCTION(0x0, "gpio_in"),38		  SUNXI_FUNCTION(0x1, "gpio_out"),39		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */40		  SUNXI_FUNCTION(0x4, "jtag"),		/* DO0 */41		  SUNXI_FUNCTION(0x5, "sim"),		/* VPPEN */42		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),		/* EINT2 */43	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),44		  SUNXI_FUNCTION(0x0, "gpio_in"),45		  SUNXI_FUNCTION(0x1, "gpio_out"),46		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */47		  SUNXI_FUNCTION(0x3, "i2s0"),		/* MCLK */48		  SUNXI_FUNCTION(0x4, "jtag"),		/* DI0 */49		  SUNXI_FUNCTION(0x5, "sim"),		/* VPPPP */50		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),		/* EINT3 */51	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),52		  SUNXI_FUNCTION(0x0, "gpio_in"),53		  SUNXI_FUNCTION(0x1, "gpio_out"),54		  SUNXI_FUNCTION(0x2, "aif2"),		/* SYNC */55		  SUNXI_FUNCTION(0x3, "i2s0"),		/* SYNC */56		  SUNXI_FUNCTION(0x5, "sim"),		/* CLK */57		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),		/* EINT4 */58	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),59		  SUNXI_FUNCTION(0x0, "gpio_in"),60		  SUNXI_FUNCTION(0x1, "gpio_out"),61		  SUNXI_FUNCTION(0x2, "aif2"),		/* BCLK */62		  SUNXI_FUNCTION(0x3, "i2s0"),		/* BCLK */63		  SUNXI_FUNCTION(0x5, "sim"),		/* DATA */64		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),		/* EINT5 */65	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),66		  SUNXI_FUNCTION(0x0, "gpio_in"),67		  SUNXI_FUNCTION(0x1, "gpio_out"),68		  SUNXI_FUNCTION(0x2, "aif2"),		/* DOUT */69		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DOUT */70		  SUNXI_FUNCTION(0x5, "sim"),		/* RST */71		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),		/* EINT6 */72	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),73		  SUNXI_FUNCTION(0x0, "gpio_in"),74		  SUNXI_FUNCTION(0x1, "gpio_out"),75		  SUNXI_FUNCTION(0x2, "aif2"),		/* DIN */76		  SUNXI_FUNCTION(0x3, "i2s0"),		/* DIN */77		  SUNXI_FUNCTION(0x5, "sim"),		/* DET */78		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),		/* EINT7 */79	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),80		  SUNXI_FUNCTION(0x0, "gpio_in"),81		  SUNXI_FUNCTION(0x1, "gpio_out"),82		  SUNXI_FUNCTION(0x4, "uart0"),		/* TX */83		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),		/* EINT8 */84	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),85		  SUNXI_FUNCTION(0x0, "gpio_in"),86		  SUNXI_FUNCTION(0x1, "gpio_out"),87		  SUNXI_FUNCTION(0x4, "uart0"),		/* RX */88		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),		/* EINT9 */89	/* Hole */90	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),91		  SUNXI_FUNCTION(0x0, "gpio_in"),92		  SUNXI_FUNCTION(0x1, "gpio_out"),93		  SUNXI_FUNCTION(0x2, "nand0"),		/* NWE */94		  SUNXI_FUNCTION(0x4, "spi0")),		/* MOSI */95	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),96		  SUNXI_FUNCTION(0x0, "gpio_in"),97		  SUNXI_FUNCTION(0x1, "gpio_out"),98		  SUNXI_FUNCTION(0x2, "nand0"),		/* NALE */99		  SUNXI_FUNCTION(0x3, "mmc2"),		/* DS */100		  SUNXI_FUNCTION(0x4, "spi0")),		/* MISO */101	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),102		  SUNXI_FUNCTION(0x0, "gpio_in"),103		  SUNXI_FUNCTION(0x1, "gpio_out"),104		  SUNXI_FUNCTION(0x2, "nand0"),		/* NCLE */105		  SUNXI_FUNCTION(0x4, "spi0")),		/* SCK */106	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),107		  SUNXI_FUNCTION(0x0, "gpio_in"),108		  SUNXI_FUNCTION(0x1, "gpio_out"),109		  SUNXI_FUNCTION(0x2, "nand0"),		/* NCE1 */110		  SUNXI_FUNCTION(0x4, "spi0")),		/* CS */111	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),112		  SUNXI_FUNCTION(0x0, "gpio_in"),113		  SUNXI_FUNCTION(0x1, "gpio_out"),114		  SUNXI_FUNCTION(0x2, "nand0")),	/* NCE0 */115	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),116		  SUNXI_FUNCTION(0x0, "gpio_in"),117		  SUNXI_FUNCTION(0x1, "gpio_out"),118		  SUNXI_FUNCTION(0x2, "nand0"),		/* NRE# */119		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */120	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),121		  SUNXI_FUNCTION(0x0, "gpio_in"),122		  SUNXI_FUNCTION(0x1, "gpio_out"),123		  SUNXI_FUNCTION(0x2, "nand0"),		/* NRB0 */124		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CMD */125	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),126		  SUNXI_FUNCTION(0x0, "gpio_in"),127		  SUNXI_FUNCTION(0x1, "gpio_out"),128		  SUNXI_FUNCTION(0x2, "nand0")),	/* NRB1 */129	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),130		  SUNXI_FUNCTION(0x0, "gpio_in"),131		  SUNXI_FUNCTION(0x1, "gpio_out"),132		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ0 */133		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D0 */134	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),135		  SUNXI_FUNCTION(0x0, "gpio_in"),136		  SUNXI_FUNCTION(0x1, "gpio_out"),137		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ1 */138		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D1 */139	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),140		  SUNXI_FUNCTION(0x0, "gpio_in"),141		  SUNXI_FUNCTION(0x1, "gpio_out"),142		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ2 */143		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */144	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),145		  SUNXI_FUNCTION(0x0, "gpio_in"),146		  SUNXI_FUNCTION(0x1, "gpio_out"),147		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ3 */148		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */149	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),150		  SUNXI_FUNCTION(0x0, "gpio_in"),151		  SUNXI_FUNCTION(0x1, "gpio_out"),152		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ4 */153		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */154	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),155		  SUNXI_FUNCTION(0x0, "gpio_in"),156		  SUNXI_FUNCTION(0x1, "gpio_out"),157		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ5 */158		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */159	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),160		  SUNXI_FUNCTION(0x0, "gpio_in"),161		  SUNXI_FUNCTION(0x1, "gpio_out"),162		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ6 */163		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */164	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),165		  SUNXI_FUNCTION(0x0, "gpio_in"),166		  SUNXI_FUNCTION(0x1, "gpio_out"),167		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQ7 */168		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */169	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),170		  SUNXI_FUNCTION(0x0, "gpio_in"),171		  SUNXI_FUNCTION(0x1, "gpio_out"),172		  SUNXI_FUNCTION(0x2, "nand0"),		/* NDQS */173		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */174	/* Hole */175	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),176		  SUNXI_FUNCTION(0x0, "gpio_in"),177		  SUNXI_FUNCTION(0x1, "gpio_out"),178		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */179		  SUNXI_FUNCTION(0x3, "uart3"),		/* TX */180		  SUNXI_FUNCTION(0x4, "spi1"),		/* CS */181		  SUNXI_FUNCTION(0x5, "ccir")),		/* CLK */182	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),183		  SUNXI_FUNCTION(0x0, "gpio_in"),184		  SUNXI_FUNCTION(0x1, "gpio_out"),185		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */186		  SUNXI_FUNCTION(0x3, "uart3"),		/* RX */187		  SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */188		  SUNXI_FUNCTION(0x5, "ccir")),		/* DE */189	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),190		  SUNXI_FUNCTION(0x0, "gpio_in"),191		  SUNXI_FUNCTION(0x1, "gpio_out"),192		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */193		  SUNXI_FUNCTION(0x3, "uart4"),		/* TX */194		  SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */195		  SUNXI_FUNCTION(0x5, "ccir")),		/* HSYNC */196	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),197		  SUNXI_FUNCTION(0x0, "gpio_in"),198		  SUNXI_FUNCTION(0x1, "gpio_out"),199		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */200		  SUNXI_FUNCTION(0x3, "uart4"),		/* RX */201		  SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */202		  SUNXI_FUNCTION(0x5, "ccir")),		/* VSYNC */203	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),204		  SUNXI_FUNCTION(0x0, "gpio_in"),205		  SUNXI_FUNCTION(0x1, "gpio_out"),206		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */207		  SUNXI_FUNCTION(0x3, "uart4"),		/* RTS */208		  SUNXI_FUNCTION(0x5, "ccir")),		/* D0 */209	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),210		  SUNXI_FUNCTION(0x0, "gpio_in"),211		  SUNXI_FUNCTION(0x1, "gpio_out"),212		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */213		  SUNXI_FUNCTION(0x3, "uart4"),		/* CTS */214		  SUNXI_FUNCTION(0x5, "ccir")),		/* D1 */215	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),216		  SUNXI_FUNCTION(0x0, "gpio_in"),217		  SUNXI_FUNCTION(0x1, "gpio_out"),218		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */219		  SUNXI_FUNCTION(0x5, "ccir")),		/* D2 */220	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),221		  SUNXI_FUNCTION(0x0, "gpio_in"),222		  SUNXI_FUNCTION(0x1, "gpio_out"),223		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */224		  SUNXI_FUNCTION(0x5, "ccir")),		/* D3 */225	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),226		  SUNXI_FUNCTION(0x0, "gpio_in"),227		  SUNXI_FUNCTION(0x1, "gpio_out"),228		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */229		  SUNXI_FUNCTION(0x4, "emac"),		/* ERXD3 */230		  SUNXI_FUNCTION(0x5, "ccir")),		/* D4 */231	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),232		  SUNXI_FUNCTION(0x0, "gpio_in"),233		  SUNXI_FUNCTION(0x1, "gpio_out"),234		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */235		  SUNXI_FUNCTION(0x4, "emac"),		/* ERXD2 */236		  SUNXI_FUNCTION(0x5, "ccir")),		/* D5 */237	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),238		  SUNXI_FUNCTION(0x0, "gpio_in"),239		  SUNXI_FUNCTION(0x1, "gpio_out"),240		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */241		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXD1 */242	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),243		  SUNXI_FUNCTION(0x0, "gpio_in"),244		  SUNXI_FUNCTION(0x1, "gpio_out"),245		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */246		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXD0 */247	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),248		  SUNXI_FUNCTION(0x0, "gpio_in"),249		  SUNXI_FUNCTION(0x1, "gpio_out"),250		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */251		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP0 */252		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXCK */253	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),254		  SUNXI_FUNCTION(0x0, "gpio_in"),255		  SUNXI_FUNCTION(0x1, "gpio_out"),256		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */257		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN0 */258		  SUNXI_FUNCTION(0x4, "emac")),		/* ERXCTL */259	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),260		  SUNXI_FUNCTION(0x0, "gpio_in"),261		  SUNXI_FUNCTION(0x1, "gpio_out"),262		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */263		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP1 */264		  SUNXI_FUNCTION(0x4, "emac")),		/* ENULL */265	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),266		  SUNXI_FUNCTION(0x0, "gpio_in"),267		  SUNXI_FUNCTION(0x1, "gpio_out"),268		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */269		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN1 */270		  SUNXI_FUNCTION(0x4, "emac"),		/* ETXD3 */271		  SUNXI_FUNCTION(0x5, "ccir")),		/* D6 */272	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),273		  SUNXI_FUNCTION(0x0, "gpio_in"),274		  SUNXI_FUNCTION(0x1, "gpio_out"),275		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */276		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP2 */277		  SUNXI_FUNCTION(0x4, "emac"),		/* ETXD2 */278		  SUNXI_FUNCTION(0x5, "ccir")),		/* D7 */279	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),280		  SUNXI_FUNCTION(0x0, "gpio_in"),281		  SUNXI_FUNCTION(0x1, "gpio_out"),282		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */283		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN2 */284		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXD1 */285	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),286		  SUNXI_FUNCTION(0x0, "gpio_in"),287		  SUNXI_FUNCTION(0x1, "gpio_out"),288		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */289		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VPC */290		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXD0 */291	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),292		  SUNXI_FUNCTION(0x0, "gpio_in"),293		  SUNXI_FUNCTION(0x1, "gpio_out"),294		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */295		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VNC */296		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXCK */297	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),298		  SUNXI_FUNCTION(0x0, "gpio_in"),299		  SUNXI_FUNCTION(0x1, "gpio_out"),300		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */301		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VP3 */302		  SUNXI_FUNCTION(0x4, "emac")),		/* ETXCTL */303	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),304		  SUNXI_FUNCTION(0x0, "gpio_in"),305		  SUNXI_FUNCTION(0x1, "gpio_out"),306		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */307		  SUNXI_FUNCTION(0x3, "lvds0"),		/* VN3 */308		  SUNXI_FUNCTION(0x4, "emac")),		/* ECLKIN */309	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),310		  SUNXI_FUNCTION(0x0, "gpio_in"),311		  SUNXI_FUNCTION(0x1, "gpio_out"),312		  SUNXI_FUNCTION(0x2, "pwm"),		/* PWM0 */313		  SUNXI_FUNCTION(0x4, "emac")),		/* EMDC */314	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),315		  SUNXI_FUNCTION(0x0, "gpio_in"),316		  SUNXI_FUNCTION(0x1, "gpio_out"),317		  SUNXI_FUNCTION(0x4, "emac")),		/* EMDIO */318	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24),319		  SUNXI_FUNCTION(0x0, "gpio_in"),320		  SUNXI_FUNCTION(0x1, "gpio_out")),321	/* Hole */322	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),323		  SUNXI_FUNCTION(0x0, "gpio_in"),324		  SUNXI_FUNCTION(0x1, "gpio_out"),325		  SUNXI_FUNCTION(0x2, "csi"),		/* PCK */326		  SUNXI_FUNCTION(0x4, "ts")),		/* CLK */327	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),328		  SUNXI_FUNCTION(0x0, "gpio_in"),329		  SUNXI_FUNCTION(0x1, "gpio_out"),330		  SUNXI_FUNCTION(0x2, "csi"),		/* CK */331		  SUNXI_FUNCTION(0x4, "ts")),		/* ERR */332	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),333		  SUNXI_FUNCTION(0x0, "gpio_in"),334		  SUNXI_FUNCTION(0x1, "gpio_out"),335		  SUNXI_FUNCTION(0x2, "csi"),		/* HSYNC */336		  SUNXI_FUNCTION(0x4, "ts")),		/* SYNC */337	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),338		  SUNXI_FUNCTION(0x0, "gpio_in"),339		  SUNXI_FUNCTION(0x1, "gpio_out"),340		  SUNXI_FUNCTION(0x2, "csi"),		/* VSYNC */341		  SUNXI_FUNCTION(0x4, "ts")),		/* DVLD */342	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),343		  SUNXI_FUNCTION(0x0, "gpio_in"),344		  SUNXI_FUNCTION(0x1, "gpio_out"),345		  SUNXI_FUNCTION(0x2, "csi"),		/* D0 */346		  SUNXI_FUNCTION(0x4, "ts")),		/* D0 */347	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),348		  SUNXI_FUNCTION(0x0, "gpio_in"),349		  SUNXI_FUNCTION(0x1, "gpio_out"),350		  SUNXI_FUNCTION(0x2, "csi"),		/* D1 */351		  SUNXI_FUNCTION(0x4, "ts")),		/* D1 */352	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),353		  SUNXI_FUNCTION(0x0, "gpio_in"),354		  SUNXI_FUNCTION(0x1, "gpio_out"),355		  SUNXI_FUNCTION(0x2, "csi"),		/* D2 */356		  SUNXI_FUNCTION(0x4, "ts")),		/* D2 */357	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),358		  SUNXI_FUNCTION(0x0, "gpio_in"),359		  SUNXI_FUNCTION(0x1, "gpio_out"),360		  SUNXI_FUNCTION(0x2, "csi"),		/* D3 */361		  SUNXI_FUNCTION(0x4, "ts")),		/* D3 */362	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),363		  SUNXI_FUNCTION(0x0, "gpio_in"),364		  SUNXI_FUNCTION(0x1, "gpio_out"),365		  SUNXI_FUNCTION(0x2, "csi"),		/* D4 */366		  SUNXI_FUNCTION(0x4, "ts")),		/* D4 */367	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),368		  SUNXI_FUNCTION(0x0, "gpio_in"),369		  SUNXI_FUNCTION(0x1, "gpio_out"),370		  SUNXI_FUNCTION(0x2, "csi"),		/* D5 */371		  SUNXI_FUNCTION(0x4, "ts")),		/* D5 */372	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),373		  SUNXI_FUNCTION(0x0, "gpio_in"),374		  SUNXI_FUNCTION(0x1, "gpio_out"),375		  SUNXI_FUNCTION(0x2, "csi"),		/* D6 */376		  SUNXI_FUNCTION(0x4, "ts")),		/* D6 */377	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),378		  SUNXI_FUNCTION(0x0, "gpio_in"),379		  SUNXI_FUNCTION(0x1, "gpio_out"),380		  SUNXI_FUNCTION(0x2, "csi"),		/* D7 */381		  SUNXI_FUNCTION(0x4, "ts")),		/* D7 */382	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),383		  SUNXI_FUNCTION(0x0, "gpio_in"),384		  SUNXI_FUNCTION(0x1, "gpio_out"),385		  SUNXI_FUNCTION(0x2, "csi")),		/* SCK */386	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),387		  SUNXI_FUNCTION(0x0, "gpio_in"),388		  SUNXI_FUNCTION(0x1, "gpio_out"),389		  SUNXI_FUNCTION(0x2, "csi")),		/* SDA */390	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),391		  SUNXI_FUNCTION(0x0, "gpio_in"),392		  SUNXI_FUNCTION(0x1, "gpio_out"),393		  SUNXI_FUNCTION(0x2, "pll"),		/* LOCK_DBG */394		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SCK */395	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),396		  SUNXI_FUNCTION(0x0, "gpio_in"),397		  SUNXI_FUNCTION(0x1, "gpio_out"),398		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SDA */399	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),400		  SUNXI_FUNCTION(0x0, "gpio_in"),401		  SUNXI_FUNCTION(0x1, "gpio_out")),402	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),403		  SUNXI_FUNCTION(0x0, "gpio_in"),404		  SUNXI_FUNCTION(0x1, "gpio_out")),405	/* Hole */406	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),407		  SUNXI_FUNCTION(0x0, "gpio_in"),408		  SUNXI_FUNCTION(0x1, "gpio_out"),409		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */410		  SUNXI_FUNCTION(0x3, "jtag")),		/* MSI */411	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),412		  SUNXI_FUNCTION(0x0, "gpio_in"),413		  SUNXI_FUNCTION(0x1, "gpio_out"),414		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */415		  SUNXI_FUNCTION(0x3, "jtag")),		/* DI1 */416	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),417		  SUNXI_FUNCTION(0x0, "gpio_in"),418		  SUNXI_FUNCTION(0x1, "gpio_out"),419		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */420		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */421	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),422		  SUNXI_FUNCTION(0x0, "gpio_in"),423		  SUNXI_FUNCTION(0x1, "gpio_out"),424		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */425		  SUNXI_FUNCTION(0x3, "jtag")),		/* DO1 */426	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),427		  SUNXI_FUNCTION(0x0, "gpio_in"),428		  SUNXI_FUNCTION(0x1, "gpio_out"),429		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */430		  SUNXI_FUNCTION(0x3, "uart0")),	/* RX */431	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),432		  SUNXI_FUNCTION(0x0, "gpio_in"),433		  SUNXI_FUNCTION(0x1, "gpio_out"),434		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */435		  SUNXI_FUNCTION(0x3, "jtag")),		/* CK1 */436	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),437		  SUNXI_FUNCTION(0x0, "gpio_in"),438		  SUNXI_FUNCTION(0x1, "gpio_out")),439	/* Hole */440	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),441		  SUNXI_FUNCTION(0x0, "gpio_in"),442		  SUNXI_FUNCTION(0x1, "gpio_out"),443		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */444		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),	/* EINT0 */445	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),446		  SUNXI_FUNCTION(0x0, "gpio_in"),447		  SUNXI_FUNCTION(0x1, "gpio_out"),448		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */449		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),	/* EINT1 */450	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),451		  SUNXI_FUNCTION(0x0, "gpio_in"),452		  SUNXI_FUNCTION(0x1, "gpio_out"),453		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */454		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),	/* EINT2 */455	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),456		  SUNXI_FUNCTION(0x0, "gpio_in"),457		  SUNXI_FUNCTION(0x1, "gpio_out"),458		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */459		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),	/* EINT3 */460	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),461		  SUNXI_FUNCTION(0x0, "gpio_in"),462		  SUNXI_FUNCTION(0x1, "gpio_out"),463		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */464		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),	/* EINT4 */465	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),466		  SUNXI_FUNCTION(0x0, "gpio_in"),467		  SUNXI_FUNCTION(0x1, "gpio_out"),468		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */469		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),	/* EINT5 */470	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),471		  SUNXI_FUNCTION(0x0, "gpio_in"),472		  SUNXI_FUNCTION(0x1, "gpio_out"),473		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */474		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),	/* EINT6 */475	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),476		  SUNXI_FUNCTION(0x0, "gpio_in"),477		  SUNXI_FUNCTION(0x1, "gpio_out"),478		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */479		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),	/* EINT7 */480	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),481		  SUNXI_FUNCTION(0x0, "gpio_in"),482		  SUNXI_FUNCTION(0x1, "gpio_out"),483		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */484		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),	/* EINT8 */485	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),486		  SUNXI_FUNCTION(0x0, "gpio_in"),487		  SUNXI_FUNCTION(0x1, "gpio_out"),488		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */489		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),	/* EINT9 */490	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),491		  SUNXI_FUNCTION(0x0, "gpio_in"),492		  SUNXI_FUNCTION(0x1, "gpio_out"),493		  SUNXI_FUNCTION(0x2, "aif3"),		/* SYNC */494		  SUNXI_FUNCTION(0x3, "i2s1"),		/* SYNC */495		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),	/* EINT10 */496	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),497		  SUNXI_FUNCTION(0x0, "gpio_in"),498		  SUNXI_FUNCTION(0x1, "gpio_out"),499		  SUNXI_FUNCTION(0x2, "aif3"),		/* BCLK */500		  SUNXI_FUNCTION(0x3, "i2s1"),		/* BCLK */501		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),	/* EINT11 */502	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),503		  SUNXI_FUNCTION(0x0, "gpio_in"),504		  SUNXI_FUNCTION(0x1, "gpio_out"),505		  SUNXI_FUNCTION(0x2, "aif3"),		/* DOUT */506		  SUNXI_FUNCTION(0x3, "i2s1"),		/* DOUT */507		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),	/* EINT12 */508	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),509		  SUNXI_FUNCTION(0x0, "gpio_in"),510		  SUNXI_FUNCTION(0x1, "gpio_out"),511		  SUNXI_FUNCTION(0x2, "aif3"),		/* DIN */512		  SUNXI_FUNCTION(0x3, "i2s1"),		/* DIN */513		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),	/* 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, "i2c0"),		/* SCK */519		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),	/* EINT0 */520	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),521		  SUNXI_FUNCTION(0x0, "gpio_in"),522		  SUNXI_FUNCTION(0x1, "gpio_out"),523		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */524		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),	/* EINT1 */525	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),526		  SUNXI_FUNCTION(0x0, "gpio_in"),527		  SUNXI_FUNCTION(0x1, "gpio_out"),528		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */529		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),	/* EINT2 */530	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),531		  SUNXI_FUNCTION(0x0, "gpio_in"),532		  SUNXI_FUNCTION(0x1, "gpio_out"),533		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */534		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),	/* EINT3 */535	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),536		  SUNXI_FUNCTION(0x0, "gpio_in"),537		  SUNXI_FUNCTION(0x1, "gpio_out"),538		  SUNXI_FUNCTION(0x2, "uart3"),		/* TX */539		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),	/* EINT4 */540	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),541		  SUNXI_FUNCTION(0x0, "gpio_in"),542		  SUNXI_FUNCTION(0x1, "gpio_out"),543		  SUNXI_FUNCTION(0x2, "uart3"),		/* RX */544		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),	/* EINT5 */545	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),546		  SUNXI_FUNCTION(0x0, "gpio_in"),547		  SUNXI_FUNCTION(0x1, "gpio_out"),548		  SUNXI_FUNCTION(0x2, "uart3"),		/* RTS */549		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),	/* EINT6 */550	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),551		  SUNXI_FUNCTION(0x0, "gpio_in"),552		  SUNXI_FUNCTION(0x1, "gpio_out"),553		  SUNXI_FUNCTION(0x2, "uart3"),		/* CTS */554		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),	/* EINT7 */555	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),556		  SUNXI_FUNCTION(0x0, "gpio_in"),557		  SUNXI_FUNCTION(0x1, "gpio_out"),558		  SUNXI_FUNCTION(0x2, "spdif"),		/* OUT */559		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),	/* EINT8 */560	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),561		  SUNXI_FUNCTION(0x0, "gpio_in"),562		  SUNXI_FUNCTION(0x1, "gpio_out"),563		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),	/* EINT9 */564	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),565		  SUNXI_FUNCTION(0x0, "gpio_in"),566		  SUNXI_FUNCTION(0x1, "gpio_out"),567		  SUNXI_FUNCTION(0x2, "mic"),		/* CLK */568		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),	/* EINT10 */569	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11),570		  SUNXI_FUNCTION(0x0, "gpio_in"),571		  SUNXI_FUNCTION(0x1, "gpio_out"),572		  SUNXI_FUNCTION(0x2, "mic"),		/* DATA */573		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),	/* EINT11 */574};575 576static const struct sunxi_pinctrl_desc a64_pinctrl_data = {577	.pins = a64_pins,578	.npins = ARRAY_SIZE(a64_pins),579	.irq_banks = 3,580};581 582static int a64_pinctrl_probe(struct platform_device *pdev)583{584	return sunxi_pinctrl_init(pdev,585				  &a64_pinctrl_data);586}587 588static const struct of_device_id a64_pinctrl_match[] = {589	{ .compatible = "allwinner,sun50i-a64-pinctrl", },590	{}591};592 593static struct platform_driver a64_pinctrl_driver = {594	.probe	= a64_pinctrl_probe,595	.driver	= {596		.name		= "sun50i-a64-pinctrl",597		.of_match_table	= a64_pinctrl_match,598	},599};600builtin_platform_driver(a64_pinctrl_driver);601