Hi,

> There is no support for v3s in sxiccmu(4) and sxipio(4).
> There is no driver for mentor usb otg "allwinner,sun8i-h3-musb"

I added v3s support code to sxiccmu(4) and sxipio(4),
but hangs up at attaching root device.

In dmesg, no sd0 is shown after sdmmc0 so something wrong with SD card
handling I think.

Here is kernel boot message.

>> OpenBSD/armv7 BOOTARM 1.1
boot>
cannot open sd0a:/etc/random.seed: No such file or directory
booting sd0a:/bsd: 4524864+682536+243280+565156 
[298192+120+312640+276802]=0x696424

OpenBSD/armv7 booting ...
arg0 0xc0996424 arg1 0x0 arg2 0x42d49000
Allocating page tables
IRQ stack: p0x409c5000 v0xc09c5000
ABT stack: p0x409c6000 v0xc09c6000
UND stack: p0x409c7000 v0xc09c7000
SVC stack: p0x409c8000 v0xc09c8000
Creating L1 page table at 0x40998000
Mapping kernel
Constructing L2 page tables
undefined page type 0x2 pa 0x40000000 va 0x40000000 pages 0x2000 attr 0x8
type 0x7 pa 0x42000000 va 0x40000000 pages 0x5f8 attr 0x8
type 0x2 pa 0x425f8000 va 0x425f8000 pages 0x73b attr 0x8
type 0x1 pa 0x42d33000 va 0x42d33000 pages 0x16 attr 0x8
type 0x6 pa 0x42d49000 va 0x42d49000 pages 0xa attr 0x8000000000000008
type 0x0 pa 0x42d53000 va 0x42d51000 pages 0x2 attr 0x8
type 0x6 pa 0x42d55000 va 0x42d55000 pages 0x1 attr 0x8000000000000008
type 0x0 pa 0x42d56000 va 0x42d51000 pages 0x1 attr 0x8
type 0x6 pa 0x42d57000 va 0x42d57000 pages 0x1 attr 0x8000000000000008
type 0x0 pa 0x42d58000 va 0x42d58000 pages 0x2 attr 0x8
type 0x2 pa 0x42d5a000 va 0x42d5a000 pages 0x1223 attr 0x8
type 0x5 pa 0x43f7d000 va 0x43f7d000 pages 0x1 attr 0x8000000000000008
type 0x2 pa 0x43f7e000 va 0x42d5a000 pages 0x82 attr 0x8
pmap [ using 888368 bytes of bsd ELF symbol table ]
board type: 0
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2019 OpenBSD. All rights reserved.  https://www.OpenBSD.org

OpenBSD 6.4-current (GENERIC) #1: Mon Feb  4 22:53:06 JST 2019
    r...@bananapi.uaa.org.uk:/usr/src/sys/arch/armv7/compile/GENERIC
