On 17/02/17 17:43, Philipp Tomsich wrote: > Signed-off-by: Philipp Tomsich <[email protected]> > --- > arch/arm/include/asm/arch-sunxi/gpio.h | 3 +++ > arch/arm/mach-sunxi/clock.c | 2 ++ > board/sunxi/board.c | 18 ++++++++++++++++++ > 3 files changed, 23 insertions(+) > > diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h > b/arch/arm/include/asm/arch-sunxi/gpio.h > index 7cdf5a3..b85ca22 100644 > --- a/arch/arm/include/asm/arch-sunxi/gpio.h > +++ b/arch/arm/include/asm/arch-sunxi/gpio.h > @@ -109,120 +109,123 @@ struct sunxi_gpio_reg { > enum sunxi_gpio_number { > SUNXI_GPIO_A_START = 0, > SUNXI_GPIO_B_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_A), > SUNXI_GPIO_C_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_B), > SUNXI_GPIO_D_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_C), > SUNXI_GPIO_E_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_D), > SUNXI_GPIO_F_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_E), > SUNXI_GPIO_G_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_F), > SUNXI_GPIO_H_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_G), > SUNXI_GPIO_I_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_H), > SUNXI_GPIO_L_START = 352, > SUNXI_GPIO_M_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_L), > SUNXI_GPIO_N_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_M), > SUNXI_GPIO_AXP0_START = 1024, > }; > > /* SUNXI GPIO number definitions */ > #define SUNXI_GPA(_nr) (SUNXI_GPIO_A_START + (_nr)) > #define SUNXI_GPB(_nr) (SUNXI_GPIO_B_START + (_nr)) > #define SUNXI_GPC(_nr) (SUNXI_GPIO_C_START + (_nr)) > #define SUNXI_GPD(_nr) (SUNXI_GPIO_D_START + (_nr)) > #define SUNXI_GPE(_nr) (SUNXI_GPIO_E_START + (_nr)) > #define SUNXI_GPF(_nr) (SUNXI_GPIO_F_START + (_nr)) > #define SUNXI_GPG(_nr) (SUNXI_GPIO_G_START + (_nr)) > #define SUNXI_GPH(_nr) (SUNXI_GPIO_H_START + (_nr)) > #define SUNXI_GPI(_nr) (SUNXI_GPIO_I_START + (_nr)) > #define SUNXI_GPL(_nr) (SUNXI_GPIO_L_START + (_nr)) > #define SUNXI_GPM(_nr) (SUNXI_GPIO_M_START + (_nr)) > #define SUNXI_GPN(_nr) (SUNXI_GPIO_N_START + (_nr)) > > #define SUNXI_GPAXP0(_nr) (SUNXI_GPIO_AXP0_START + (_nr)) > > /* GPIO pin function config */ > #define SUNXI_GPIO_INPUT 0 > #define SUNXI_GPIO_OUTPUT 1 > #define SUNXI_GPIO_DISABLE 7 > > #define SUNXI_GPA_EMAC 2 > #define SUN6I_GPA_GMAC 2 > #define SUN7I_GPA_GMAC 5 > #define SUN6I_GPA_SDC2 5 > #define SUN6I_GPA_SDC3 4 > #define SUN8I_H3_GPA_UART0 2 > > #define SUN4I_GPB_PWM 2 > #define SUN4I_GPB_TWI0 2 > #define SUN4I_GPB_TWI1 2 > #define SUN5I_GPB_TWI1 2 > #define SUN4I_GPB_TWI2 2 > #define SUN5I_GPB_TWI2 2 > #define SUN6I_GPB_TWI3 4 > #define SUN4I_GPB_UART0 2 > #define SUN5I_GPB_UART0 2 > #define SUN8I_GPB_UART2 2 > #define SUN8I_A33_GPB_UART0 3 > #define SUN8I_A83T_GPB_UART0 2 > #define SUN50I_GPB_UART0 4 > > #define SUNXI_GPC_NAND 2 > #define SUNXI_GPC_SPI0 3 > #define SUNXI_GPC_SDC2 3 > #define SUN6I_GPC_SDC3 4 > #define SUN50I_GPC_SPI0 4 > > #define SUN8I_GPD_SDC1 3 > #define SUNXI_GPD_LCD0 2 > #define SUNXI_GPD_LVDS0 3 > > #define SUN5I_GPE_SDC2 3 > #define SUN8I_GPE_TWI2 3 > +#define SUN50I_GPE_TWI2 3 > > #define SUNXI_GPF_SDC0 2 > #define SUNXI_GPF_UART0 4 > #define SUN8I_GPF_UART0 3 > > #define SUN4I_GPG_SDC1 4 > #define SUN5I_GPG_SDC1 2 > #define SUN6I_GPG_SDC1 2 > #define SUN8I_GPG_SDC1 2 > #define SUN6I_GPG_TWI3 2 > #define SUN6I_GPG_UART2 2 > #define SUN5I_GPG_UART1 4 > #define SUN6I_GPG_USB3 3 > > #define SUN6I_GPH_PWM 2 > #define SUN8I_GPH_PWM 2 > #define SUN4I_GPH_SDC1 5 > #define SUN6I_GPH_TWI0 2 > #define SUN8I_GPH_TWI0 2 > +#define SUN50I_GPH_TWI0 2 > #define SUN6I_GPH_TWI1 2 > #define SUN8I_GPH_TWI1 2 > +#define SUN50I_GPH_TWI1 2 > #define SUN6I_GPH_TWI2 2 > #define SUN6I_GPH_UART0 2 > #define SUN9I_GPH_UART0 2 > > #define SUNXI_GPI_SDC3 2 > #define SUN7I_GPI_TWI3 3 > #define SUN7I_GPI_TWI4 3 > > #define SUN6I_GPL0_R_P2WI_SCK 3 > #define SUN6I_GPL1_R_P2WI_SDA 3 > > #define SUN8I_GPL_R_RSB 2 > #define SUN8I_H3_GPL_R_TWI 2 > #define SUN8I_A23_GPL_R_TWI 3 > #define SUN8I_GPL_R_UART 2 > > #define SUN9I_GPN_R_RSB 3 > > /* GPIO pin pull-up/down config */ > #define SUNXI_GPIO_PULL_DISABLE 0 > #define SUNXI_GPIO_PULL_UP 1 > #define SUNXI_GPIO_PULL_DOWN 2 > > /* Virtual AXP0 GPIOs */ > #define SUNXI_GPIO_AXP0_PREFIX "AXP0-" > #define SUNXI_GPIO_AXP0_VBUS_DETECT 4 > #define SUNXI_GPIO_AXP0_VBUS_ENABLE 5 > #define SUNXI_GPIO_AXP0_GPIO_COUNT 6 > > diff --git a/arch/arm/mach-sunxi/clock.c b/arch/arm/mach-sunxi/clock.c > index e6f53f9..457a076 100644 > --- a/arch/arm/mach-sunxi/clock.c > +++ b/arch/arm/mach-sunxi/clock.c > @@ -41,31 +41,33 @@ int clock_init(void) > int clock_twi_onoff(int port, int state) > { > struct sunxi_ccm_reg *const ccm = > (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; > > +#if !defined(CONFIG_MACH_SUN50I) > if (port == 5) { > if (state) > prcm_apb0_enable( > PRCM_APB0_GATE_PIO | PRCM_APB0_GATE_I2C); > else > prcm_apb0_disable( > PRCM_APB0_GATE_PIO | PRCM_APB0_GATE_I2C); > return 0; > } > +#endif > > /* set the apb clock gate and reset for twi */ > if (state) { > setbits_le32(&ccm->apb2_gate, > CLK_GATE_OPEN << (APB2_GATE_TWI_SHIFT + port)); > setbits_le32(&ccm->apb2_reset_cfg, > 1 << (APB2_RESET_TWI_SHIFT + port)); > } else { > clrbits_le32(&ccm->apb2_reset_cfg, > 1 << (APB2_RESET_TWI_SHIFT + port)); > clrbits_le32(&ccm->apb2_gate, > CLK_GATE_OPEN << (APB2_GATE_TWI_SHIFT + port)); > } > > return 0; > } > #endif > diff --git a/board/sunxi/board.c b/board/sunxi/board.c > index bba9b7c..a47b113 100644 > --- a/board/sunxi/board.c > +++ b/board/sunxi/board.c > @@ -485,90 +485,108 @@ int board_mmc_init(bd_t *bis) > void i2c_init_board(void) > { > #ifdef CONFIG_I2C0_ENABLE > #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN5I) || > defined(CONFIG_MACH_SUN7I) > sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUN4I_GPB_TWI0); > sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUN4I_GPB_TWI0); > clock_twi_onoff(0, 1); > #elif defined(CONFIG_MACH_SUN6I) > sunxi_gpio_set_cfgpin(SUNXI_GPH(14), SUN6I_GPH_TWI0); > sunxi_gpio_set_cfgpin(SUNXI_GPH(15), SUN6I_GPH_TWI0); > clock_twi_onoff(0, 1); > #elif defined(CONFIG_MACH_SUN8I) > sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN8I_GPH_TWI0); > sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN8I_GPH_TWI0); > clock_twi_onoff(0, 1); > +#elif defined(CONFIG_MACH_SUN50I) > + sunxi_gpio_set_cfgpin(SUNXI_GPH(0), SUN50I_GPH_TWI0); > + sunxi_gpio_set_cfgpin(SUNXI_GPH(1), SUN50I_GPH_TWI0); > + /* The A64-uQ7 doesn't have external pull-ups for I2C[01]. */ > + sunxi_gpio_set_pull(SUNXI_GPH(0), SUNXI_GPIO_PULL_UP); > + sunxi_gpio_set_pull(SUNXI_GPH(1), SUNXI_GPIO_PULL_UP);
Is this specific to your board? Which isn't officially supported yet? And having a DM conversion would make this easily fixable via DT, I guess? > + clock_twi_onoff(0, 1); > #endif > #endif > > #ifdef CONFIG_I2C1_ENABLE > #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) > sunxi_gpio_set_cfgpin(SUNXI_GPB(18), SUN4I_GPB_TWI1); > sunxi_gpio_set_cfgpin(SUNXI_GPB(19), SUN4I_GPB_TWI1); > clock_twi_onoff(1, 1); > #elif defined(CONFIG_MACH_SUN5I) > sunxi_gpio_set_cfgpin(SUNXI_GPB(15), SUN5I_GPB_TWI1); > sunxi_gpio_set_cfgpin(SUNXI_GPB(16), SUN5I_GPB_TWI1); > clock_twi_onoff(1, 1); > #elif defined(CONFIG_MACH_SUN6I) > sunxi_gpio_set_cfgpin(SUNXI_GPH(16), SUN6I_GPH_TWI1); > sunxi_gpio_set_cfgpin(SUNXI_GPH(17), SUN6I_GPH_TWI1); > clock_twi_onoff(1, 1); > #elif defined(CONFIG_MACH_SUN8I) > sunxi_gpio_set_cfgpin(SUNXI_GPH(4), SUN8I_GPH_TWI1); > sunxi_gpio_set_cfgpin(SUNXI_GPH(5), SUN8I_GPH_TWI1); > clock_twi_onoff(1, 1); > +#elif defined(CONFIG_MACH_SUN50I) > + sunxi_gpio_set_cfgpin(SUNXI_GPH(2), SUN50I_GPH_TWI1); > + sunxi_gpio_set_cfgpin(SUNXI_GPH(3), SUN50I_GPH_TWI1); > + /* The A64-uQ7 doesn't have external pull-ups for I2C[01]. */ > + sunxi_gpio_set_pull(SUNXI_GPH(2), SUNXI_GPIO_PULL_UP); > + sunxi_gpio_set_pull(SUNXI_GPH(3), SUNXI_GPIO_PULL_UP); Same here. Other than that the pins and mux match the manual. Cheers, Andre. > + clock_twi_onoff(1, 1); > #endif > #endif > > #ifdef CONFIG_I2C2_ENABLE > #if defined(CONFIG_MACH_SUN4I) || defined(CONFIG_MACH_SUN7I) > sunxi_gpio_set_cfgpin(SUNXI_GPB(20), SUN4I_GPB_TWI2); > sunxi_gpio_set_cfgpin(SUNXI_GPB(21), SUN4I_GPB_TWI2); > clock_twi_onoff(2, 1); > #elif defined(CONFIG_MACH_SUN5I) > sunxi_gpio_set_cfgpin(SUNXI_GPB(17), SUN5I_GPB_TWI2); > sunxi_gpio_set_cfgpin(SUNXI_GPB(18), SUN5I_GPB_TWI2); > clock_twi_onoff(2, 1); > #elif defined(CONFIG_MACH_SUN6I) > sunxi_gpio_set_cfgpin(SUNXI_GPH(18), SUN6I_GPH_TWI2); > sunxi_gpio_set_cfgpin(SUNXI_GPH(19), SUN6I_GPH_TWI2); > clock_twi_onoff(2, 1); > #elif defined(CONFIG_MACH_SUN8I) > sunxi_gpio_set_cfgpin(SUNXI_GPE(12), SUN8I_GPE_TWI2); > sunxi_gpio_set_cfgpin(SUNXI_GPE(13), SUN8I_GPE_TWI2); > clock_twi_onoff(2, 1); > +#elif defined(CONFIG_MACH_SUN50I) > + sunxi_gpio_set_cfgpin(SUNXI_GPE(14), SUN50I_GPE_TWI2); > + sunxi_gpio_set_cfgpin(SUNXI_GPE(15), SUN50I_GPE_TWI2); > + clock_twi_onoff(2, 1); > #endif > #endif > > #ifdef CONFIG_I2C3_ENABLE > #if defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_SUNXI_PANGOLIN) > sunxi_gpio_set_cfgpin(SUNXI_GPG(10), SUN6I_GPG_TWI3); > sunxi_gpio_set_cfgpin(SUNXI_GPG(11), SUN6I_GPG_TWI3); > clock_twi_onoff(3, 1); > #elif defined(CONFIG_MACH_SUN6I) && defined(CONFIG_SUNXI_PANGOLIN) > sunxi_gpio_set_cfgpin(SUNXI_GPB(6), SUN6I_GPB_TWI3); > sunxi_gpio_set_cfgpin(SUNXI_GPB(5), SUN6I_GPB_TWI3); > clock_twi_onoff(3, 1); > #elif defined(CONFIG_MACH_SUN7I) > sunxi_gpio_set_cfgpin(SUNXI_GPI(0), SUN7I_GPI_TWI3); > sunxi_gpio_set_cfgpin(SUNXI_GPI(1), SUN7I_GPI_TWI3); > clock_twi_onoff(3, 1); > #endif > #endif > > #ifdef CONFIG_I2C4_ENABLE > #if defined(CONFIG_MACH_SUN7I) > sunxi_gpio_set_cfgpin(SUNXI_GPI(2), SUN7I_GPI_TWI4); > sunxi_gpio_set_cfgpin(SUNXI_GPI(3), SUN7I_GPI_TWI4); > clock_twi_onoff(4, 1); > #endif > #endif > > #ifdef CONFIG_R_I2C_ENABLE > clock_twi_onoff(5, 1); > sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN8I_H3_GPL_R_TWI); > sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN8I_H3_GPL_R_TWI); > #endif > } > > #ifdef CONFIG_SPL_BUILD > _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

