1c8a83090SIcenowy Zheng // SPDX-License-Identifier: GPL-2.0 2c8a83090SIcenowy Zheng /* 3c8a83090SIcenowy Zheng * Allwinner H6 SoC pinctrl driver. 4c8a83090SIcenowy Zheng * 5c8a83090SIcenowy Zheng * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io> 6c8a83090SIcenowy Zheng */ 7c8a83090SIcenowy Zheng 8c8a83090SIcenowy Zheng #include <linux/module.h> 9c8a83090SIcenowy Zheng #include <linux/platform_device.h> 10c8a83090SIcenowy Zheng #include <linux/of.h> 11c8a83090SIcenowy Zheng #include <linux/of_device.h> 12c8a83090SIcenowy Zheng #include <linux/pinctrl/pinctrl.h> 13c8a83090SIcenowy Zheng 14c8a83090SIcenowy Zheng #include "pinctrl-sunxi.h" 15c8a83090SIcenowy Zheng 16c8a83090SIcenowy Zheng static const struct sunxi_desc_pin h6_pins[] = { 17c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0), 18c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ERXD1 */ 19c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1), 20c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ERXD0 */ 21c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2), 22c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ECRS_DV */ 23c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3), 24c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ERXERR */ 25c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4), 26c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ETXD1 */ 27c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5), 28c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ETXD0 */ 29c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6), 30c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ETXCK */ 31c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7), 32c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* ETXEN */ 33c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8), 34c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* EMDC */ 35c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9), 36c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "emac")), /* EMDIO */ 37c8a83090SIcenowy Zheng /* Hole */ 38c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0), 39c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* CLK */ 40c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), 41c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1), 42c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DE */ 43c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), 44c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2), 45c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* HSYNC */ 46c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), 47c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3), 48c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* VSYNC */ 49c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), 50c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4), 51c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO0 */ 52c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), 53c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5), 54c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO1 */ 55c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), 56c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6), 57c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO2 */ 58c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), 59c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7), 60c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO3 */ 61c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), 62c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8), 63c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO4 */ 64c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), 65c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9), 66c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO5 */ 67c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), 68c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10), 69c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO6 */ 70c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)), 71c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 11), 72c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ccir"), /* DO7 */ 73c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)), 74c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 12), 75c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s3"), /* SYNC */ 76c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s3"), /* SYNC */ 77c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)), 78c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 13), 79c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s3"), /* CLK */ 80c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s3"), /* CLK */ 81c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)), 82c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 14), 83c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s3"), /* DOUT */ 84c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s3"), /* DOUT */ 85c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), 86c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15), 87c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s3"), /* DIN */ 88c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s3"), /* DIN */ 89c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), 90c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16), 91c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s3"), /* MCLK */ 92c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s3"), /* MCLK */ 93c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), 94c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 17), 95c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c3"), /* SCK */ 96c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)), 97c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 18), 98c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c3"), /* SDA */ 99c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)), 100c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 19), 101c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "pwm1"), 102c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)), 103c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 20), 104c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 105c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)), 106c8a83090SIcenowy Zheng /* Hole */ 107c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), 108c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 109c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 110c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* WE */ 111c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* CLK */ 112c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1), 113c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 114c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 115c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* ALE */ 116c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* DS */ 117c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2), 118c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 119c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 120c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* CLE */ 121c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* MOSI */ 122c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3), 123c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 124c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 125c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* CE0 */ 126c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* MISO */ 127c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4), 128c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 129c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 130c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* RE */ 131c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* CLK */ 132c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5), 133c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 134c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 135c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* RB0 */ 136c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2"), /* CMD */ 137c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* CS */ 138c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6), 139c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 140c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 141c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ0 */ 142c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2"), /* D0 */ 143c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* HOLD */ 144c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7), 145c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 146c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 147c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ1 */ 148c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2"), /* D1 */ 149c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "spi0")), /* WP */ 150c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8), 151c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 152c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 153c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ2 */ 154c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D2 */ 155c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9), 156c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 157c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 158c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ3 */ 159c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D3 */ 160c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10), 161c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 162c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 163c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ4 */ 164c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D4 */ 165c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11), 166c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 167c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 168c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ5 */ 169c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D5 */ 170c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12), 171c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 172c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 173c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ6 */ 174c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */ 175c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13), 176c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 177c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 178c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */ 179c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */ 180c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14), 181c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 182c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 183c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0"), /* DQS */ 184c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "mmc2")), /* RST */ 185c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15), 186c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 187c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 188c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0")), /* CE1 */ 189c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16), 190c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 191c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 192c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "nand0")), /* RB1 */ 193c8a83090SIcenowy Zheng /* Hole */ 194c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0), 195c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 196c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 197c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */ 198c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* CLK */ 199c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* PCLK */ 200c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXD3 */ 201c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1), 202c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 203c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 204c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */ 205c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* ERR */ 206c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* MCLK */ 207c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXD2 */ 208c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2), 209c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 210c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 211c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */ 212c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* SYNC */ 213c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* HSYNC */ 214c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXD1 */ 215c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3), 216c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 217c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 218c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */ 219c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* DVLD */ 220c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* VSYNC */ 221c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXD0 */ 222c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4), 223c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 224c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 225c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */ 226c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D0 */ 227c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D0 */ 228c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXCK */ 229c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5), 230c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 231c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 232c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */ 233c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D1 */ 234c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D1 */ 235c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ERXCTL */ 236c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6), 237c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 238c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 239c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */ 240c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D2 */ 241c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D2 */ 242c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ENULL */ 243c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7), 244c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 245c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 246c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */ 247c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D3 */ 248c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D3 */ 249c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXD3 */ 250c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8), 251c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 252c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 253c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */ 254c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D4 */ 255c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D4 */ 256c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXD2 */ 257c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9), 258c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 259c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 260c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */ 261c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D5 */ 262c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D5 */ 263c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXD1 */ 264c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10), 265c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 266c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 267c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */ 268c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D6 */ 269c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D6 */ 270c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXD0 */ 271c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11), 272c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 273c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 274c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */ 275c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts0"), /* D7 */ 276c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* D7 */ 277c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXCK */ 278c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12), 279c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 280c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 281c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */ 282c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts1"), /* CLK */ 283c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* SCK */ 284c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ETXCTL */ 285c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13), 286c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 287c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 288c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */ 289c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts1"), /* ERR */ 290c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "csi"), /* SDA */ 291c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* ECLKIN */ 292c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14), 293c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 294c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 295c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D20 */ 296c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts1"), /* SYNC */ 297c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "dmic"), /* CLK */ 298c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "csi")), /* D8 */ 299c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15), 300c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 301c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 302c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D21 */ 303c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts1"), /* DVLD */ 304c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "dmic"), /* DATA0 */ 305c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "csi")), /* D9 */ 306c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16), 307c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 308c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 309c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D22 */ 310c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts1"), /* D0 */ 311c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "dmic")), /* DATA1 */ 312c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17), 313c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 314c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 315c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* D23 */ 316c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts2"), /* CLK */ 317c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "dmic")), /* DATA2 */ 318c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18), 319c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 320c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 321c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* CLK */ 322c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts2"), /* ERR */ 323c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "dmic")), /* DATA3 */ 324c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19), 325c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 326c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 327c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* DE */ 328c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts2"), /* SYNC */ 329c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart2"), /* TX */ 330c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* EMDC */ 331c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20), 332c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 333c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 334c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* HSYNC */ 335c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts2"), /* DVLD */ 336c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart2"), /* RX */ 337c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "emac")), /* EMDIO */ 338c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21), 339c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 340c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 341c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "lcd0"), /* VSYNC */ 342c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts2"), /* D0 */ 343c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart2")), /* RTS */ 344c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22), 345c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 346c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 347c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "pwm"), /* PWM0 */ 348c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts3"), /* CLK */ 349c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart2")), /* CTS */ 350c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23), 351c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 352c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 353c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c2"), /* SCK */ 354c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts3"), /* ERR */ 355c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart3"), /* TX */ 356c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "jtag")), /* MS */ 357c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24), 358c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 359c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 360c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c2"), /* SDA */ 361c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts3"), /* SYNC */ 362c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart3"), /* RX */ 363c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "jtag")), /* CK */ 364c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 25), 365c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 366c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 367c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c0"), /* SCK */ 368c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts3"), /* DVLD */ 369c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart3"), /* RTS */ 370c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "jtag")), /* DO */ 371c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 26), 372c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 373c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 374c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2c0"), /* SDA */ 375c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "ts3"), /* D0 */ 376c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "uart3"), /* CTS */ 377c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "jtag")), /* DI */ 378c8a83090SIcenowy Zheng /* Hole */ 379c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0), 380c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 381c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 382c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */ 383c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "jtag"), /* MS */ 384c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)), /* PF_EINT0 */ 385c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1), 386c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 387c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 388c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */ 389c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "jtag"), /* DI */ 390c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)), /* PF_EINT1 */ 391c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2), 392c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 393c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 394c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */ 395c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "uart0"), /* TX */ 396c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)), /* PF_EINT2 */ 397c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3), 398c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 399c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 400c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */ 401c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "jtag"), /* DO */ 402c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)), /* PF_EINT3 */ 403c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4), 404c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 405c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 406c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ 407c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "uart0"), /* RX */ 408c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)), /* PF_EINT4 */ 409c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), 410c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 411c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 412c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */ 413c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "jtag"), /* CK */ 414c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)), /* PF_EINT5 */ 415c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6), 416c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 417c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 418c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)), /* PF_EINT6 */ 419c8a83090SIcenowy Zheng /* Hole */ 420c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0), 421c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 422c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 423c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* CLK */ 424c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)), /* PG_EINT0 */ 425c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1), 426c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 427c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 428c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* CMD */ 429c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)), /* PG_EINT1 */ 430c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2), 431c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 432c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 433c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* D0 */ 434c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)), /* PG_EINT2 */ 435c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3), 436c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 437c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 438c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* D1 */ 439c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)), /* PG_EINT3 */ 440c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4), 441c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 442c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 443c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* D2 */ 444c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)), /* PG_EINT4 */ 445c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5), 446c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 447c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 448c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "mmc1"), /* D3 */ 449c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)), /* PG_EINT5 */ 450c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6), 451c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 452c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 453c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart1"), /* TX */ 454c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)), /* PG_EINT6 */ 455c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7), 456c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 457c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 458c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart1"), /* RX */ 459c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)), /* PG_EINT7 */ 460c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8), 461c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 462c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 463c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart1"), /* RTS */ 464c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* VPPEN */ 465c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)), /* PG_EINT8 */ 466c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9), 467c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 468c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 469c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart1"), /* CTS */ 470c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* VPPPP */ 471c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)), /* PG_EINT9 */ 472c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10), 473c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 474c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 475c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s2"), /* SYNC */ 476c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "h_i2s2"), /* SYNC */ 477c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* PWREN */ 478c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)), /* PG_EINT10 */ 479c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11), 480c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 481c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 482c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s2"), /* CLK */ 483c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "h_i2s2"), /* CLK */ 484c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* CLK */ 485c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)), /* PG_EINT11 */ 486c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12), 487c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 488c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 489c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s2"), /* DOUT */ 490c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "h_i2s2"), /* DOUT */ 491c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* DATA */ 492c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 12)), /* PG_EINT12 */ 493c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13), 494c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 495c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 496c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s2"), /* DIN */ 497c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "h_i2s2"), /* DIN */ 498c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* RST */ 499c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)), /* PG_EINT13 */ 500c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 14), 501c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 502c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 503c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "i2s2"), /* MCLK */ 504c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "h_i2s2"), /* MCLK */ 505c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "sim0"), /* DET */ 506c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 14)), /* PG_EINT14 */ 507c8a83090SIcenowy Zheng /* Hole */ 508c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0), 509c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 510c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 511c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart0"), /* TX */ 512c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "i2s0"), /* SYNC */ 513c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s0"), /* SYNC */ 514c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* VPPEN */ 515c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 0)), /* PH_EINT0 */ 516c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1), 517c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 518c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 519c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "uart0"), /* RX */ 520c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "i2s0"), /* CLK */ 521c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s0"), /* CLK */ 522c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* VPPPP */ 523c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 1)), /* PH_EINT1 */ 524c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2), 525c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 526c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 527c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "ir_tx"), 528c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "i2s0"), /* DOUT */ 529c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s0"), /* DOUT */ 530c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* PWREN */ 531c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 2)), /* PH_EINT2 */ 532c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3), 533c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 534c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 535c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "spi1"), /* CS */ 536c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "i2s0"), /* DIN */ 537c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s0"), /* DIN */ 538c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* CLK */ 539c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 3)), /* PH_EINT3 */ 540c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4), 541c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 542c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 543c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "spi1"), /* CLK */ 544c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "i2s0"), /* MCLK */ 545c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "h_i2s0"), /* MCLK */ 546c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* DATA */ 547c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 4)), /* PH_EINT4 */ 548c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5), 549c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 550c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 551c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "spi1"), /* MOSI */ 552c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "spdif"), /* MCLK */ 553c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "i2c1"), /* SCK */ 554c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* RST */ 555c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 5)), /* PH_EINT5 */ 556c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6), 557c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 558c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 559c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "spi1"), /* MISO */ 560c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "spdif"), /* IN */ 561c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x4, "i2c1"), /* SDA */ 562c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x5, "sim1"), /* DET */ 563c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 6)), /* PH_EINT6 */ 564c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7), 565c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 566c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 567c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x3, "spdif"), /* OUT */ 568c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 7)), /* PH_EINT7 */ 569c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8), 570c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 571c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 572c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "hdmi"), /* HSCL */ 573c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 8)), /* PH_EINT8 */ 574c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9), 575c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 576c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 577c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "hdmi"), /* HSDA */ 578c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 9)), /* PH_EINT9 */ 579c8a83090SIcenowy Zheng SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10), 580c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x0, "gpio_in"), 581c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x1, "gpio_out"), 582c8a83090SIcenowy Zheng SUNXI_FUNCTION(0x2, "hdmi"), /* HCEC */ 583c8a83090SIcenowy Zheng SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 10)), /* PH_EINT10 */ 584c8a83090SIcenowy Zheng }; 585c8a83090SIcenowy Zheng 586c8a83090SIcenowy Zheng static const unsigned int h6_irq_bank_map[] = { 1, 5, 6, 7 }; 587c8a83090SIcenowy Zheng 588c8a83090SIcenowy Zheng static const struct sunxi_pinctrl_desc h6_pinctrl_data = { 589c8a83090SIcenowy Zheng .pins = h6_pins, 590c8a83090SIcenowy Zheng .npins = ARRAY_SIZE(h6_pins), 59110098709SChen-Yu Tsai .irq_banks = 4, 592c8a83090SIcenowy Zheng .irq_bank_map = h6_irq_bank_map, 593c8a83090SIcenowy Zheng .irq_read_needs_mux = true, 594c8a83090SIcenowy Zheng }; 595c8a83090SIcenowy Zheng 596c8a83090SIcenowy Zheng static int h6_pinctrl_probe(struct platform_device *pdev) 597c8a83090SIcenowy Zheng { 598c8a83090SIcenowy Zheng return sunxi_pinctrl_init(pdev, 599c8a83090SIcenowy Zheng &h6_pinctrl_data); 600c8a83090SIcenowy Zheng } 601c8a83090SIcenowy Zheng 602c8a83090SIcenowy Zheng static const struct of_device_id h6_pinctrl_match[] = { 603c8a83090SIcenowy Zheng { .compatible = "allwinner,sun50i-h6-pinctrl", }, 604c8a83090SIcenowy Zheng {} 605c8a83090SIcenowy Zheng }; 606c8a83090SIcenowy Zheng 607c8a83090SIcenowy Zheng static struct platform_driver h6_pinctrl_driver = { 608c8a83090SIcenowy Zheng .probe = h6_pinctrl_probe, 609c8a83090SIcenowy Zheng .driver = { 610c8a83090SIcenowy Zheng .name = "sun50i-h6-pinctrl", 611c8a83090SIcenowy Zheng .of_match_table = h6_pinctrl_match, 612c8a83090SIcenowy Zheng }, 613c8a83090SIcenowy Zheng }; 614c8a83090SIcenowy Zheng builtin_platform_driver(h6_pinctrl_driver); 615