real mem  = 39813120 (37MB)
avail mem = 28860416 (27MB)
warning: no entropy supplied by boot loader
mainbus0 at root: Lichee Pi Zero
cpu0 at mainbus0: ARM Cortex-A7 r0p5 (ARMv7)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB(32b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache
cortex0 at mainbus0
psci0 at mainbus0: PSCI 0.0
sxiccmu0 at mainbus0
agtimer0 at mainbus0: tick rate 24000 KHz
simplebus0 at mainbus0: "soc"
sxiccmu1 at simplebus0
sxipio0 at simplebus0: 52 pins
ampintc0 at simplebus0 nirq 160, ncpu 1: "interrupt-controller"
sximmc0 at simplebus0
sdmmc0 at sximmc0: 4-bit, sd high-speed, mmc high-speed, dma
"usb" at simplebus0 not configured
"phy" at simplebus0 not configured
"clock" at simplebus0 not configured
sxirtc0 at simplebus0
"pinctrl" at simplebus0 not configured
"timer" at simplebus0 not configured
sxidog0 at simplebus0
com0 at simplebus0: ns16550, no working fifo
com0: console
"interrupt-controller" at simplebus0 not configured
gpio0 at sxipio0: 32 pins
gpio1 at sxipio0: 32 pins
gpio2 at sxipio0: 32 pins
gpio3 at sxipio0: 32 pins
gpio4 at sxipio0: 32 pins
gpio5 at sxipio0: 32 pins
gpio6 at sxipio0: 32 pins
vscsi0 at root
scsibus0 at vscsi0: 256 targets
softraid0 at root
scsibus1 at softraid0: 256 targets
bootfile: sd0a:/bsd
boot device: lookup sd0a:/bsd failed.
root device: <-- (hang at here)

And I attach the diff.
How do I determine clock index of sxiccmu_clocks.h?

-- 
SASANO Takayoshi (JG1UAA) <u...@mx5.nisiq.net>

Index: sxiccmu.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/sxiccmu.c,v
retrieving revision 1.21
diff -u -r1.21 sxiccmu.c
--- sxiccmu.c   3 Aug 2018 21:28:28 -0000       1.21
+++ sxiccmu.c   4 Feb 2019 13:47:35 -0000
@@ -103,6 +103,8 @@
 uint32_t sxiccmu_h3_r_get_frequency(struct sxiccmu_softc *, uint32_t);
 uint32_t sxiccmu_r40_get_frequency(struct sxiccmu_softc *, uint32_t);
 int    sxiccmu_r40_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
+int    sxiccmu_v3s_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
+uint32_t sxiccmu_v3s_get_frequency(struct sxiccmu_softc *, uint32_t);
 uint32_t sxiccmu_nop_get_frequency(struct sxiccmu_softc *, uint32_t);
 int    sxiccmu_nop_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
 
@@ -122,6 +124,7 @@
                    OF_is_compatible(node, "allwinner,sun8i-a23") ||
                    OF_is_compatible(node, "allwinner,sun8i-a33") ||
                    OF_is_compatible(node, "allwinner,sun8i-h3") ||
+                   OF_is_compatible(node, "allwinner,sun8i-v3s") ||
                    OF_is_compatible(node, "allwinner,sun9i-a80") ||
                    OF_is_compatible(node, "allwinner,sun50i-a64") ||
                    OF_is_compatible(node, "allwinner,sun50i-h5"));
@@ -135,6 +138,7 @@
            OF_is_compatible(node, "allwinner,sun8i-h3-ccu") ||
            OF_is_compatible(node, "allwinner,sun8i-h3-r-ccu") ||
            OF_is_compatible(node, "allwinner,sun8i-r40-ccu") ||
+           OF_is_compatible(node, "allwinner,sun8i-v3s-ccu") ||
            OF_is_compatible(node, "allwinner,sun9i-a80-ccu") ||
            OF_is_compatible(node, "allwinner,sun9i-a80-usb-clks") ||
            OF_is_compatible(node, "allwinner,sun9i-a80-mmc-config-clk") ||
@@ -211,6 +215,14 @@
                sc->sc_nresets = nitems(sun8i_r40_resets);
                sc->sc_get_frequency = sxiccmu_r40_get_frequency;
                sc->sc_set_frequency = sxiccmu_r40_set_frequency;
+       } else if (OF_is_compatible(node, "allwinner,sun8i-v3s-ccu")) {
+               KASSERT(faa->fa_nreg > 0);
+               sc->sc_gates = sun8i_v3s_gates;
+               sc->sc_ngates = nitems(sun8i_v3s_gates);
+               sc->sc_resets = sun8i_v3s_resets;
+               sc->sc_nresets = nitems(sun8i_v3s_resets);
+               sc->sc_get_frequency = sxiccmu_v3s_get_frequency;
+               sc->sc_set_frequency = sxiccmu_v3s_set_frequency;
        } else if (OF_is_compatible(node, "allwinner,sun9i-a80-ccu")) {
                KASSERT(faa->fa_nreg > 0);
                sc->sc_gates = sun9i_a80_gates;
@@ -1233,6 +1245,65 @@
 }
 
 uint32_t
