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-h3.c (20018B)


      1/*
      2 * Allwinner H3 SoCs pinctrl driver.
      3 *
      4 * Copyright (C) 2015 Jens Kuske <jenskuske@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/module.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_h3_pins[] = {
     24	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),
     25		  SUNXI_FUNCTION(0x0, "gpio_in"),
     26		  SUNXI_FUNCTION(0x1, "gpio_out"),
     27		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
     28		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS */
     29		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),	/* PA_EINT0 */
     30	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
     31		  SUNXI_FUNCTION(0x0, "gpio_in"),
     32		  SUNXI_FUNCTION(0x1, "gpio_out"),
     33		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
     34		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
     35		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),	/* PA_EINT1 */
     36	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
     37		  SUNXI_FUNCTION(0x0, "gpio_in"),
     38		  SUNXI_FUNCTION(0x1, "gpio_out"),
     39		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */
     40		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
     41		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),	/* PA_EINT2 */
     42	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
     43		  SUNXI_FUNCTION(0x0, "gpio_in"),
     44		  SUNXI_FUNCTION(0x1, "gpio_out"),
     45		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */
     46		  SUNXI_FUNCTION(0x3, "jtag"),		/* DI */
     47		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),	/* PA_EINT3 */
     48	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4),
     49		  SUNXI_FUNCTION(0x0, "gpio_in"),
     50		  SUNXI_FUNCTION(0x1, "gpio_out"),
     51		  SUNXI_FUNCTION(0x2, "uart0"),		/* TX */
     52		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),	/* PA_EINT4 */
     53	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5),
     54		  SUNXI_FUNCTION(0x0, "gpio_in"),
     55		  SUNXI_FUNCTION(0x1, "gpio_out"),
     56		  SUNXI_FUNCTION(0x2, "uart0"),		/* RX */
     57		  SUNXI_FUNCTION(0x3, "pwm0"),
     58		  SUNXI_FUNCTION_IRQ_BANK(0x6, 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, "sim"),		/* PWREN */
     63		  SUNXI_FUNCTION_IRQ_BANK(0x6, 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, "sim"),		/* CLK */
     68		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),	/* PA_EINT7 */
     69	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8),
     70		  SUNXI_FUNCTION(0x0, "gpio_in"),
     71		  SUNXI_FUNCTION(0x1, "gpio_out"),
     72		  SUNXI_FUNCTION(0x2, "sim"),		/* DATA */
     73		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),	/* PA_EINT8 */
     74	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9),
     75		  SUNXI_FUNCTION(0x0, "gpio_in"),
     76		  SUNXI_FUNCTION(0x1, "gpio_out"),
     77		  SUNXI_FUNCTION(0x2, "sim"),		/* RST */
     78		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),	/* PA_EINT9 */
     79	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 10),
     80		  SUNXI_FUNCTION(0x0, "gpio_in"),
     81		  SUNXI_FUNCTION(0x1, "gpio_out"),
     82		  SUNXI_FUNCTION(0x2, "sim"),		/* DET */
     83		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),	/* PA_EINT10 */
     84	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 11),
     85		  SUNXI_FUNCTION(0x0, "gpio_in"),
     86		  SUNXI_FUNCTION(0x1, "gpio_out"),
     87		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
     88		  SUNXI_FUNCTION(0x3, "di"),		/* TX */
     89		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),	/* PA_EINT11 */
     90	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 12),
     91		  SUNXI_FUNCTION(0x0, "gpio_in"),
     92		  SUNXI_FUNCTION(0x1, "gpio_out"),
     93		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
     94		  SUNXI_FUNCTION(0x3, "di"),		/* RX */
     95		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)),	/* PA_EINT12 */
     96	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 13),
     97		  SUNXI_FUNCTION(0x0, "gpio_in"),
     98		  SUNXI_FUNCTION(0x1, "gpio_out"),
     99		  SUNXI_FUNCTION(0x2, "spi1"),		/* CS */
    100		  SUNXI_FUNCTION(0x3, "uart3"),		/* TX */
    101		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)),	/* PA_EINT13 */
    102	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 14),
    103		  SUNXI_FUNCTION(0x0, "gpio_in"),
    104		  SUNXI_FUNCTION(0x1, "gpio_out"),
    105		  SUNXI_FUNCTION(0x2, "spi1"),		/* CLK */
    106		  SUNXI_FUNCTION(0x3, "uart3"),		/* RX */
    107		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),	/* PA_EINT14 */
    108	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 15),
    109		  SUNXI_FUNCTION(0x0, "gpio_in"),
    110		  SUNXI_FUNCTION(0x1, "gpio_out"),
    111		  SUNXI_FUNCTION(0x2, "spi1"),		/* MOSI */
    112		  SUNXI_FUNCTION(0x3, "uart3"),		/* RTS */
    113		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),	/* PA_EINT15 */
    114	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 16),
    115		  SUNXI_FUNCTION(0x0, "gpio_in"),
    116		  SUNXI_FUNCTION(0x1, "gpio_out"),
    117		  SUNXI_FUNCTION(0x2, "spi1"),		/* MISO */
    118		  SUNXI_FUNCTION(0x3, "uart3"),		/* CTS */
    119		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),	/* PA_EINT16 */
    120	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 17),
    121		  SUNXI_FUNCTION(0x0, "gpio_in"),
    122		  SUNXI_FUNCTION(0x1, "gpio_out"),
    123		  SUNXI_FUNCTION(0x2, "spdif"),		/* OUT */
    124		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)),	/* PA_EINT17 */
    125	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 18),
    126		  SUNXI_FUNCTION(0x0, "gpio_in"),
    127		  SUNXI_FUNCTION(0x1, "gpio_out"),
    128		  SUNXI_FUNCTION(0x2, "i2s0"),		/* SYNC */
    129		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SCK */
    130		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)),	/* PA_EINT18 */
    131	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 19),
    132		  SUNXI_FUNCTION(0x0, "gpio_in"),
    133		  SUNXI_FUNCTION(0x1, "gpio_out"),
    134		  SUNXI_FUNCTION(0x2, "i2s0"),		/* CLK */
    135		  SUNXI_FUNCTION(0x3, "i2c1"),		/* SDA */
    136		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)),	/* PA_EINT19 */
    137	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 20),
    138		  SUNXI_FUNCTION(0x0, "gpio_in"),
    139		  SUNXI_FUNCTION(0x1, "gpio_out"),
    140		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DOUT */
    141		  SUNXI_FUNCTION(0x3, "sim"),		/* VPPEN */
    142		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)),	/* PA_EINT20 */
    143	SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 21),
    144		  SUNXI_FUNCTION(0x0, "gpio_in"),
    145		  SUNXI_FUNCTION(0x1, "gpio_out"),
    146		  SUNXI_FUNCTION(0x2, "i2s0"),		/* DIN */
    147		  SUNXI_FUNCTION(0x3, "sim"),		/* VPPPP */
    148		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)),	/* PA_EINT21 */
    149	/* Hole */
    150	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
    151		  SUNXI_FUNCTION(0x0, "gpio_in"),
    152		  SUNXI_FUNCTION(0x1, "gpio_out"),
    153		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */
    154		  SUNXI_FUNCTION(0x3, "spi0")),		/* MOSI */
    155	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
    156		  SUNXI_FUNCTION(0x0, "gpio_in"),
    157		  SUNXI_FUNCTION(0x1, "gpio_out"),
    158		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */
    159		  SUNXI_FUNCTION(0x3, "spi0")),		/* MISO */
    160	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
    161		  SUNXI_FUNCTION(0x0, "gpio_in"),
    162		  SUNXI_FUNCTION(0x1, "gpio_out"),
    163		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */
    164		  SUNXI_FUNCTION(0x3, "spi0")),		/* CLK */
    165	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
    166		  SUNXI_FUNCTION(0x0, "gpio_in"),
    167		  SUNXI_FUNCTION(0x1, "gpio_out"),
    168		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE1 */
    169		  SUNXI_FUNCTION(0x3, "spi0")),		/* CS */
    170	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
    171		  SUNXI_FUNCTION(0x0, "gpio_in"),
    172		  SUNXI_FUNCTION(0x1, "gpio_out"),
    173		  SUNXI_FUNCTION(0x2, "nand0")),	/* CE0 */
    174	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
    175		  SUNXI_FUNCTION(0x0, "gpio_in"),
    176		  SUNXI_FUNCTION(0x1, "gpio_out"),
    177		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */
    178		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CLK */
    179	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
    180		  SUNXI_FUNCTION(0x0, "gpio_in"),
    181		  SUNXI_FUNCTION(0x1, "gpio_out"),
    182		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */
    183		  SUNXI_FUNCTION(0x3, "mmc2")),		/* CMD */
    184	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
    185		  SUNXI_FUNCTION(0x0, "gpio_in"),
    186		  SUNXI_FUNCTION(0x1, "gpio_out"),
    187		  SUNXI_FUNCTION(0x2, "nand0")),	/* RB1 */
    188	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
    189		  SUNXI_FUNCTION(0x0, "gpio_in"),
    190		  SUNXI_FUNCTION(0x1, "gpio_out"),
    191		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */
    192		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D0 */
    193	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
    194		  SUNXI_FUNCTION(0x0, "gpio_in"),
    195		  SUNXI_FUNCTION(0x1, "gpio_out"),
    196		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */
    197		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D1 */
    198	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
    199		  SUNXI_FUNCTION(0x0, "gpio_in"),
    200		  SUNXI_FUNCTION(0x1, "gpio_out"),
    201		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */
    202		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D2 */
    203	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
    204		  SUNXI_FUNCTION(0x0, "gpio_in"),
    205		  SUNXI_FUNCTION(0x1, "gpio_out"),
    206		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */
    207		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D3 */
    208	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
    209		  SUNXI_FUNCTION(0x0, "gpio_in"),
    210		  SUNXI_FUNCTION(0x1, "gpio_out"),
    211		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */
    212		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D4 */
    213	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
    214		  SUNXI_FUNCTION(0x0, "gpio_in"),
    215		  SUNXI_FUNCTION(0x1, "gpio_out"),
    216		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */
    217		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D5 */
    218	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
    219		  SUNXI_FUNCTION(0x0, "gpio_in"),
    220		  SUNXI_FUNCTION(0x1, "gpio_out"),
    221		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */
    222		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D6 */
    223	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
    224		  SUNXI_FUNCTION(0x0, "gpio_in"),
    225		  SUNXI_FUNCTION(0x1, "gpio_out"),
    226		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */
    227		  SUNXI_FUNCTION(0x3, "mmc2")),		/* D7 */
    228	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
    229		  SUNXI_FUNCTION(0x0, "gpio_in"),
    230		  SUNXI_FUNCTION(0x1, "gpio_out"),
    231		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */
    232		  SUNXI_FUNCTION(0x3, "mmc2")),		/* RST */
    233	/* Hole */
    234	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
    235		  SUNXI_FUNCTION(0x0, "gpio_in"),
    236		  SUNXI_FUNCTION(0x1, "gpio_out"),
    237		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD3 */
    238	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
    239		  SUNXI_FUNCTION(0x0, "gpio_in"),
    240		  SUNXI_FUNCTION(0x1, "gpio_out"),
    241		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD2 */
    242	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
    243		  SUNXI_FUNCTION(0x0, "gpio_in"),
    244		  SUNXI_FUNCTION(0x1, "gpio_out"),
    245		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD1 */
    246	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
    247		  SUNXI_FUNCTION(0x0, "gpio_in"),
    248		  SUNXI_FUNCTION(0x1, "gpio_out"),
    249		  SUNXI_FUNCTION(0x2, "emac")),		/* RXD0 */
    250	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
    251		  SUNXI_FUNCTION(0x0, "gpio_in"),
    252		  SUNXI_FUNCTION(0x1, "gpio_out"),
    253		  SUNXI_FUNCTION(0x2, "emac")),		/* RXCK */
    254	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
    255		  SUNXI_FUNCTION(0x0, "gpio_in"),
    256		  SUNXI_FUNCTION(0x1, "gpio_out"),
    257		  SUNXI_FUNCTION(0x2, "emac")),		/* RXCTL/RXDV */
    258	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
    259		  SUNXI_FUNCTION(0x0, "gpio_in"),
    260		  SUNXI_FUNCTION(0x1, "gpio_out"),
    261		  SUNXI_FUNCTION(0x2, "emac")),		/* RXERR */
    262	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
    263		  SUNXI_FUNCTION(0x0, "gpio_in"),
    264		  SUNXI_FUNCTION(0x1, "gpio_out"),
    265		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD3 */
    266	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
    267		  SUNXI_FUNCTION(0x0, "gpio_in"),
    268		  SUNXI_FUNCTION(0x1, "gpio_out"),
    269		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD2 */
    270	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
    271		  SUNXI_FUNCTION(0x0, "gpio_in"),
    272		  SUNXI_FUNCTION(0x1, "gpio_out"),
    273		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD1 */
    274	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
    275		  SUNXI_FUNCTION(0x0, "gpio_in"),
    276		  SUNXI_FUNCTION(0x1, "gpio_out"),
    277		  SUNXI_FUNCTION(0x2, "emac")),		/* TXD0 */
    278	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
    279		  SUNXI_FUNCTION(0x0, "gpio_in"),
    280		  SUNXI_FUNCTION(0x1, "gpio_out"),
    281		  SUNXI_FUNCTION(0x2, "emac")),		/* CRS */
    282	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
    283		  SUNXI_FUNCTION(0x0, "gpio_in"),
    284		  SUNXI_FUNCTION(0x1, "gpio_out"),
    285		  SUNXI_FUNCTION(0x2, "emac")),		/* TXCK */
    286	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
    287		  SUNXI_FUNCTION(0x0, "gpio_in"),
    288		  SUNXI_FUNCTION(0x1, "gpio_out"),
    289		  SUNXI_FUNCTION(0x2, "emac")),		/* TXCTL/TXEN */
    290	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
    291		  SUNXI_FUNCTION(0x0, "gpio_in"),
    292		  SUNXI_FUNCTION(0x1, "gpio_out"),
    293		  SUNXI_FUNCTION(0x2, "emac")),		/* TXERR */
    294	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
    295		  SUNXI_FUNCTION(0x0, "gpio_in"),
    296		  SUNXI_FUNCTION(0x1, "gpio_out"),
    297		  SUNXI_FUNCTION(0x2, "emac")),		/* CLKIN/COL */
    298	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
    299		  SUNXI_FUNCTION(0x0, "gpio_in"),
    300		  SUNXI_FUNCTION(0x1, "gpio_out"),
    301		  SUNXI_FUNCTION(0x2, "emac")),		/* MDC */
    302	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
    303		  SUNXI_FUNCTION(0x0, "gpio_in"),
    304		  SUNXI_FUNCTION(0x1, "gpio_out"),
    305		  SUNXI_FUNCTION(0x2, "emac")),		/* MDIO */
    306	/* Hole */
    307	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
    308		  SUNXI_FUNCTION(0x0, "gpio_in"),
    309		  SUNXI_FUNCTION(0x1, "gpio_out"),
    310		  SUNXI_FUNCTION(0x2, "csi"),		/* PCLK */
    311		  SUNXI_FUNCTION(0x3, "ts")),		/* CLK */
    312	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
    313		  SUNXI_FUNCTION(0x0, "gpio_in"),
    314		  SUNXI_FUNCTION(0x1, "gpio_out"),
    315		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
    316		  SUNXI_FUNCTION(0x3, "ts")),		/* ERR */
    317	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
    318		  SUNXI_FUNCTION(0x0, "gpio_in"),
    319		  SUNXI_FUNCTION(0x1, "gpio_out"),
    320		  SUNXI_FUNCTION(0x2, "csi"),		/* HSYNC */
    321		  SUNXI_FUNCTION(0x3, "ts")),		/* SYNC */
    322	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
    323		  SUNXI_FUNCTION(0x0, "gpio_in"),
    324		  SUNXI_FUNCTION(0x1, "gpio_out"),
    325		  SUNXI_FUNCTION(0x2, "csi"),		/* VSYNC */
    326		  SUNXI_FUNCTION(0x3, "ts")),		/* DVLD */
    327	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
    328		  SUNXI_FUNCTION(0x0, "gpio_in"),
    329		  SUNXI_FUNCTION(0x1, "gpio_out"),
    330		  SUNXI_FUNCTION(0x2, "csi"),		/* D0 */
    331		  SUNXI_FUNCTION(0x3, "ts")),		/* D0 */
    332	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
    333		  SUNXI_FUNCTION(0x0, "gpio_in"),
    334		  SUNXI_FUNCTION(0x1, "gpio_out"),
    335		  SUNXI_FUNCTION(0x2, "csi"),		/* D1 */
    336		  SUNXI_FUNCTION(0x3, "ts")),		/* D1 */
    337	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
    338		  SUNXI_FUNCTION(0x0, "gpio_in"),
    339		  SUNXI_FUNCTION(0x1, "gpio_out"),
    340		  SUNXI_FUNCTION(0x2, "csi"),		/* D2 */
    341		  SUNXI_FUNCTION(0x3, "ts")),		/* D2 */
    342	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
    343		  SUNXI_FUNCTION(0x0, "gpio_in"),
    344		  SUNXI_FUNCTION(0x1, "gpio_out"),
    345		  SUNXI_FUNCTION(0x2, "csi"),		/* D3 */
    346		  SUNXI_FUNCTION(0x3, "ts")),		/* D3 */
    347	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
    348		  SUNXI_FUNCTION(0x0, "gpio_in"),
    349		  SUNXI_FUNCTION(0x1, "gpio_out"),
    350		  SUNXI_FUNCTION(0x2, "csi"),		/* D4 */
    351		  SUNXI_FUNCTION(0x3, "ts")),		/* D4 */
    352	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
    353		  SUNXI_FUNCTION(0x0, "gpio_in"),
    354		  SUNXI_FUNCTION(0x1, "gpio_out"),
    355		  SUNXI_FUNCTION(0x2, "csi"),		/* D5 */
    356		  SUNXI_FUNCTION(0x3, "ts")),		/* D5 */
    357	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
    358		  SUNXI_FUNCTION(0x0, "gpio_in"),
    359		  SUNXI_FUNCTION(0x1, "gpio_out"),
    360		  SUNXI_FUNCTION(0x2, "csi"),		/* D6 */
    361		  SUNXI_FUNCTION(0x3, "ts")),		/* D6 */
    362	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
    363		  SUNXI_FUNCTION(0x0, "gpio_in"),
    364		  SUNXI_FUNCTION(0x1, "gpio_out"),
    365		  SUNXI_FUNCTION(0x2, "csi"),		/* D7 */
    366		  SUNXI_FUNCTION(0x3, "ts")),		/* D7 */
    367	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
    368		  SUNXI_FUNCTION(0x0, "gpio_in"),
    369		  SUNXI_FUNCTION(0x1, "gpio_out"),
    370		  SUNXI_FUNCTION(0x2, "csi"),		/* SCK */
    371		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SCK */
    372	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
    373		  SUNXI_FUNCTION(0x0, "gpio_in"),
    374		  SUNXI_FUNCTION(0x1, "gpio_out"),
    375		  SUNXI_FUNCTION(0x2, "csi"),		/* SDA */
    376		  SUNXI_FUNCTION(0x3, "i2c2")),		/* SDA */
    377	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
    378		  SUNXI_FUNCTION(0x0, "gpio_in"),
    379		  SUNXI_FUNCTION(0x1, "gpio_out")),
    380	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
    381		  SUNXI_FUNCTION(0x0, "gpio_in"),
    382		  SUNXI_FUNCTION(0x1, "gpio_out")),
    383	/* Hole */
    384	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
    385		  SUNXI_FUNCTION(0x0, "gpio_in"),
    386		  SUNXI_FUNCTION(0x1, "gpio_out"),
    387		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
    388		  SUNXI_FUNCTION(0x3, "jtag")),		/* MS */
    389	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
    390		  SUNXI_FUNCTION(0x0, "gpio_in"),
    391		  SUNXI_FUNCTION(0x1, "gpio_out"),
    392		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
    393		  SUNXI_FUNCTION(0x3, "jtag")),		/* DI */
    394	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
    395		  SUNXI_FUNCTION(0x0, "gpio_in"),
    396		  SUNXI_FUNCTION(0x1, "gpio_out"),
    397		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
    398		  SUNXI_FUNCTION(0x3, "uart0")),	/* TX */
    399	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
    400		  SUNXI_FUNCTION(0x0, "gpio_in"),
    401		  SUNXI_FUNCTION(0x1, "gpio_out"),
    402		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
    403		  SUNXI_FUNCTION(0x3, "jtag")),		/* DO */
    404	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
    405		  SUNXI_FUNCTION(0x0, "gpio_in"),
    406		  SUNXI_FUNCTION(0x1, "gpio_out"),
    407		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
    408		  SUNXI_FUNCTION(0x3, "uart0")),	/* RX */
    409	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
    410		  SUNXI_FUNCTION(0x0, "gpio_in"),
    411		  SUNXI_FUNCTION(0x1, "gpio_out"),
    412		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
    413		  SUNXI_FUNCTION(0x3, "jtag")),		/* CK */
    414	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
    415		  SUNXI_FUNCTION(0x0, "gpio_in"),
    416		  SUNXI_FUNCTION(0x1, "gpio_out")),
    417	/* Hole */
    418	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
    419		  SUNXI_FUNCTION(0x0, "gpio_in"),
    420		  SUNXI_FUNCTION(0x1, "gpio_out"),
    421		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
    422		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),	/* PG_EINT0 */
    423	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
    424		  SUNXI_FUNCTION(0x0, "gpio_in"),
    425		  SUNXI_FUNCTION(0x1, "gpio_out"),
    426		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
    427		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),	/* PG_EINT1 */
    428	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
    429		  SUNXI_FUNCTION(0x0, "gpio_in"),
    430		  SUNXI_FUNCTION(0x1, "gpio_out"),
    431		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
    432		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),	/* PG_EINT2 */
    433	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
    434		  SUNXI_FUNCTION(0x0, "gpio_in"),
    435		  SUNXI_FUNCTION(0x1, "gpio_out"),
    436		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
    437		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),	/* PG_EINT3 */
    438	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
    439		  SUNXI_FUNCTION(0x0, "gpio_in"),
    440		  SUNXI_FUNCTION(0x1, "gpio_out"),
    441		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
    442		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),	/* PG_EINT4 */
    443	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
    444		  SUNXI_FUNCTION(0x0, "gpio_in"),
    445		  SUNXI_FUNCTION(0x1, "gpio_out"),
    446		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
    447		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),	/* PG_EINT5 */
    448	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
    449		  SUNXI_FUNCTION(0x0, "gpio_in"),
    450		  SUNXI_FUNCTION(0x1, "gpio_out"),
    451		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
    452		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),	/* PG_EINT6 */
    453	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
    454		  SUNXI_FUNCTION(0x0, "gpio_in"),
    455		  SUNXI_FUNCTION(0x1, "gpio_out"),
    456		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
    457		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),	/* PG_EINT7 */
    458	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
    459		  SUNXI_FUNCTION(0x0, "gpio_in"),
    460		  SUNXI_FUNCTION(0x1, "gpio_out"),
    461		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
    462		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),	/* PG_EINT8 */
    463	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
    464		  SUNXI_FUNCTION(0x0, "gpio_in"),
    465		  SUNXI_FUNCTION(0x1, "gpio_out"),
    466		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
    467		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),	/* PG_EINT9 */
    468	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
    469		  SUNXI_FUNCTION(0x0, "gpio_in"),
    470		  SUNXI_FUNCTION(0x1, "gpio_out"),
    471		  SUNXI_FUNCTION(0x2, "i2s1"),		/* SYNC */
    472		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),	/* PG_EINT10 */
    473	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
    474		  SUNXI_FUNCTION(0x0, "gpio_in"),
    475		  SUNXI_FUNCTION(0x1, "gpio_out"),
    476		  SUNXI_FUNCTION(0x2, "i2s1"),		/* CLK */
    477		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),	/* PG_EINT11 */
    478	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
    479		  SUNXI_FUNCTION(0x0, "gpio_in"),
    480		  SUNXI_FUNCTION(0x1, "gpio_out"),
    481		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DOUT */
    482		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),	/* PG_EINT12 */
    483	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
    484		  SUNXI_FUNCTION(0x0, "gpio_in"),
    485		  SUNXI_FUNCTION(0x1, "gpio_out"),
    486		  SUNXI_FUNCTION(0x2, "i2s1"),		/* DIN */
    487		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),	/* PG_EINT13 */
    488};
    489
    490static const struct sunxi_pinctrl_desc sun8i_h3_pinctrl_data = {
    491	.pins = sun8i_h3_pins,
    492	.npins = ARRAY_SIZE(sun8i_h3_pins),
    493	.irq_banks = 2,
    494	.irq_read_needs_mux = true,
    495	.disable_strict_mode = true,
    496};
    497
    498static int sun8i_h3_pinctrl_probe(struct platform_device *pdev)
    499{
    500	return sunxi_pinctrl_init(pdev,
    501				  &sun8i_h3_pinctrl_data);
    502}
    503
    504static const struct of_device_id sun8i_h3_pinctrl_match[] = {
    505	{ .compatible = "allwinner,sun8i-h3-pinctrl", },
    506	{}
    507};
    508
    509static struct platform_driver sun8i_h3_pinctrl_driver = {
    510	.probe	= sun8i_h3_pinctrl_probe,
    511	.driver	= {
    512		.name		= "sun8i-h3-pinctrl",
    513		.of_match_table	= sun8i_h3_pinctrl_match,
    514	},
    515};
    516builtin_platform_driver(sun8i_h3_pinctrl_driver);