From 09a309794186e365e4a96aacef52b2f7cebfe173 Mon Sep 17 00:00:00 2001 From: kettenis Date: Fri, 12 Aug 2016 16:02:31 +0000 Subject: [PATCH] Hook up sxipio(4) to the generic pinctrl code. The device binding is pretty retarded, requiring tables to map text strings to the apropriate numbers. These tables were generated automatically from data extracted from the Linux kernel and are kept in a separate file. This should make it easy to add support for more SoCs from the same family. ok deraadt@, millert@ --- sys/arch/armv7/sunxi/sxipio.c | 127 +- sys/arch/armv7/sunxi/sxipio_pins.h | 3514 ++++++++++++++++++++++++++++ sys/arch/armv7/sunxi/sxipiovar.h | 29 +- 3 files changed, 3666 insertions(+), 4 deletions(-) create mode 100644 sys/arch/armv7/sunxi/sxipio_pins.h diff --git a/sys/arch/armv7/sunxi/sxipio.c b/sys/arch/armv7/sunxi/sxipio.c index 9a493435a92..41663f5f0f5 100644 --- a/sys/arch/armv7/sunxi/sxipio.c +++ b/sys/arch/armv7/sunxi/sxipio.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sxipio.c,v 1.7 2015/05/20 03:49:23 jsg Exp $ */ +/* $OpenBSD: sxipio.c,v 1.8 2016/08/12 16:02:31 kettenis Exp $ */ /* * Copyright (c) 2010 Miodrag Vallat. * Copyright (c) 2013 Artturi Alm @@ -21,11 +21,14 @@ #include #include #include +#include #include #include #include +#include +#include #include #include @@ -48,7 +51,6 @@ SXIPIO_PH_NPIN + SXIPIO_PI_NPIN) #define SXIPIO_PS_NPIN 84 /* for DRAM controller */ - struct intrhand { int (*ih_func)(void *); /* handler */ void *ih_arg; /* arg for handler */ @@ -69,6 +71,9 @@ struct sxipio_softc { int sc_min_il; int sc_irq; + struct sxipio_pin *sc_pins; + int sc_npins; + struct gpio_chipset_tag sc_gpio_tag[SXIPIO_NPORT]; gpio_pin_t sc_gpio_pins[SXIPIO_NPORT][32]; @@ -87,6 +92,7 @@ struct sxipio_softc { void sxipio_attach(struct device *, struct device *, void *); void sxipio_attach_gpio(struct device *); +int sxipio_pinctrl(uint32_t, void *); struct cfattach sxipio_ca = { sizeof (struct sxipio_softc), NULL, sxipio_attach @@ -100,11 +106,39 @@ struct sxipio_softc *sxipio_sc = NULL; bus_space_tag_t sxipio_iot; bus_space_handle_t sxipio_ioh; +#include "sxipio_pins.h" + +struct sxipio_pins { + const char *compat; + struct sxipio_pin *pins; + int npins; +}; + +struct sxipio_pins sxipio_pins[] = { + { + "allwinner,sun4i-a10-pinctrl", + sun4i_a10_pins, nitems(sun4i_a10_pins) + }, + { + "allwinner,sun5i-a13-pinctrl", + sun5i_a13_pins, nitems(sun5i_a13_pins) + }, + { + "allwinner,sun5i-a10s-pinctrl", + sun5i_a10s_pins, nitems(sun5i_a10s_pins) + }, + { + "allwinner,sun7i-a20-pinctrl", + sun7i_a20_pins, nitems(sun7i_a20_pins) + } +}; + void sxipio_attach(struct device *parent, struct device *self, void *args) { struct sxipio_softc *sc = (struct sxipio_softc *)self; struct armv7_attach_args *aa = args; + int node, i; /* XXX check unit, bail if != 0 */ @@ -118,9 +152,23 @@ sxipio_attach(struct device *parent, struct device *self, void *args) sc->sc_irq = aa->aa_dev->irq[0]; + node = OF_finddevice("/soc@01c00000/pinctrl@01c20800"); + if (node != -1) { + for (i = 0; i < nitems(sxipio_pins); i++) { + if (OF_is_compatible(node, sxipio_pins[i].compat)) { + sc->sc_pins = sxipio_pins[i].pins; + sc->sc_npins = sxipio_pins[i].npins; + break; + } + } + + if (sc->sc_pins) + pinctrl_register(node, sxipio_pinctrl, sc); + } + config_defer(self, sxipio_attach_gpio); - printf("\n"); + printf(": %d pins\n", sc->sc_npins); } /* @@ -353,3 +401,76 @@ sxipio_togglepin(int pin) return data & mask ? GPIO_PIN_HIGH : GPIO_PIN_LOW; } + +int +sxipio_pinctrl(uint32_t phandle, void *cookie) +{ + struct sxipio_softc *sc = cookie; + char func[32]; + char *names, *name; + int port, pin, off; + int mux, drive, pull; + int node; + int len; + int i, j; + int s; + + node = OF_getnodebyphandle(phandle); + if (node == 0) + return -1; + + len = OF_getprop(node, "allwinner,function", func, sizeof(func)); + if (len <= 0 || len >= sizeof(func)) + return -1; + + len = OF_getproplen(node, "allwinner,pins"); + if (len <= 0) + return -1; + + names = malloc(len, M_TEMP, M_WAITOK); + OF_getprop(node, "allwinner,pins", names, len); + + drive = OF_getpropint(node, "allwinner,drive", 0); + pull = OF_getpropint(node, "allwinner,pull", 0); + + name = names; + while (len > 0) { + /* Lookup the pin. */ + for (i = 0; i < sc->sc_npins; i++) { + if (strcmp(name, sc->sc_pins[i].name) == 0) + break; + } + if (i >= sc->sc_npins) + goto err; + + /* Lookup the function of the pin. */ + for (j = 0; j < nitems(sc->sc_pins[i].funcs); j++) { + if (strcmp(func, sc->sc_pins[i].funcs[j].name) == 0) + break; + } + if (j > nitems(sc->sc_pins[i].funcs)) + goto err; + + port = sc->sc_pins[i].port; + pin = sc->sc_pins[i].pin; + mux = sc->sc_pins[i].funcs[j].mux; + + s = splhigh(); + off = (pin & 0x7) << 2; + SXICMS4(sc, SXIPIO_CFG(port, pin), 0x7 << off, mux << off); + off = (pin & 0xf) << 1; + SXICMS4(sc, SXIPIO_DRV(port, pin), 0x3 << off, drive << off); + SXICMS4(sc, SXIPIO_PUL(port, pin), 0x3 << off, pull << off); + splx(s); + + len -= strlen(name) + 1; + name += strlen(name) + 1; + } + + free(names, M_TEMP, len); + return 0; + +err: + free(names, M_TEMP, len); + return -1; +} diff --git a/sys/arch/armv7/sunxi/sxipio_pins.h b/sys/arch/armv7/sunxi/sxipio_pins.h new file mode 100644 index 00000000000..9eef88c8e7c --- /dev/null +++ b/sys/arch/armv7/sunxi/sxipio_pins.h @@ -0,0 +1,3514 @@ +/* Public Domain */ + + +struct sxipio_pin sun4i_a10_pins[] = { + { SXIPIO_PIN(A, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + } }, + { SXIPIO_PIN(A, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + } }, + { SXIPIO_PIN(A, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + } }, + { SXIPIO_PIN(A, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + } }, + { SXIPIO_PIN(A, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + } }, + { SXIPIO_PIN(A, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + } }, + { SXIPIO_PIN(A, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + } }, + { SXIPIO_PIN(A, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + } }, + { SXIPIO_PIN(A, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + } }, + { SXIPIO_PIN(A, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + } }, + { SXIPIO_PIN(A, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart6", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart6", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart7", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart7", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "can", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(A, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "can", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(B, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + } }, + { SXIPIO_PIN(B, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + } }, + { SXIPIO_PIN(B, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + } }, + { SXIPIO_PIN(B, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + } }, + { SXIPIO_PIN(B, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + } }, + { SXIPIO_PIN(B, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "ac97", 3 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "ir1", 3 }, + } }, + { SXIPIO_PIN(B, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "ir1", 3 }, + } }, + { SXIPIO_PIN(C, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(D, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "csi1", 3 }, + } }, + { SXIPIO_PIN(D, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(E, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "sim", 4 }, + } }, + { SXIPIO_PIN(E, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(F, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(G, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart4", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart4", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(H, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart4", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart4", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart5", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "uart5", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "ps2", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "ps2", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "can", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "can", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "pata", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(I, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + } }, + { SXIPIO_PIN(I, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + } }, + { SXIPIO_PIN(I, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + } }, + { SXIPIO_PIN(I, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + } }, + { SXIPIO_PIN(I, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart5", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart5", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart6", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart6", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "ps2", 3 }, + { "timer4", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "ps2", 3 }, + { "timer5", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ps2", 2 }, + { "uart7", 3 }, + { "hdmi", 4 }, + } }, + { SXIPIO_PIN(I, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ps2", 2 }, + { "uart7", 3 }, + { "hdmi", 4 }, + } }, +}; + +struct sxipio_pin sun5i_a13_pins[] = { + { SXIPIO_PIN(B, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(C, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "uart3", 4 }, + } }, + { SXIPIO_PIN(D, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(E, 0), { + { "gpio_in", 0 }, + { "csi0", 3 }, + { "spi2", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(E, 1), { + { "gpio_in", 0 }, + { "csi0", 3 }, + { "spi2", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(E, 2), { + { "gpio_in", 0 }, + { "csi0", 3 }, + { "spi2", 4 }, + } }, + { SXIPIO_PIN(E, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "spi2", 4 }, + } }, + { SXIPIO_PIN(E, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(E, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "csi0", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(F, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(F, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(F, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(F, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(F, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(F, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + } }, + { SXIPIO_PIN(G, 0), { + { "gpio_in", 0 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 1), { + { "gpio_in", 0 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 2), { + { "gpio_in", 0 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, +}; + +struct sxipio_pin sun5i_a10s_pins[] = { + { SXIPIO_PIN(A, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "uart1", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "uart1", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "uart1", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "ts0", 3 }, + { "uart1", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 3 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 3 }, + { "uart3", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 3 }, + { "uart3", 4 }, + { "keypad", 5 }, + } }, + { SXIPIO_PIN(A, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart2", 3 }, + } }, + { SXIPIO_PIN(A, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(B, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(C, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "uart3", 4 }, + } }, + { SXIPIO_PIN(C, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "uart3", 4 }, + } }, + { SXIPIO_PIN(C, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "uart2", 3 }, + { "uart3", 4 }, + } }, + { SXIPIO_PIN(C, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "uart2", 3 }, + { "uart3", 4 }, + } }, + { SXIPIO_PIN(D, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "uart2", 3 }, + } }, + { SXIPIO_PIN(D, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "uart2", 3 }, + } }, + { SXIPIO_PIN(D, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "uart2", 3 }, + } }, + { SXIPIO_PIN(D, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "uart2", 3 }, + } }, + { SXIPIO_PIN(D, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + } }, + { SXIPIO_PIN(D, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(D, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "emac", 3 }, + } }, + { SXIPIO_PIN(E, 0), { + { "gpio_in", 0 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "spi2", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(E, 1), { + { "gpio_in", 0 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "spi2", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(E, 2), { + { "gpio_in", 0 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "spi2", 4 }, + } }, + { SXIPIO_PIN(E, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "spi2", 4 }, + } }, + { SXIPIO_PIN(E, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "mmc2", 4 }, + } }, + { SXIPIO_PIN(E, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(E, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "uart1", 4 }, + } }, + { SXIPIO_PIN(F, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(G, 0), { + { "gpio_in", 0 }, + { "gps", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 1), { + { "gpio_in", 0 }, + { "gps", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 2), { + { "gpio_in", 0 }, + { "gps", 2 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart1", 4 }, + { "uart2", 5 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart2", 5 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc1", 2 }, + { "uart2", 5 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart3", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(G, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "pwm", 3 }, + { "uart2", 5 }, + { "irq", 6 }, + } }, +}; + +struct sxipio_pin sun7i_a20_pins[] = { + { SXIPIO_PIN(A, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "uart2", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi1", 3 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "spi3", 3 }, + { "gmac", 5 }, + { "i2s1", 6 }, + } }, + { SXIPIO_PIN(A, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart1", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart6", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart6", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + } }, + { SXIPIO_PIN(A, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart7", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + { "i2s1", 6 }, + } }, + { SXIPIO_PIN(A, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "uart7", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + { "i2s1", 6 }, + } }, + { SXIPIO_PIN(A, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "can", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + { "i2s1", 6 }, + } }, + { SXIPIO_PIN(A, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "emac", 2 }, + { "can", 3 }, + { "uart1", 4 }, + { "gmac", 5 }, + { "i2s1", 6 }, + } }, + { SXIPIO_PIN(B, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c0", 2 }, + } }, + { SXIPIO_PIN(B, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + } }, + { SXIPIO_PIN(B, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ir0", 2 }, + } }, + { SXIPIO_PIN(B, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + { "ac97", 3 }, + } }, + { SXIPIO_PIN(B, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + } }, + { SXIPIO_PIN(B, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + } }, + { SXIPIO_PIN(B, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + } }, + { SXIPIO_PIN(B, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2s0", 2 }, + { "ac97", 3 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "spdif", 4 }, + } }, + { SXIPIO_PIN(B, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi2", 2 }, + { "jtag", 3 }, + } }, + { SXIPIO_PIN(B, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c1", 2 }, + } }, + { SXIPIO_PIN(B, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c2", 2 }, + } }, + { SXIPIO_PIN(B, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "ir1", 3 }, + } }, + { SXIPIO_PIN(B, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "uart0", 2 }, + { "ir1", 3 }, + } }, + { SXIPIO_PIN(C, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "mmc2", 3 }, + } }, + { SXIPIO_PIN(C, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(C, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + { "spi2", 3 }, + } }, + { SXIPIO_PIN(C, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 3 }, + } }, + { SXIPIO_PIN(C, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "nand0", 2 }, + } }, + { SXIPIO_PIN(D, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds0", 3 }, + } }, + { SXIPIO_PIN(D, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "lvds1", 3 }, + } }, + { SXIPIO_PIN(D, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "csi1", 3 }, + } }, + { SXIPIO_PIN(D, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(D, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd0", 2 }, + { "sim", 3 }, + } }, + { SXIPIO_PIN(E, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + { "sim", 4 }, + } }, + { SXIPIO_PIN(E, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(E, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts0", 2 }, + { "csi0", 3 }, + } }, + { SXIPIO_PIN(F, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(F, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "uart0", 4 }, + } }, + { SXIPIO_PIN(F, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc0", 2 }, + { "jtag", 4 }, + } }, + { SXIPIO_PIN(G, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + } }, + { SXIPIO_PIN(G, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "mmc1", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart3", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart4", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(G, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ts1", 2 }, + { "csi1", 3 }, + { "uart4", 4 }, + { "csi0", 5 }, + } }, + { SXIPIO_PIN(H, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart3", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart4", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart4", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart5", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "uart5", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "ms", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "ps2", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "ps2", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "sim", 5 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "can", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "can", 4 }, + { "irq", 6 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 22), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 23), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 24), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 25), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 26), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(H, 27), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "lcd1", 2 }, + { "emac", 3 }, + { "keypad", 4 }, + { "mmc1", 5 }, + { "csi1", 7 }, + } }, + { SXIPIO_PIN(I, 0), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c3", 3 }, + } }, + { SXIPIO_PIN(I, 1), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c3", 3 }, + } }, + { SXIPIO_PIN(I, 2), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "i2c4", 3 }, + } }, + { SXIPIO_PIN(I, 3), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "pwm", 2 }, + { "i2c4", 3 }, + } }, + { SXIPIO_PIN(I, 4), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 5), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 6), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 7), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 8), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 9), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "mmc3", 2 }, + } }, + { SXIPIO_PIN(I, 10), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart5", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 11), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart5", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 12), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart6", 3 }, + { "clk_out_a", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 13), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "uart6", 3 }, + { "clk_out_b", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 14), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi0", 2 }, + { "ps2", 3 }, + { "timer4", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 15), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "ps2", 3 }, + { "timer5", 4 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 16), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 17), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 18), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 19), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "spi1", 2 }, + { "uart2", 3 }, + { "irq", 6 }, + } }, + { SXIPIO_PIN(I, 20), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ps2", 2 }, + { "uart7", 3 }, + { "hdmi", 4 }, + } }, + { SXIPIO_PIN(I, 21), { + { "gpio_in", 0 }, + { "gpio_out", 1 }, + { "ps2", 2 }, + { "uart7", 3 }, + { "hdmi", 4 }, + } }, +}; diff --git a/sys/arch/armv7/sunxi/sxipiovar.h b/sys/arch/armv7/sunxi/sxipiovar.h index 275a8765f4f..85f79378069 100644 --- a/sys/arch/armv7/sunxi/sxipiovar.h +++ b/sys/arch/armv7/sunxi/sxipiovar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sxipiovar.h,v 1.3 2015/05/20 03:49:23 jsg Exp $ */ +/* $OpenBSD: sxipiovar.h,v 1.4 2016/08/12 16:02:31 kettenis Exp $ */ /* * Copyright (c) 2013 Artturi Alm * @@ -17,6 +17,30 @@ #include +struct sxipio_func { + const char *name; + int mux; +}; + +struct sxipio_pin { + const char *name; + int port, pin; + struct sxipio_func funcs[8]; +}; + +#define SXIPIO_PORT_A 0 +#define SXIPIO_PORT_B 1 +#define SXIPIO_PORT_C 2 +#define SXIPIO_PORT_D 3 +#define SXIPIO_PORT_E 4 +#define SXIPIO_PORT_F 5 +#define SXIPIO_PORT_G 6 +#define SXIPIO_PORT_H 7 +#define SXIPIO_PORT_I 8 + +#define SXIPIO_PIN(port, pin) \ + "P" #port #pin, SXIPIO_PORT_ ## port, pin + /* * XXX To keep things simple for now, functions below work as if there * is 32pins per port, this needs to be taken into account when writing @@ -37,3 +61,6 @@ int sxipio_getpin(int); void sxipio_setpin(int); void sxipio_clrpin(int); int sxipio_togglepin(int); + +int sxipio_pinctrlbyid(int node, int id); +int sxipio_pinctrlbyname(int node, const char *); -- 2.20.1