On Tue, Dec 26, 2017 at 01:15:35PM +0800, Kevin Lo wrote:
> The diff below adds support for the "next-generation" clock and pinctrl
> bindings for the Allwinner A33.
> 
> Tested on my Banana Pi M2 Magic.  dmesg: http://ix.io/DoB
> ok?
> 
> Index: sys/dev/fdt/ehci_fdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/ehci_fdt.c,v
> retrieving revision 1.2
> diff -u -p -u -p -r1.2 ehci_fdt.c
> --- sys/dev/fdt/ehci_fdt.c    17 Dec 2017 13:23:03 -0000      1.2
> +++ sys/dev/fdt/ehci_fdt.c    25 Dec 2017 09:43:48 -0000
> @@ -273,9 +273,10 @@ sun4i_phy_init(struct ehci_fdt_softc *sc
>  
>       /*
>        * We need to poke an undocumented register to make the PHY
> -      * work on Allwinner H3/H5/A64.
> +      * work on Allwinner H3/H5/A33/A64.
>        */
> -     if (OF_is_compatible(node, "allwinner,sun8i-h3-usb-phy") ||
> +     if (OF_is_compatible(node, "allwinner,sun8i-a33-usb-phy") ||
> +         OF_is_compatible(node, "allwinner,sun8i-h3-usb-phy") ||
>           OF_is_compatible(node, "allwinner,sun50i-a64-usb-phy")) {
>               val = bus_space_read_4(sc->sc.iot, sc->sc.ioh, 0x810);
>               val &= ~(1 << 1);

Is this actually required?  U-Boot only does it for h3/h5.

If so should "allwinner,sun8i-a23-usb-phy" and
"allwinner,sun8i-v3s-usb-phy" also be added?

> Index: sys/dev/fdt/sxiccmu.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxiccmu.c,v
> retrieving revision 1.12
> diff -u -p -u -p -r1.12 sxiccmu.c
> --- sys/dev/fdt/sxiccmu.c     24 Dec 2017 18:24:06 -0000      1.12
> +++ sys/dev/fdt/sxiccmu.c     25 Dec 2017 09:43:48 -0000
> @@ -88,6 +88,8 @@ void        sxiccmu_ccu_reset(void *, uint32_t 
>  
>  uint32_t sxiccmu_a10_get_frequency(struct sxiccmu_softc *, uint32_t);
>  int  sxiccmu_a10_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
> +uint32_t sxiccmu_a23_get_frequency(struct sxiccmu_softc *, uint32_t);
> +int  sxiccmu_a23_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
>  uint32_t sxiccmu_a64_get_frequency(struct sxiccmu_softc *, uint32_t);
>  int  sxiccmu_a64_set_frequency(struct sxiccmu_softc *, uint32_t, uint32_t);
>  uint32_t sxiccmu_a80_get_frequency(struct sxiccmu_softc *, uint32_t);
> @@ -110,6 +112,8 @@ sxiccmu_match(struct device *parent, voi
>                   OF_is_compatible(node, "allwinner,sun5i-a10s") ||
>                   OF_is_compatible(node, "allwinner,sun5i-r8") ||
>                   OF_is_compatible(node, "allwinner,sun7i-a20") ||
> +                 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,sun9i-a80") ||
>                   OF_is_compatible(node, "allwinner,sun50i-a64") ||
> @@ -118,6 +122,8 @@ sxiccmu_match(struct device *parent, voi
>  
>       return (OF_is_compatible(node, "allwinner,sun4i-a10-ccu") ||
>           OF_is_compatible(node, "allwinner,sun7i-a20-ccu") ||
> +         OF_is_compatible(node, "allwinner,sun8i-a23-ccu") ||
> +         OF_is_compatible(node, "allwinner,sun8i-a33-ccu") ||
>           OF_is_compatible(node, "allwinner,sun8i-h3-ccu") ||
>           OF_is_compatible(node, "allwinner,sun9i-a80-ccu") ||
>           OF_is_compatible(node, "allwinner,sun9i-a80-usb-clks") ||
> @@ -150,6 +156,15 @@ sxiccmu_attach(struct device *parent, st
>               sc->sc_nresets = nitems(sun4i_a10_resets);
>               sc->sc_get_frequency = sxiccmu_a10_get_frequency;
>               sc->sc_set_frequency = sxiccmu_a10_set_frequency;
> +     } else if (OF_is_compatible(node, "allwinner,sun8i-a23-ccu") ||
> +         OF_is_compatible(node, "allwinner,sun8i-a33-ccu")) {
> +             KASSERT(faa->fa_nreg > 0);
> +             sc->sc_gates = sun8i_a23_gates;
> +             sc->sc_ngates = nitems(sun8i_a23_gates);
> +             sc->sc_resets = sun8i_a23_resets;
> +             sc->sc_nresets = nitems(sun8i_a23_resets);
> +             sc->sc_get_frequency = sxiccmu_a23_get_frequency;
> +             sc->sc_set_frequency = sxiccmu_a23_set_frequency;
>       } else if (OF_is_compatible(node, "allwinner,sun8i-h3-ccu") ||
>           OF_is_compatible(node, "allwinner,sun50i-h5-ccu")) {
>               KASSERT(faa->fa_nreg > 0);
> @@ -357,6 +372,32 @@ struct sxiccmu_device sxiccmu_devices[] 
>               .get_frequency = sxiccmu_apbs_get_frequency
>       },
>       {
> +             .compat = "allwinner,sun8i-a23-ahb1-gates-clk",
> +             .get_frequency = sxiccmu_gen_get_frequency,
> +             .enable = sxiccmu_gate_enable
> +     },
> +     {
> +             .compat = "allwinner,sun8i-a23-apb0-gates-clk",
> +             .get_frequency = sxiccmu_gen_get_frequency,
> +             .enable = sxiccmu_gate_enable
> +     },
> +     {
> +             .compat = "allwinner,sun8i-a23-apb1-gates-clk",
> +             .get_frequency = sxiccmu_gen_get_frequency,
> +             .enable = sxiccmu_gate_enable
> +     },
> +     {
> +             .compat = "allwinner,sun8i-a23-apb2-gates-clk",
> +             .get_frequency = sxiccmu_gen_get_frequency,
> +             .enable = sxiccmu_gate_enable
> +     },
> +     {
> +             .compat = "allwinner,sun8i-a23-usb-clk",
> +             .get_frequency = sxiccmu_gen_get_frequency,
> +             .enable = sxiccmu_gate_enable,
> +             .reset = sxiccmu_reset
> +     },
> +     {
>               .compat = "allwinner,sun8i-h3-apb0-gates-clk",
>               .get_frequency = sxiccmu_gen_get_frequency,
>               .enable = sxiccmu_gate_enable
> @@ -829,6 +870,50 @@ sxiccmu_a10_get_frequency(struct sxiccmu
>  #define CCU_AHB2_CLK_CFG             (3 << 0)
>  
>  uint32_t
> +sxiccmu_a23_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
> +{
> +     uint32_t parent;
> +     uint32_t reg, div;
> +
> +     switch (idx) {
> +     case A23_CLK_LOSC:
> +             return clock_get_frequency(sc->sc_node, "losc");
> +     case A23_CLK_HOSC:
> +             return clock_get_frequency(sc->sc_node, "hosc");
> +     case A23_CLK_PLL_PERIPH:
> +             /* Not hardcoded, but recommended. */
> +             return 600000000;
> +     case A23_CLK_APB2:
> +             /* XXX Controlled by a MUX. */
> +             return 24000000;
> +     case A23_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 = A23_CLK_LOSC;
> +                     break;
> +             case CCU_AHB1_CLK_SRC_SEL_OSC24M:
> +                     parent = A23_CLK_HOSC;
> +                     break;
> +             case CCU_AHB1_CLK_SRC_SEL_AXI:
> +                     parent = A23_CLK_AXI;
> +                     break;
> +             case CCU_AHB1_CLK_SRC_SEL_PERIPH0:
> +                     parent = A23_CLK_PLL_PERIPH;
> +                     div *= CCU_AHB1_PRE_DIV(reg);
> +                     break;
> +             default:
> +                     return 0;
> +             }
> +             return sxiccmu_ccu_get_frequency(sc, &parent) / div;
> +     }
> +
> +     printf("%s: 0x%08x\n", __func__, idx);
> +     return 0;
> +}
> +
> +uint32_t
>  sxiccmu_a64_get_frequency(struct sxiccmu_softc *sc, uint32_t idx)
>  {
>       uint32_t parent;
> @@ -995,6 +1080,28 @@ sxiccmu_a10_set_frequency(struct sxiccmu
>               bus_space_subregion(sc->sc_iot, sc->sc_ioh,
>                   sc->sc_gates[idx].reg, 4, &clock.sc_ioh);
>               parent = A10_CLK_PLL_PERIPH;
> +             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_a23_set_frequency(struct sxiccmu_softc *sc, uint32_t idx, uint32_t 
> freq)
> +{
> +     struct sxiccmu_clock clock;
> +     uint32_t parent, parent_freq;
> +
> +     switch (idx) {
> +     case A23_CLK_MMC0:
> +     case A23_CLK_MMC1:
> +     case A23_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 = A23_CLK_PLL_PERIPH;
>               parent_freq = sxiccmu_ccu_get_frequency(sc, &parent);
>               return sxiccmu_mmc_do_set_frequency(&clock, freq, parent_freq);
>       }
> Index: sys/dev/fdt/sxiccmu_clocks.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxiccmu_clocks.h,v
> retrieving revision 1.11
> diff -u -p -u -p -r1.11 sxiccmu_clocks.h
> --- sys/dev/fdt/sxiccmu_clocks.h      24 Dec 2017 18:24:06 -0000      1.11
> +++ sys/dev/fdt/sxiccmu_clocks.h      25 Dec 2017 09:43:48 -0000
> @@ -80,6 +80,54 @@ struct sxiccmu_ccu_bit sun4i_a10_gates[]
>       [A10_CLK_USB_PHY] =    { 0x00cc, 8 },
>  };
>  
> +/* A23/A33 */
> +
> +#define A23_CLK_PLL_PERIPH   10
> +
> +#define A23_CLK_AXI          19
> +#define A23_CLK_AHB1         20
> +#define A23_CLK_APB1         21
> +#define A23_CLK_APB2         22
> +
> +#define A23_CLK_BUS_MMC0     26
> +#define A23_CLK_BUS_MMC1     27
> +#define A23_CLK_BUS_MMC2     28
> +#define A23_CLK_BUS_EHCI     35
> +#define A23_CLK_BUS_OHCI     36
> +#define A23_CLK_BUS_PIO              48
> +#define A23_CLK_BUS_I2C0     51
> +#define A23_CLK_BUS_I2C1     52
> +#define A23_CLK_BUS_I2C2     53
> +#define A23_CLK_BUS_UART0    54
> +#define A23_CLK_BUS_UART1    55
> +#define A23_CLK_BUS_UART2    56
> +#define A23_CLK_BUS_UART3    57
> +#define A23_CLK_BUS_UART4    58
> +
> +#define A23_CLK_MMC0         60
> +#define A23_CLK_MMC1         63
> +#define A23_CLK_MMC2         66
> +
> +struct sxiccmu_ccu_bit sun8i_a23_gates[] = {
> +     [A23_CLK_BUS_MMC0] =  { 0x0060, 8 },
> +     [A23_CLK_BUS_MMC1] =  { 0x0060, 9 },
> +     [A23_CLK_BUS_MMC2] =  { 0x0060, 10 },
> +     [A23_CLK_BUS_EHCI] =  { 0x0060, 26 },
> +     [A23_CLK_BUS_OHCI] =  { 0x0060, 29 },
> +     [A23_CLK_BUS_PIO] =   { 0x0068, 5 },
> +     [A23_CLK_BUS_I2C0] =  { 0x006c, 0, A23_CLK_APB2 },
> +     [A23_CLK_BUS_I2C1] =  { 0x006c, 1, A23_CLK_APB2 },
> +     [A23_CLK_BUS_I2C2] =  { 0x006c, 2, A23_CLK_APB2 },
> +     [A23_CLK_BUS_UART0] = { 0x006c, 16, A23_CLK_APB2 },
> +     [A23_CLK_BUS_UART1] = { 0x006c, 17, A23_CLK_APB2 },
> +     [A23_CLK_BUS_UART2] = { 0x006c, 18, A23_CLK_APB2 },
> +     [A23_CLK_BUS_UART3] = { 0x006c, 19, A23_CLK_APB2 },
> +     [A23_CLK_BUS_UART4] = { 0x006c, 20, A23_CLK_APB2 },
> +     [A23_CLK_MMC0] =      { 0x0088, 31 },
> +     [A23_CLK_MMC1] =      { 0x008c, 31 },
> +     [A23_CLK_MMC2] =      { 0x0090, 31 },
> +};
> +
>  /* A64 */
>  
>  #define A64_CLK_PLL_PERIPH0  11
> @@ -307,6 +355,38 @@ struct sxiccmu_ccu_bit sun4i_a10_resets[
>       [A10_RST_USB_PHY0] = { 0x00cc, 0 },
>       [A10_RST_USB_PHY1] = { 0x00cc, 1 },
>       [A10_RST_USB_PHY2] = { 0x00cc, 2 },
> +};
> +
> +/* A23/A33 */
> +
> +#define A23_RST_USB_PHY0     0
> +#define A23_RST_USB_PHY1     1
> +
> +#define A23_RST_BUS_MMC0     7
> +#define A23_RST_BUS_MMC1     8
> +#define A23_RST_BUS_MMC2     9
> +
> +#define A23_RST_BUS_EHCI     16
> +#define A23_RST_BUS_OHCI     17
> +
> +#define A23_RST_BUS_I2C0     32
> +#define A23_RST_BUS_I2C1     33
> +#define A23_RST_BUS_I2C2     34
> +
> +#define A23_CLK_HOSC         253
> +#define A23_CLK_LOSC         254
> +
> +struct sxiccmu_ccu_bit sun8i_a23_resets[] = {
> +     [A23_RST_USB_PHY0] =  { 0x00cc, 0 },
> +     [A23_RST_USB_PHY1] =  { 0x00cc, 1 },
> +     [A23_RST_BUS_MMC0] =  { 0x02c0, 8 },
> +     [A23_RST_BUS_MMC1] =  { 0x02c0, 9 },
> +     [A23_RST_BUS_MMC2] =  { 0x02c0, 10 },
> +     [A23_RST_BUS_EHCI] =  { 0x02c0, 26 },
> +     [A23_RST_BUS_OHCI] =  { 0x02c0, 29 },
> +     [A23_RST_BUS_I2C0] =  { 0x02d8, 0 },
> +     [A23_RST_BUS_I2C1] =  { 0x02d8, 1 },
> +     [A23_RST_BUS_I2C2] =  { 0x02d8, 2 },
>  };
>  
>  /* A64 */
> Index: sys/dev/fdt/sxipio.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxipio.c,v
> retrieving revision 1.6
> diff -u -p -u -p -r1.6 sxipio.c
> --- sys/dev/fdt/sxipio.c      23 Dec 2017 12:28:45 -0000      1.6
> +++ sys/dev/fdt/sxipio.c      25 Dec 2017 09:43:48 -0000
> @@ -134,6 +134,10 @@ struct sxipio_pins sxipio_pins[] = {
>               sun7i_a20_pins, nitems(sun7i_a20_pins)
>       },
>       {
> +             "allwinner,sun8i-a33-pinctrl",
> +             sun8i_a33_pins, nitems(sun8i_a33_pins)
> +     },
> +     {
>               "allwinner,sun8i-h3-pinctrl",
>               sun8i_h3_pins, nitems(sun8i_h3_pins)
>       },
> Index: sys/dev/fdt/sxipio_pins.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/sxipio_pins.h,v
> retrieving revision 1.2
> diff -u -p -u -p -r1.2 sxipio_pins.h
> --- sys/dev/fdt/sxipio_pins.h 23 Dec 2017 12:55:26 -0000      1.2
> +++ sys/dev/fdt/sxipio_pins.h 25 Dec 2017 09:43:48 -0000
> @@ -3513,6 +3513,555 @@ struct sxipio_pin sun7i_a20_pins[] = {
>       } },
>  };
>  
> +struct sxipio_pin sun8i_a33_pins[] = {
> +     { SXIPIO_PIN(B, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "uart0", 3 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "uart0", 3 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart2", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s0", 2 },
> +             { "aif2", 3 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s0", 2 },
> +             { "aif2", 3 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s0", 2 },
> +             { "aif2", 3 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(B, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s0", 2 },
> +             { "aif2", 3 },
> +             { "irq", 4 },
> +     } },
> +     { 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 },
> +             { "mmc2", 3 },
> +     } },
> +     { 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 },
> +     } },
> +     { 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 },
> +             { "mmc2", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "mmc1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "uart1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "uart1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "uart1", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "uart1", 3 },
> +     } },
> +     { 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 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 19), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 20), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 21), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 22), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 23), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 24), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 25), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 26), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(D, 27), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "lcd0", 2 },
> +             { "lvds0", 3 },
> +     } },
> +     { SXIPIO_PIN(E, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +     } },
> +     { SXIPIO_PIN(E, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +             { "i2c2", 3 },
> +     } },
> +     { SXIPIO_PIN(E, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "csi", 2 },
> +             { "i2c2", 3 },
> +     } },
> +     { SXIPIO_PIN(E, 14), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +     } },
> +     { SXIPIO_PIN(E, 15), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +     } },
> +     { SXIPIO_PIN(E, 16), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +     } },
> +     { SXIPIO_PIN(E, 17), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +     } },
> +     { 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(G, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "mmc1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 8), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "uart1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 10), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 11), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 12), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(G, 13), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2s1", 2 },
> +             { "irq", 4 },
> +     } },
> +     { SXIPIO_PIN(H, 0), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "pwm0", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 1), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "pwm1", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 2), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2c0", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 3), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2c0", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 4), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2c1", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 5), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "i2c1", 2 },
> +     } },
> +     { SXIPIO_PIN(H, 6), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "spi0", 2 },
> +             { "uart3", 3 },
> +     } },
> +     { SXIPIO_PIN(H, 7), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "spi0", 2 },
> +             { "uart3", 3 },
> +     } },
> +     { SXIPIO_PIN(H, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "spi0", 2 },
> +             { "uart3", 3 },
> +     } },
> +     { SXIPIO_PIN(H, 9), {
> +             { "gpio_in", 0 },
> +             { "gpio_out", 1 },
> +             { "spi0", 2 },
> +             { "uart3", 3 },
> +     } },
> +};
> +
>  struct sxipio_pin sun8i_h3_pins[] = {
>       { SXIPIO_PIN(A, 0), {
>               { "gpio_in", 0 },
> 

Reply via email to