cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pinctrl-sun8i-a33.c (19591B)


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