
-----Original Message----- From: Hans de Goede [mailto:hdegoede@redhat.com] Sent: 09 June 2014 22:44 To: Albert ARIBAUD Cc: Heiko Schocher; Henrik Nordström; Ian Campbell; u- boot@lists.denx.de; Prafulla Wadaskar Subject: Re: [PATCH 2/5] sunxi: Add i2c support
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.
That's okay Hans
Regards,
Hans
Signed-off-by: Hans de Goede hdegoede@redhat.com Acked-by: Ian Campbell ijc@hellion.org.uk
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 <common.h> +#include <i2c.h> #include <netdev.h> #include <miiphy.h> #include <serial.h> @@ -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 <asm/arch/cpu.h>
+#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 <asm/arch/orion5x.h> #elif defined(CONFIG_KIRKWOOD) #include <asm/arch/kirkwood.h> +#elif defined(CONFIG_SUNXI) +#include <asm/arch/i2c.h> #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
I ack the changes to this file in this patch. Acked-By: Prafulla Wadaskar prafulla@marvell.com
Regards... Prafulla . . .