From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Mon, 09 Jun 2014 19:13:56 +0200 Subject: [U-Boot] [PATCH 2/5] sunxi: Add i2c support In-Reply-To: References: <1402326930-19246-1-git-send-email-hdegoede@redhat.com> <1402326930-19246-3-git-send-email-hdegoede@redhat.com> Message-ID: <5395EB54.7080408@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 06/09/2014 06:09 PM, Albert ARIBAUD wrote: > Hi Hans, > > On Mon, 9 Jun 2014 17:15:27 +0200, Hans de Goede > wrote: > >> Add support for the i2c controller found on all Allwinner sunxi SoCs, >> this is the same controller as found on the Marvell orion5x and kirkwood >> SoC families, with a slightly different register layout, so this patch uses >> the existing mvtwsi code. > > Should not affect orion or kirkwood, since you're just adding a > variant to the "include switch case" where it was intended; but just in > case, I'm Cc:ing Prafulla here. Ah, good idea, thanks. Prafulla, this patch indeed does not affect orion or kirkwood, but the previous patch in the series does, if you could review and/or test it that would be great. And sorry for not CC-ing you on that patch from the get go. Regards, Hans > >> Signed-off-by: Hans de Goede >> Acked-by: Ian Campbell >> --- >> arch/arm/cpu/armv7/sunxi/board.c | 6 ++++++ >> arch/arm/cpu/armv7/sunxi/u-boot-spl.lds | 5 +++++ >> arch/arm/include/asm/arch-sunxi/i2c.h | 15 +++++++++++++++ >> board/sunxi/board.c | 7 +++++++ >> drivers/i2c/mvtwsi.c | 18 ++++++++++++++++++ >> include/configs/sunxi-common.h | 8 ++++++++ >> 6 files changed, 59 insertions(+) >> create mode 100644 arch/arm/include/asm/arch-sunxi/i2c.h >> >> diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c >> index 1e506b5..024c8c1 100644 >> --- a/arch/arm/cpu/armv7/sunxi/board.c >> +++ b/arch/arm/cpu/armv7/sunxi/board.c >> @@ -11,6 +11,7 @@ >> */ >> >> #include >> +#include >> #include >> #include >> #include >> @@ -91,11 +92,16 @@ void s_init(void) >> clock_init(); >> timer_init(); >> gpio_init(); >> + i2c_init_board(); >> >> #ifdef CONFIG_SPL_BUILD >> gd = &gdata; >> preloader_console_init(); >> >> +#ifdef CONFIG_SPL_I2C_SUPPORT >> + /* Needed early by sunxi_board_init if PMU is enabled */ >> + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); >> +#endif >> sunxi_board_init(); >> #endif >> } >> diff --git a/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds b/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds >> index c1ae227..53f0cbd 100644 >> --- a/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds >> +++ b/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds >> @@ -39,6 +39,11 @@ SECTIONS >> .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram >> >> . = ALIGN(4); >> + .u_boot_list : { >> + KEEP(*(SORT(.u_boot_list*))); >> + } > .sram >> + >> + . = ALIGN(4); > > This adds the U-Boot commands section to an SPL linker script, which > seems to imply it was not there before. Are you actually adding command > line to the SPL of this board family? > >> __image_copy_end = .; >> _end = .; >> >> diff --git a/arch/arm/include/asm/arch-sunxi/i2c.h b/arch/arm/include/asm/arch-sunxi/i2c.h >> new file mode 100644 >> index 0000000..dc5406b >> --- /dev/null >> +++ b/arch/arm/include/asm/arch-sunxi/i2c.h >> @@ -0,0 +1,15 @@ >> +/* >> + * Copyright 2014 - Hans de Goede >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> +#ifndef _SUNXI_I2C_H_ >> +#define _SUNXI_I2C_H_ >> + >> +#include >> + >> +#define CONFIG_I2C_MVTWSI_BASE SUNXI_TWI0_BASE >> +/* This is abp0-clk on sun4i/5i/7i / abp1-clk on sun6i/sun8i which is 24MHz */ >> +#define CONFIG_SYS_TCLK 24000000 >> + >> +#endif >> diff --git a/board/sunxi/board.c b/board/sunxi/board.c >> index b05d0b9..543b809 100644 >> --- a/board/sunxi/board.c >> +++ b/board/sunxi/board.c >> @@ -106,6 +106,13 @@ int board_mmc_init(bd_t *bis) >> } >> #endif >> >> +void i2c_init_board(void) >> +{ >> + sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUNXI_GPB0_TWI0); >> + sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUNXI_GPB0_TWI0); >> + clock_twi_onoff(0, 1); >> +} >> + >> #ifdef CONFIG_SPL_BUILD >> void sunxi_board_init(void) >> { >> diff --git a/drivers/i2c/mvtwsi.c b/drivers/i2c/mvtwsi.c >> index d3457b9..ad1ce8f 100644 >> --- a/drivers/i2c/mvtwsi.c >> +++ b/drivers/i2c/mvtwsi.c >> @@ -22,6 +22,8 @@ >> #include >> #elif defined(CONFIG_KIRKWOOD) >> #include >> +#elif defined(CONFIG_SUNXI) >> +#include >> #else >> #error Driver mvtwsi not supported by SoC or board >> #endif >> @@ -30,6 +32,20 @@ >> * TWSI register structure >> */ >> >> +#ifdef CONFIG_SUNXI >> + >> +struct mvtwsi_registers { >> + u32 slave_address; >> + u32 xtnd_slave_addr; >> + u32 data; >> + u32 control; >> + u32 status; >> + u32 baudrate; >> + u32 soft_reset; >> +}; >> + >> +#else >> + >> struct mvtwsi_registers { >> u32 slave_address; >> u32 data; >> @@ -43,6 +59,8 @@ struct mvtwsi_registers { >> u32 soft_reset; >> }; >> >> +#endif >> + >> /* >> * Control register fields >> */ >> diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h >> index 3f04890..42b0d2e 100644 >> --- a/include/configs/sunxi-common.h >> +++ b/include/configs/sunxi-common.h >> @@ -161,6 +161,14 @@ >> #undef CONFIG_CMD_NET >> #undef CONFIG_CMD_NFS >> >> +/* I2C */ >> +#define CONFIG_SPL_I2C_SUPPORT >> +#define CONFIG_SYS_I2C >> +#define CONFIG_SYS_I2C_MVTWSI >> +#define CONFIG_SYS_I2C_SPEED 400000 >> +#define CONFIG_SYS_I2C_SLAVE 0x7f >> +#define CONFIG_CMD_I2C >> + >> #ifndef CONFIG_CONS_INDEX >> #define CONFIG_CONS_INDEX 1 /* UART0 */ >> #endif > > > Amicalement, >