[U-Boot] [PATCH] arm: socfpga: Add I2C support to SoCFPGA

This patch adds I2C support for the SoCFPGA. Using the designware I2C controller driver. It supports all 4 I2C busses on the SoCFPGA.
Signed-off-by: Stefan Roese sr@denx.de Cc: Marek Vasut marex@denx.de Cc: Vince Briders vbridger@altera.com Cc: Chin Liang See clsee@altera.com Cc: Dinh Nguyen dinguyen@altera.com --- include/configs/socfpga_common.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/include/configs/socfpga_common.h b/include/configs/socfpga_common.h index 49504dc..ba1e072 100644 --- a/include/configs/socfpga_common.h +++ b/include/configs/socfpga_common.h @@ -157,6 +157,28 @@ #define CONFIG_BAUDRATE 115200
/* + * I2C support + */ +#define CONFIG_HARD_I2C +#define CONFIG_DW_I2C +#define CONFIG_I2C_MULTI_BUS +#define CONFIG_SYS_I2C_BUS_MAX 4 +#define CONFIG_SYS_I2C_BASE SOCFPGA_I2C0_ADDRESS +#define CONFIG_SYS_I2C_BASE1 SOCFPGA_I2C1_ADDRESS +#define CONFIG_SYS_I2C_BASE2 SOCFPGA_I2C2_ADDRESS +#define CONFIG_SYS_I2C_BASE3 SOCFPGA_I2C3_ADDRESS +/* using standard mode which the speed up to 100Kb/s */ +#define CONFIG_SYS_I2C_SPEED 100000 +/* address of device when used as slave */ +#define CONFIG_SYS_I2C_SLAVE 0x02 +#ifndef __ASSEMBLY__ +/* clock supplied to I2C controller in unit of MHz */ +unsigned int cm_get_l4_sp_clk_hz(void); +#define IC_CLK (cm_get_l4_sp_clk_hz() / 1000000) +#endif +#define CONFIG_CMD_I2C + +/* * U-Boot environment */ #define CONFIG_SYS_CONSOLE_IS_IN_ENV

On Monday, October 20, 2014 at 08:45:48 AM, Stefan Roese wrote:
Hi all,
This patch adds I2C support for the SoCFPGA. Using the designware I2C controller driver. It supports all 4 I2C busses on the SoCFPGA.
Signed-off-by: Stefan Roese sr@denx.de Cc: Marek Vasut marex@denx.de Cc: Vince Briders vbridger@altera.com Cc: Chin Liang See clsee@altera.com Cc: Dinh Nguyen dinguyen@altera.com
+CC Heiko, the I2C custodian.
include/configs/socfpga_common.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/include/configs/socfpga_common.h b/include/configs/socfpga_common.h index 49504dc..ba1e072 100644 --- a/include/configs/socfpga_common.h +++ b/include/configs/socfpga_common.h @@ -157,6 +157,28 @@ #define CONFIG_BAUDRATE 115200
/*
- I2C support
- */
+#define CONFIG_HARD_I2C +#define CONFIG_DW_I2C +#define CONFIG_I2C_MULTI_BUS
I presume this should be converted to CONFIG_SYS_I2C framework instead of using this I2C multibus horror, no?
+#define CONFIG_SYS_I2C_BUS_MAX 4 +#define CONFIG_SYS_I2C_BASE SOCFPGA_I2C0_ADDRESS +#define CONFIG_SYS_I2C_BASE1 SOCFPGA_I2C1_ADDRESS +#define CONFIG_SYS_I2C_BASE2 SOCFPGA_I2C2_ADDRESS +#define CONFIG_SYS_I2C_BASE3 SOCFPGA_I2C3_ADDRESS +/* using standard mode which the speed up to 100Kb/s */ +#define CONFIG_SYS_I2C_SPEED 100000 +/* address of device when used as slave */ +#define CONFIG_SYS_I2C_SLAVE 0x02 +#ifndef __ASSEMBLY__ +/* clock supplied to I2C controller in unit of MHz */ +unsigned int cm_get_l4_sp_clk_hz(void);
Include clock_manager.h instead maybe ?
+#define IC_CLK (cm_get_l4_sp_clk_hz() / 1000000) +#endif +#define CONFIG_CMD_I2C
+/*
- U-Boot environment
*/ #define CONFIG_SYS_CONSOLE_IS_IN_ENV
Best regards, Marek Vasut

