i2c: sunxi: Support every i2c controller on each supported platform
Subsystems (4)
v5 cover i2c: sunxi: Support every i2c controller on each supported platform
Changes since v4:
* Got rid of Kconfig after all
* Only build mvtwsi when at least one controller is enabled on sunxi
* Controller 0 doesn't have to be enabled in particular
Changes since v3:
* Kconfig support for MVTWSI
* Only enable twsi0 by default for platforms that always use it for the AXP
* Remove enabling other I2C busses by default on boards that expose them on pin headers since those might be used for some other functionalities
Changes since v2:
* I2C/TWI busses enable for Cubietruck as well
Changes since v1:
* Kconfig option to enable I2C/TWI controllers 1-4 (when applicable)
* Following patch to enable exposed busses on a few community-supported single-board-computers
This series adds support for every i2c controller found on sun4i/sun5i/sun6i/sun7i/sun8i platforms and shouldn't break support for Marvell platforms (orion5x, kirkwood, armada xp) the driver was originally written for.
Regarding sunxi, I double-checked that this doesn't conflict with VIDEO_LCD_PANEL_I2C.
I would be interested in having this tested on sun8i (A23), since I changed TWI0 muxing (to PH2-PH3 instead of PB0-PB1), according to the user manual and what is being done on the upstream Linux kernel. I2C was either not working before, or it was being muxed correctly by the bootrom, probably to communicate with the AXP, which luckily made it work in U-Boot too, since the I/O base address was already correct.
My use case here is that I'm writing a slave-side bitbang i2c implementation (with an Arduino) for a school project, using a Cubieboard2 as master and U-Boot as POC. However, only TWI1 was available through the expansion pins, hence the need for this series.
PATCH v5 1/2 i2c: mvtwsi: Support for up to 4 different controllers
Orion5x, Kirkwood and Armada XP platforms come with a single TWSI (I2C) MVTWSI controller. However, other platforms using MVTWSI may come with more: this is the case on Allwinner (sunxi) platforms, where up to 4 controllers can be found on the same chip.
--- arch/arm/include/asm/arch-sunxi/i2c.h | 2 +- arch/arm/mach-kirkwood/include/mach/config.h | 2 +- drivers/i2c/mvtwsi.c | 128 +++++++++++++++++++++------ include/configs/db-mv784mp-gp.h | 2 +- include/configs/edminiv2.h | 2 +- include/configs/maxbcm.h | 2 +- 6 files changed, 104 insertions(+), 34 deletions(-)
arch/arm/include/asm/arch-sunxi/i2c.h +1 -1
@@ -8,7 +8,7 @@#include <asm/arch/cpu.h> -#define CONFIG_I2C_MVTWSI_BASE SUNXI_TWI0_BASE +#define CONFIG_I2C_MVTWSI_BASE0 SUNXI_TWI0_BASE/* This is abp0-clk on sun4i/5i/7i / abp1-clk on sun6i/sun8i which is 24MHz */ #define CONFIG_SYS_TCLK 24000000
arch/arm/mach-kirkwood/include/mach/config.h +1 -1
@@ -44,7 +44,7 @@#define CONFIG_SYS_INIT_SP_ADDR 0xC8012000#define CONFIG_NR_DRAM_BANKS_MAX 2 -#define CONFIG_I2C_MVTWSI_BASE KW_TWSI_BASE +#define CONFIG_I2C_MVTWSI_BASE0 KW_TWSI_BASE#define MV_UART_CONSOLE_BASE KW_UART0_BASE#define MV_SATA_BASE KW_SATA_BASE#define MV_SATA_PORT0_OFFSET KW_SATA_PORT0_OFFSET
drivers/i2c/mvtwsi.c +99 -29
275 lines not on this page · raw message
include/configs/db-mv784mp-gp.h +1 -1
@@ -37,7 +37,7 @@/* I2C */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MVTWSI -#define CONFIG_I2C_MVTWSI_BASE MVEBU_TWSI_BASE +#define CONFIG_I2C_MVTWSI_BASE0 MVEBU_TWSI_BASE#define CONFIG_SYS_I2C_SLAVE 0x0#define CONFIG_SYS_I2C_SPEED 100000
include/configs/edminiv2.h +1 -1
@@ -208,7 +208,7 @@#ifdef CONFIG_CMD_I2C #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MVTWSI -#define CONFIG_I2C_MVTWSI_BASE ORION5X_TWSI_BASE +#define CONFIG_I2C_MVTWSI_BASE0 ORION5X_TWSI_BASE#define CONFIG_SYS_I2C_SLAVE 0x0#define CONFIG_SYS_I2C_SPEED 100000#endif
include/configs/maxbcm.h +1 -1
@@ -35,7 +35,7 @@/* I2C */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MVTWSI -#define CONFIG_I2C_MVTWSI_BASE MVEBU_TWSI_BASE +#define CONFIG_I2C_MVTWSI_BASE0 MVEBU_TWSI_BASE#define CONFIG_SYS_I2C_SLAVE 0x0#define CONFIG_SYS_I2C_SPEED 100000
Signature · 1 line
1.9.1
PATCH v5 2/2 sunxi: Complete i2c support for each supported platform
In reply to Paul KocialkowskiSunxi platforms come with at least 3 TWI (I2C) controllers and some platforms even have up to 5. This adds support for every controller on each supported platform, which is especially useful when using expansion ports on single-board- computers.
--- arch/arm/include/asm/arch-sunxi/cpu_sun4i.h | 7 +++ arch/arm/include/asm/arch-sunxi/gpio.h | 15 +++++- arch/arm/include/asm/arch-sunxi/i2c.h | 15 ++++++ board/sunxi/Kconfig | 38 ++++++++++++++ board/sunxi/board.c | 77 ++++++++++++++++++++++++++++- include/configs/sunxi-common.h | 4 ++ 6 files changed, 153 insertions(+), 3 deletions(-)
arch/arm/include/asm/arch-sunxi/cpu_sun4i.h +7 -0
@@ -94,6 +94,13 @@#define SUNXI_TWI0_BASE 0x01c2ac00#define SUNXI_TWI1_BASE 0x01c2b000#define SUNXI_TWI2_BASE 0x01c2b400 +#ifdef CONFIG_MACH_SUN6I +#define SUNXI_TWI3_BASE 0x01c0b800 +#endif +#ifdef CONFIG_MACH_SUN7I +#define SUNXI_TWI3_BASE 0x01c2b800 +#define SUNXI_TWI4_BASE 0x01c2c000 +#endif #define SUNXI_CAN_BASE 0x01c2bc00
arch/arm/include/asm/arch-sunxi/gpio.h +14 -1
@@ -148,7 +148,11 @@ enum sunxi_gpio_number {#define SUN6I_GPA_SDC2 5#define SUN6I_GPA_SDC3 4 -#define SUNXI_GPB_TWI0 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 SUN4I_GPB_UART0 2#define SUN5I_GPB_UART0 2
@@ -160,6 +164,7 @@ enum sunxi_gpio_number {#define SUNXI_GPD_LVDS0 3#define SUN5I_GPE_SDC2 3 +#define SUN8I_GPE_TWI2 3#define SUNXI_GPF_SDC0 2#define SUNXI_GPF_UART0 4
@@ -169,12 +174,20 @@ enum sunxi_gpio_number {#define SUN5I_GPG_SDC1 2#define SUN6I_GPG_SDC1 2#define SUN8I_GPG_SDC1 2 +#define SUN6I_GPG_TWI3 2#define SUN5I_GPG_UART1 4#define SUN4I_GPH_SDC1 5 +#define SUN6I_GPH_TWI0 2 +#define SUN8I_GPH_TWI0 2 +#define SUN6I_GPH_TWI1 2 +#define SUN8I_GPH_TWI1 2 +#define SUN6I_GPH_TWI2 2#define SUN6I_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
arch/arm/include/asm/arch-sunxi/i2c.h +15 -0
@@ -8,7 +8,22 @@#include <asm/arch/cpu.h> +#ifdef CONFIG_I2C0_ENABLE #define CONFIG_I2C_MVTWSI_BASE0 SUNXI_TWI0_BASE +#endif +#ifdef CONFIG_I2C1_ENABLE +#define CONFIG_I2C_MVTWSI_BASE1 SUNXI_TWI1_BASE +#endif +#ifdef CONFIG_I2C2_ENABLE +#define CONFIG_I2C_MVTWSI_BASE2 SUNXI_TWI2_BASE +#endif +#ifdef CONFIG_I2C3_ENABLE +#define CONFIG_I2C_MVTWSI_BASE3 SUNXI_TWI3_BASE +#endif +#ifdef CONFIG_I2C4_ENABLE +#define CONFIG_I2C_MVTWSI_BASE4 SUNXI_TWI4_BASE +#endif +/* This is abp0-clk on sun4i/5i/7i / abp1-clk on sun6i/sun8i which is 24MHz */ #define CONFIG_SYS_TCLK 24000000
board/sunxi/Kconfig +38 -0
@@ -269,6 +269,44 @@ config USB2_VBUS_PIN ---help--- See USB1_VBUS_PIN help text. +config I2C0_ENABLE + bool "Enable I2C/TWI controller 0" + default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I + default n if MACH_SUN6I || MACH_SUN8I + ---help--- + This allows enabling I2C/TWI controller 0 by muxing its pins, enabling + its clock and setting up the bus. This is especially useful on devices + with slaves connected to the bus or with pins exposed through e.g. an + expansion port/header. + +config I2C1_ENABLE + bool "Enable I2C/TWI controller 1" + default n + ---help--- + See I2C0_ENABLE help text. + +config I2C2_ENABLE + bool "Enable I2C/TWI controller 2" + default n + ---help--- + See I2C0_ENABLE help text. + +if MACH_SUN6I || MACH_SUN7I +config I2C3_ENABLE + bool "Enable I2C/TWI controller 3" + default n + ---help--- + See I2C0_ENABLE help text. +endif + +if MACH_SUN7I +config I2C4_ENABLE + bool "Enable I2C/TWI controller 4" + default n + ---help--- + See I2C0_ENABLE help text. +endif + config VIDEO boolean "Enable graphical uboot console on HDMI, LCD or VGA" default y
board/sunxi/board.c +75 -2
84 lines not on this page · raw message
include/configs/sunxi-common.h +4 -0
@@ -197,7 +197,11 @@#endif #define CONFIG_SYS_I2C +#if definedCONFIG_I2C0_ENABLE || definedCONFIG_I2C1_ENABLE || \ + definedCONFIG_I2C2_ENABLE || definedCONFIG_I2C3_ENABLE || \ + definedCONFIG_I2C4_ENABLE #define CONFIG_SYS_I2C_MVTWSI +#endif #define CONFIG_SYS_I2C_SPEED 400000#define CONFIG_SYS_I2C_SLAVE 0x7f
Signature · 1 line
1.9.1
v5 cover i2c: sunxi: Support every i2c controller on each supported platform
In reply to Paul KocialkowskiThis version is ready for merging by the way.
I didn't use Kconfig after all, since all the Marvell boards are including this through config.h and I didn't feel like moving it all to Kconfig. Moreover, this doesn't use DM and apparently, only I2C drivers that use DM are in Kconfig now.
Also, I don't think it makes sense to make twsi0 more privileged than the other controllers. Users might just need to enable, say, controller 1, without enabling controller 0 on sunxi.
Le vendredi 10 avril 2015 ? 23:09 +0200, Paul Kocialkowski a ?crit :
Quoted 33 lines
Changes since v4:
* Got rid ofKconfigafter all
* Only build mvtwsi when at least one controller is enabled on sunxi
* Controller 0 doesn't have to be enabled in particularChanges since v3:
*Kconfigsupport for MVTWSI
* Only enable twsi0 by default for platforms that always use it for the AXP
* Remove enabling other I2C busses by default on boards that expose them on pin headers since those might be used for some other functionalitiesChanges since v2:
* I2C/TWI busses enable for Cubietruck as wellChanges since v1:
*Kconfigoption to enable I2C/TWI controllers 1-4 (when applicable)
* Following patch to enable exposed busses on a few community-supported single-board-computersThis series adds support for every i2c controller found on sun4i/sun5i/sun6i/sun7i/sun8i platforms and shouldn't break support for Marvell platforms (orion5x, kirkwood, armada xp) the driver was originally written for.
Regarding sunxi, I double-checked that this doesn't conflict with
VIDEO_LCD_PANEL_I2C.I would be interested in having this tested on sun8i (A23), since I changed TWI0 muxing (to PH2-PH3 instead of PB0-PB1), according to the user manual and what is being done on the upstream Linux kernel. I2C was either not working before, or it was being muxed correctly by the bootrom, probably to communicate with the AXP, which luckily made it work in U-Boot too, since the I/O base address was already correct.
Quoted 4 lines
My use case here is that I'm writing a slave-side bitbang i2c implementation (with an Arduino) for a school project, using a Cubieboard2 as master and U-Boot as POC. However, only TWI1 was available through the expansion pins, hence the need for this series.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150414/7e4c8110/attachment.sig>
v5 cover i2c: sunxi: Support every i2c controller on each supported platform
In reply to Paul KocialkowskiHi,
Quoted 33 lines · Paul Kocialkowski
Changes since v4:
* Got rid ofKconfigafter all
* Only build mvtwsi when at least one controller is enabled on sunxi
* Controller 0 doesn't have to be enabled in particularChanges since v3:
*Kconfigsupport for MVTWSI
* Only enable twsi0 by default for platforms that always use it for the AXP
* Remove enabling other I2C busses by default on boards that expose them on pin headers since those might be used for some other functionalitiesChanges since v2:
* I2C/TWI busses enable for Cubietruck as wellChanges since v1:
*Kconfigoption to enable I2C/TWI controllers 1-4 (when applicable)
* Following patch to enable exposed busses on a few community-supported single-board-computersThis series adds support for every i2c controller found on sun4i/sun5i/sun6i/sun7i/sun8i platforms and shouldn't break support for Marvell platforms (orion5x, kirkwood, armada xp) the driver was originally written for.
Regarding sunxi, I double-checked that this doesn't conflict with
VIDEO_LCD_PANEL_I2C.I would be interested in having this tested on sun8i (A23), since I changed TWI0 muxing (to PH2-PH3 instead of PB0-PB1), according to the user manual and what is being done on the upstream Linux kernel. I2C was either not working before, or it was being muxed correctly by the bootrom, probably to communicate with the AXP, which luckily made it work in U-Boot too, since the I/O base address was already correct.
Quoted 5 lines
My use case here is that I'm writing a slave-side bitbang i2c implementation (with an Arduino) for a school project, using a Cubieboard2 as master and U-Boot as POC. However, only TWI1 was available through the expansion pins, hence the need for this series.
Thanks, merged into u-boot-sunxi/next with Heiko's ack for the first patch,
Regards,
Hans