+sxiccmu_v3s_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
+{
+       uint32_t parent;
+       uint32_t reg, div;
+
+       switch (idx) {
+       case V3S_CLK_LOSC:
+               return clock_get_frequency(sc->sc_node, "losc");
+       case V3S_CLK_HOSC:
+               return clock_get_frequency(sc->sc_node, "hosc");
+       case V3S_CLK_PLL_PERIPH0:
+               /* Not hardcoded, but recommended. */
+               return 600000000;
+       case V3S_CLK_APB2:
+               /* XXX Controlled by a MUX. */
+               return 24000000;
+       case V3S_CLK_AHB1:
+               reg = SXIREAD4(sc, CCU_AHB1_APB1_CFG_REG);
+               div = CCU_AHB1_CLK_DIV_RATIO(reg);
+               switch (reg & CCU_AHB1_CLK_SRC_SEL) {
+               case CCU_AHB1_CLK_SRC_SEL_LOSC:
+                       parent = V3S_CLK_LOSC;
+                       break;
+               case CCU_AHB1_CLK_SRC_SEL_OSC24M:
+                       parent = V3S_CLK_HOSC;
+                       break;
+               case CCU_AHB1_CLK_SRC_SEL_AXI:
+                       parent = V3S_CLK_AXI;
+                       break;
+               case CCU_AHB1_CLK_SRC_SEL_PERIPH0:
+                       parent = V3S_CLK_PLL_PERIPH0;
+                       div *= CCU_AHB1_PRE_DIV(reg);
+                       break;
+               default:
+                       return 0;
+               }
+               return sxiccmu_ccu_get_frequency(sc, &parent) / div;
+       case V3S_CLK_AHB2:
+               reg = SXIREAD4(sc, CCU_AHB2_CFG_REG);
+               switch (reg & CCU_AHB2_CLK_CFG) {
+               case 0:
+                       parent = V3S_CLK_AHB1;
+                       div = 1;
+                       break;
+               case 1:
+                       parent = V3S_CLK_PLL_PERIPH0;
+                       div = 2;
+                       break;
+               default:
+                       return 0;
+               }
+               return sxiccmu_ccu_get_frequency(sc, &parent) / div;
+       }
+
+       printf("%s: 0x%08x\n", __func__, idx);
+       return 0;
+}
+
+uint32_t
 sxiccmu_nop_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
 {
        printf("%s: 0x%08x\n", __func__, idx);
@@ -1414,6 +1485,28 @@
                bus_space_subregion(sc->sc_iot, sc->sc_ioh,
                    sc->sc_gates[idx].reg, 4, &clock.sc_ioh);
                parent = R40_CLK_PLL_PERIPH0_2X;
+               parent_freq = sxiccmu_ccu_get_frequency(sc, &parent);
+               return sxiccmu_mmc_do_set_frequency(&clock, freq, parent_freq);
+       }
+
+       printf("%s: 0x%08x\n", __func__, idx);
+       return -1;
+}
+
+int
+sxiccmu_v3s_set_frequency(struct sxiccmu_softc *sc, uint32_t idx, uint32_t 
freq)
+{
+       struct sxiccmu_clock clock;
+       uint32_t parent, parent_freq;
+
+       switch (idx) {
+       case V3S_CLK_MMC0:
+       case V3S_CLK_MMC1:
+       case V3S_CLK_MMC2:
+               clock.sc_iot = sc->sc_iot;
+               bus_space_subregion(sc->sc_iot, sc->sc_ioh,
+                   sc->sc_gates[idx].reg, 4, &clock.sc_ioh);
+               parent = V3S_CLK_PLL_PERIPH0;
                parent_freq = sxiccmu_ccu_get_frequency(sc, &parent);
                return sxiccmu_mmc_do_set_frequency(&clock, freq, parent_freq);
        }
Index: sxiccmu_clocks.h
===================================================================
RCS file: /cvs/src/sys/dev/fdt/sxiccmu_clocks.h,v
retrieving revision 1.23
diff -u -r1.23 sxiccmu_clocks.h
--- sxiccmu_clocks.h    15 Jan 2019 16:07:42 -0000      1.23
+++ sxiccmu_clocks.h    4 Feb 2019 13:47:35 -0000
@@ -473,6 +473,58 @@
        [R40_CLK_USB_PHY2]  = { 0x00cc, 10 },
 };
 
