Hook up sxipio(4) to the generic pinctrl code. The device binding is pretty
authorkettenis <kettenis@openbsd.org>
Fri, 12 Aug 2016 16:02:31 +0000 (16:02 +0000)
committerkettenis <kettenis@openbsd.org>
Fri, 12 Aug 2016 16:02:31 +0000 (16:02 +0000)
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
sys/arch/armv7/sunxi/sxipio_pins.h [new file with mode: 0644]
sys/arch/armv7/sunxi/sxipiovar.h

index 9a49343..41663f5 100644 (file)
@@ -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
 #include <sys/device.h>
 #include <sys/gpio.h>
 #include <sys/evcount.h>
+#include <sys/malloc.h>
 
 #include <machine/bus.h>
 #include <machine/intr.h>
 
 #include <dev/gpio/gpiovar.h>
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/ofw_pinctrl.h>
 
 #include <armv7/armv7/armv7var.h>
 #include <armv7/sunxi/sunxireg.h>
@@ -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 (file)
index 0000000..9eef88c
--- /dev/null
@@ -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 },
+       } },
+};
index 275a876..85f7937 100644 (file)
@@ -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
  *
 
 #include <sys/gpio.h>
 
+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 *);