Hello Marek,
Am 20.10.2014 16:46, schrieb Marek Vasut:
On Monday, October 20, 2014 at 08:45:48 AM, Stefan Roese wrote:
Hi all,
This patch adds I2C support for the SoCFPGA. Using the designware I2C controller driver. It supports all 4 I2C busses on the SoCFPGA.
Signed-off-by: Stefan Roesesr@denx.de Cc: Marek Vasutmarex@denx.de Cc: Vince Bridersvbridger@altera.com Cc: Chin Liang Seeclsee@altera.com Cc: Dinh Nguyendinguyen@altera.com
+CC Heiko, the I2C custodian.
Thanks! As I am just not really find time to work, I do not look into the u-boot ML ...
include/configs/socfpga_common.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/include/configs/socfpga_common.h b/include/configs/socfpga_common.h index 49504dc..ba1e072 100644 --- a/include/configs/socfpga_common.h +++ b/include/configs/socfpga_common.h @@ -157,6 +157,28 @@ #define CONFIG_BAUDRATE 115200
/*
- I2C support
- */
+#define CONFIG_HARD_I2C
No ... do not add this define please.
+#define CONFIG_DW_I2C +#define CONFIG_I2C_MULTI_BUS
I presume this should be converted to CONFIG_SYS_I2C framework instead of using this I2C multibus horror, no?
... Yes, please!
Which i2c driver does socfpga use? If it is the "drivers/i2c/designware_i2c.c" driver, please convert it to the "CONFIG_SYS_I2C" framework.
You may also take a look into Simons RFC patches, which introduce DM model: http://lists.denx.de/pipermail/u-boot/2014-October/191497.html
bye, Heiko
+#define CONFIG_SYS_I2C_BUS_MAX 4 +#define CONFIG_SYS_I2C_BASE SOCFPGA_I2C0_ADDRESS +#define CONFIG_SYS_I2C_BASE1 SOCFPGA_I2C1_ADDRESS +#define CONFIG_SYS_I2C_BASE2 SOCFPGA_I2C2_ADDRESS +#define CONFIG_SYS_I2C_BASE3 SOCFPGA_I2C3_ADDRESS +/* using standard mode which the speed up to 100Kb/s */ +#define CONFIG_SYS_I2C_SPEED 100000 +/* address of device when used as slave */ +#define CONFIG_SYS_I2C_SLAVE 0x02 +#ifndef __ASSEMBLY__ +/* clock supplied to I2C controller in unit of MHz */ +unsigned int cm_get_l4_sp_clk_hz(void);
Include clock_manager.h instead maybe ?
+#define IC_CLK (cm_get_l4_sp_clk_hz() / 1000000) +#endif +#define CONFIG_CMD_I2C
+/*
- U-Boot environment
*/ #define CONFIG_SYS_CONSOLE_IS_IN_ENV
Best regards, Marek Vasut

Hi Marek, Hi Heiko!
On 21.10.2014 08:44, Heiko Schocher wrote:
/*
- I2C support
- */
+#define CONFIG_HARD_I2C
No ... do not add this define please.
+#define CONFIG_DW_I2C +#define CONFIG_I2C_MULTI_BUS
I presume this should be converted to CONFIG_SYS_I2C framework instead of using this I2C multibus horror, no?
... Yes, please!
Which i2c driver does socfpga use? If it is the "drivers/i2c/designware_i2c.c" driver, please convert it to the "CONFIG_SYS_I2C" framework.
Yes. Its the designware driver.
I wanted to make this I2C support for SoCFPGA least intrusive. But I see your point. Moving this driver to the new I2C framework makes sense.
You may also take a look into Simons RFC patches, which introduce DM model: http://lists.denx.de/pipermail/u-boot/2014-October/191497.html
This seems a bit too early for me.
I'll try to find some time to move to the "CONFIG_SYS_I2C" framework...
Thanks, Stefan

On Thursday, October 23, 2014 at 09:55:25 AM, Stefan Roese wrote:
Hi Marek, Hi Heiko!
Hi all!
On 21.10.2014 08:44, Heiko Schocher wrote:
/*
- I2C support
- */
+#define CONFIG_HARD_I2C
No ... do not add this define please.
+#define CONFIG_DW_I2C +#define CONFIG_I2C_MULTI_BUS
I presume this should be converted to CONFIG_SYS_I2C framework instead of using this I2C multibus horror, no?
... Yes, please!
Which i2c driver does socfpga use? If it is the "drivers/i2c/designware_i2c.c" driver, please convert it to the "CONFIG_SYS_I2C" framework.
Yes. Its the designware driver.
I wanted to make this I2C support for SoCFPGA least intrusive. But I see your point. Moving this driver to the new I2C framework makes sense.
You may also take a look into Simons RFC patches, which introduce DM model: http://lists.denx.de/pipermail/u-boot/2014-October/191497.html
This seems a bit too early for me.
I'll try to find some time to move to the "CONFIG_SYS_I2C" framework...
I think this makes sense indeed and helps a lot. Thank you very much!
Best regards, Marek Vasut
participants (3)
-
Heiko Schocher
-
Marek Vasut
-
Stefan Roese