+/* V3s */
+
+#define V3S_CLK_PLL_PERIPH0    5       // XXX
+#define V3S_CLK_AXI            6       // XXX
+#define V3S_CLK_AHB1           7       // XXX
+#define V3S_CLK_AHB2           8       // XXX
+#define V3S_CLK_APB2           9       // XXX
+
+#define V3S_CLK_BUS_MMC0       22
+#define V3S_CLK_BUS_MMC1       23
+#define V3S_CLK_BUS_MMC2       24
+#define V3S_CLK_BUS_EMAC       26
+#define V3S_CLK_BUS_EHCI0      30
+#define V3S_CLK_BUS_OHCI0      31
+#define V3S_CLK_BUS_PIO                37
+#define V3S_CLK_BUS_I2C0       38
+#define V3S_CLK_BUS_I2C1       39
+#define V3S_CLK_BUS_UART0      40
+#define V3S_CLK_BUS_UART1      41
+#define V3S_CLK_BUS_UART2      42
+#define V3S_CLK_BUS_EPHY       43
+
+#define V3S_CLK_MMC0           45
+#define V3S_CLK_MMC1           48
+#define V3S_CLK_MMC2           51
+#define V3S_CLK_USB_PHY0       56
+#define V3S_CLK_USB_OHCI0      57
+
+#define V3S_CLK_LOSC           254
+#define V3S_CLK_HOSC           253
+
+struct sxiccmu_ccu_bit sun8i_v3s_gates[] = {
+       [V3S_CLK_BUS_OHCI0] =   { 0x0060, 29 },
+       [V3S_CLK_BUS_EHCI0] =   { 0x0060, 26 },
+       [V3S_CLK_BUS_EMAC] =    { 0x0060, 17, V3S_CLK_AHB2 },
+       [V3S_CLK_BUS_MMC2] =    { 0x0060, 10 },
+       [V3S_CLK_BUS_MMC1] =    { 0x0060, 9 },
+       [V3S_CLK_BUS_MMC0] =    { 0x0060, 8 },
+       [V3S_CLK_BUS_PIO] =     { 0x0068, 5 },
+       [V3S_CLK_BUS_UART2] =   { 0x006c, 18, V3S_CLK_APB2 },
+       [V3S_CLK_BUS_UART1] =   { 0x006c, 17, V3S_CLK_APB2 },
+       [V3S_CLK_BUS_UART0] =   { 0x006c, 16, V3S_CLK_APB2 },
+       [V3S_CLK_BUS_I2C1] =    { 0x006c, 1, V3S_CLK_APB2 },
+       [V3S_CLK_BUS_I2C0] =    { 0x006c, 0, V3S_CLK_APB2 },
+       [V3S_CLK_BUS_EPHY] =    { 0x0070, 0 },
+       [V3S_CLK_MMC0] =        { 0x0088, 31 },
+       [V3S_CLK_MMC1] =        { 0x008c, 31 },
+       [V3S_CLK_MMC2] =        { 0x0090, 31 },
+       [V3S_CLK_USB_OHCI0] =   { 0x00cc, 16 },
+       [V3S_CLK_USB_PHY0] =    { 0x00cc, 8 },
+};
+
 /*
  * Reset Signals
  */
@@ -726,4 +778,37 @@
        [R40_RST_BUS_UART5] = { 0x02d8, 21 },
        [R40_RST_BUS_UART6] = { 0x02d8, 22 },
        [R40_RST_BUS_UART7] = { 0x02d8, 23 },
+};
+
+/* V3s */
+
+#define V3S_RST_USB_PHY0       0
+
+#define V3S_RST_BUS_MMC0       7
+#define V3S_RST_BUS_MMC1       8
+#define V3S_RST_BUS_MMC2       9
+#define V3S_RST_BUS_EMAC       12
+#define V3S_RST_BUS_EHCI0      18
+#define V3S_RST_BUS_OHCI0      22
+#define V3S_RST_BUS_EPHY       39
+#define V3S_RST_BUS_I2C0       46
+#define V3S_RST_BUS_I2C1       47
+#define V3S_RST_BUS_UART0      49
+#define V3S_RST_BUS_UART1      50
+#define V3S_RST_BUS_UART2      51
+
+struct sxiccmu_ccu_bit sun8i_v3s_resets[] = {
+       [V3S_RST_USB_PHY0] =    { 0x00cc, 0 },
+       [V3S_RST_BUS_OHCI0] =   { 0x02c0, 29 },
+       [V3S_RST_BUS_EHCI0] =   { 0x02c0, 26 },
+       [V3S_RST_BUS_EMAC] =    { 0x02c0, 17 },
+       [V3S_RST_BUS_MMC2] =    { 0x02c0, 10 },
+       [V3S_RST_BUS_MMC1] =    { 0x02c0, 9 },
+       [V3S_RST_BUS_MMC0] =    { 0x02c0, 8 },
+       [V3S_RST_BUS_EPHY] =    { 0x02c8, 2 },
+       [V3S_RST_BUS_UART2] =   { 0x02d8, 18 },
+       [V3S_RST_BUS_UART1] =   { 0x02d8, 17 },
+       [V3S_RST_BUS_UART0] =   { 0x02d8, 16 },
+       [V3S_RST_BUS_I2C1] =    { 0x02d8, 1 },
+       [V3S_RST_BUS_I2C0] =    { 0x02d8, 0 },
 };
Index: sxipio.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/sxipio.c,v
retrieving revision 1.9
diff -u -r1.9 sxipio.c
--- sxipio.c    28 Dec 2017 18:05:09 -0000      1.9
+++ sxipio.c    4 Feb 2019 13:47:35 -0000
@@ -154,6 +154,10 @@
                sun8i_h3_r_pins, nitems(sun8i_h3_r_pins)
        },
        {
+               "allwinner,sun8i-v3s-pinctrl",
+               sun8i_v3s_pins, nitems(sun8i_v3s_pins)
+       },
+       {
                "allwinner,sun9i-a80-pinctrl",
                sun9i_a80_pins, nitems(sun9i_a80_pins)
        },
Index: sxipio_pins.h
===================================================================
RCS file: /cvs/src/sys/dev/fdt/sxipio_pins.h,v
retrieving revision 1.5
diff -u -r1.5 sxipio_pins.h
--- sxipio_pins.h       28 Dec 2017 18:05:09 -0000      1.5
+++ sxipio_pins.h       4 Feb 2019 13:47:36 -0000
@@ -6485,6 +6485,323 @@
        } },
 };
 
+struct sxipio_pin sun8i_v3s_pins[] = {
+       { SXIPIO_PIN(B, 0), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "uart2", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 1), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "uart2", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 2), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "uart2", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 3), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "uart2", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 4), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "pwm0", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 5), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "pwm1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 6), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "i2c0", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 7), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "i2c0", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 8), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "i2c1", 2 },
+               { "uart0", 3 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(B, 9), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "i2c1", 2 },
+               { "uart0", 3 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(C, 0), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc2", 2 },
+               { "spi0", 3 },
+       } },
+       { SXIPIO_PIN(C, 1), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc2", 2 },
+               { "spi0", 3 },
+       } },
+       { SXIPIO_PIN(C, 2), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc2", 2 },
+               { "spi0", 3 },
+       } },
+       { SXIPIO_PIN(C, 3), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc2", 2 },
+               { "spi0", 3 },
+       } },
+       { SXIPIO_PIN(E, 0), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 1), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 2), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 3), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 4), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 5), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 6), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 7), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 8), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 9), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 10), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 11), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 12), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 13), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 14), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 15), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 16), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 17), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 18), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 19), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "lcd0", 3 },
+       } },
+       { SXIPIO_PIN(E, 20), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "mcsi", 3 },
+       } },
+       { SXIPIO_PIN(E, 21), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "i2c1", 3 },
+               { "uart1", 4 },
+       } },
+       { SXIPIO_PIN(E, 22), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "csi", 2 },
+               { "i2c1", 3 },
+               { "uart1", 4 },
+       } },
+       { SXIPIO_PIN(E, 23), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "lcd0", 3 },
+               { "uart1", 4 },
+       } },
+       { SXIPIO_PIN(E, 24), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "lcd0", 3 },
+               { "uart1", 4 },
+       } },
+       { SXIPIO_PIN(F, 0), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "jtag", 3 },
+       } },
+       { SXIPIO_PIN(F, 1), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "jtag", 3 },
+       } },
+       { SXIPIO_PIN(F, 2), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "uart0", 3 },
+       } },
+       { SXIPIO_PIN(F, 3), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "jtag", 3 },
+       } },
+       { SXIPIO_PIN(F, 4), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "uart0", 3 },
+       } },
+       { SXIPIO_PIN(F, 5), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc0", 2 },
+               { "jtag", 3 },
+       } },
+       { SXIPIO_PIN(F, 6), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+       } },
+       { SXIPIO_PIN(G, 0), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(G, 1), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(G, 2), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(G, 3), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(G, 4), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+       { SXIPIO_PIN(G, 5), {
+               { "gpio_in", 0 },
+               { "gpio_out", 1 },
+               { "mmc1", 2 },
+               { "irq", 6 },
+       } },
+};
+
 struct sxipio_pin sun9i_a80_pins[] = {
        { SXIPIO_PIN(A, 0), {
                { "gpio_in", 0 },

Reply via email to