[U-Boot] [PATCH 0/5] I2C cleanup before removal of deprecated commands

Hi Heiko, These 5 patches should clean up the compile issues that you noticed after application of the "[PATCH v2 0/7] Remove individual I2C commands and cleanup" series.
I only have a build environment for powerpc boards so it'd be much appreciated if other architectures could do some basic compile testing after the "Remove individual I2C commands and cleanup" series is applied to the i2c repository.
Assuming these patches are accepted, the original "v2 Remove individual I2C commands and cleanup" series should then be applied.
Thanks, Peter
Peter Tyser (5): i2c.h: Provide a default CONFIG_SYS_I2C_SLAVE value cpci750: i2c cleanup Marvell: i2c cleanup mpc7448hpc2: Add CONFIG_SYS_I2C_SPEED define tsi108_i2c: Add i2c_init() stub function
board/Marvell/common/i2c.c | 19 ++++++++++++------- board/esd/cpci750/i2c.c | 16 ++++++++++------ common/cmd_eeprom.c | 4 ---- cpu/mpc8260/i2c.c | 3 --- cpu/ppc4xx/40x_spd_sdram.c | 4 ---- cpu/ppc4xx/44x_spd_ddr.c | 4 ---- drivers/i2c/tsi108_i2c.c | 9 +++++++++ include/configs/mpc7448hpc2.h | 1 + include/i2c.h | 12 +++++++++--- 9 files changed, 41 insertions(+), 31 deletions(-)

Many boards/controllers/drivers don't support an I2C slave interface, however CONFIG_SYS_I2C_SLAVE is used in common code so provide a default
Signed-off-by: Peter Tyser ptyser@xes-inc.com --- common/cmd_eeprom.c | 4 ---- cpu/mpc8260/i2c.c | 3 --- cpu/ppc4xx/40x_spd_sdram.c | 4 ---- cpu/ppc4xx/44x_spd_ddr.c | 4 ---- include/i2c.h | 12 +++++++++--- 5 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/common/cmd_eeprom.c b/common/cmd_eeprom.c index e598bf1..f749087 100644 --- a/common/cmd_eeprom.c +++ b/common/cmd_eeprom.c @@ -401,10 +401,6 @@ eeprom_probe (unsigned dev_addr, unsigned offset) #define CONFIG_SYS_I2C_SPEED 50000 #endif
-#ifndef CONFIG_SYS_I2C_SLAVE -#define CONFIG_SYS_I2C_SLAVE 0xFE -#endif - void eeprom_init (void) { #if defined(CONFIG_SPI) diff --git a/cpu/mpc8260/i2c.c b/cpu/mpc8260/i2c.c index 35cf8f1..2b954b4 100644 --- a/cpu/mpc8260/i2c.c +++ b/cpu/mpc8260/i2c.c @@ -58,9 +58,6 @@ static unsigned int i2c_bus_num __attribute__ ((section (".data"))) = 0; #define CONFIG_SYS_I2C_SPEED 50000 #endif
-#ifndef CONFIG_SYS_I2C_SLAVE -#define CONFIG_SYS_I2C_SLAVE 0xFE -#endif /*----------------------------------------------------------------------- */
diff --git a/cpu/ppc4xx/40x_spd_sdram.c b/cpu/ppc4xx/40x_spd_sdram.c index 57861b3..75bd70d 100644 --- a/cpu/ppc4xx/40x_spd_sdram.c +++ b/cpu/ppc4xx/40x_spd_sdram.c @@ -56,10 +56,6 @@ #define CONFIG_SYS_I2C_SPEED 50000 #endif
-#ifndef CONFIG_SYS_I2C_SLAVE -#define CONFIG_SYS_I2C_SLAVE 0xFE -#endif - #define ONE_BILLION 1000000000
#define SDRAM0_CFG_DCE 0x80000000 diff --git a/cpu/ppc4xx/44x_spd_ddr.c b/cpu/ppc4xx/44x_spd_ddr.c index 153391e..f26fcda 100644 --- a/cpu/ppc4xx/44x_spd_ddr.c +++ b/cpu/ppc4xx/44x_spd_ddr.c @@ -66,10 +66,6 @@ #define CONFIG_SYS_I2C_SPEED 50000 #endif
-#ifndef CONFIG_SYS_I2C_SLAVE -#define CONFIG_SYS_I2C_SLAVE 0xFE -#endif - #define ONE_BILLION 1000000000
/* diff --git a/include/i2c.h b/include/i2c.h index f8a59a6..668e754 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -78,16 +78,22 @@ #endif
#ifdef CONFIG_8xx -/* Set default values for the I2C bus speed and slave address on 8xx. In the +/* Set default value for the I2C bus speed on 8xx. In the * future, we'll define these in all 8xx board config files. */ #ifndef CONFIG_SYS_I2C_SPEED #define CONFIG_SYS_I2C_SPEED 50000 #endif +#endif
+/* + * Many boards/controllers/drivers don't support an I2C slave interface so + * provide a default slave address for them for use in common code. A real + * value for CONFIG_SYS_I2C_SLAVE should be defined for any board which does + * support a slave interface. + */ #ifndef CONFIG_SYS_I2C_SLAVE -#define CONFIG_SYS_I2C_SLAVE 0xFE -#endif +#define CONFIG_SYS_I2C_SLAVE 0xfe #endif
/*

The following changes were made, primarily to bring the cpci750 i2c driver in line with U-Boot's current I2C API: - Made i2c_init() globally accessible - Made i2c_read() and i2c_write() return an integer - Updated i2c_init() calls to pass in CONFIG_SYS_I2C_SLAVE in the offhand chance someone adds slave support in the future
Signed-off-by: Peter Tyser ptyser@xes-inc.com --- board/esd/cpci750/i2c.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/board/esd/cpci750/i2c.c b/board/esd/cpci750/i2c.c index d95567f..b752903 100644 --- a/board/esd/cpci750/i2c.c +++ b/board/esd/cpci750/i2c.c @@ -27,6 +27,7 @@ #include <common.h> #include <mpc8xx.h> #include <malloc.h> +#include <i2c.h> #include "../../Marvell/include/mv_gen_reg.h" #include "../../Marvell/include/core.h"
@@ -41,7 +42,7 @@
/* Assuming that there is only one master on the bus (us) */
-static void i2c_init (int speed, int slaveaddr) +void i2c_init (int speed, int slaveaddr) { unsigned int n, m, freq, margin, power; unsigned int actualN = 0, actualM = 0; @@ -375,7 +376,7 @@ i2c_set_dev_offset (uchar dev_addr, unsigned int offset, int ten_bit, return 0; /* sucessful completion */ }
-uchar +int i2c_read (uchar dev_addr, unsigned int offset, int alen, uchar * data, int len) { @@ -384,7 +385,8 @@ i2c_read (uchar dev_addr, unsigned int offset, int alen, uchar * data,
DP (puts ("i2c_read\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_set_dev_offset (dev_addr, offset, 0, alen); /* send the slave address + offset */ if (status) { @@ -423,7 +425,7 @@ void i2c_stop (void) }
-uchar +int i2c_write (uchar dev_addr, unsigned int offset, int alen, uchar * data, int len) { @@ -432,7 +434,8 @@ i2c_write (uchar dev_addr, unsigned int offset, int alen, uchar * data,
DP (puts ("i2c_write\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_set_dev_offset (dev_addr, offset, 0, alen); /* send the slave address + offset */ if (status) { @@ -468,7 +471,8 @@ int i2c_probe (uchar chip)
DP (puts ("i2c_probe\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_set_dev_offset (chip, 0, 0, 0); /* send the slave address + no offset */ if (status) {

The following changes were made, primarily to bring the Marvell i2c driver in line with U-Boot's current I2C API: - Made i2c_init() globally accessible - Made i2c_read() and i2c_write() return an integer - Updated i2c_init() calls to pass in CONFIG_SYS_I2C_SLAVE in the offhand chance someone adds slave support in the future
Signed-off-by: Peter Tyser ptyser@xes-inc.com --- board/Marvell/common/i2c.c | 19 ++++++++++++------- 1 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/board/Marvell/common/i2c.c b/board/Marvell/common/i2c.c index d426044..8d87b2d 100644 --- a/board/Marvell/common/i2c.c +++ b/board/Marvell/common/i2c.c @@ -26,6 +26,7 @@ #include <common.h> #include <mpc8xx.h> #include <malloc.h> +#include <i2c.h> #include "../include/mv_gen_reg.h" #include "../include/core.h"
@@ -42,7 +43,7 @@
/* Assuming that there is only one master on the bus (us) */
-static void i2c_init (int speed, int slaveaddr) +void i2c_init (int speed, int slaveaddr) { unsigned int n, m, freq, margin, power; unsigned int actualN = 0, actualM = 0; @@ -367,7 +368,7 @@ i2c_set_dev_offset (uchar dev_addr, unsigned int offset, int ten_bit, return 0; /* sucessful completion */ }
-uchar +int i2c_read (uchar dev_addr, unsigned int offset, int alen, uchar * data, int len) { @@ -376,7 +377,8 @@ i2c_read (uchar dev_addr, unsigned int offset, int alen, uchar * data,
DP (puts ("i2c_read\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_start ();
@@ -396,7 +398,8 @@ i2c_read (uchar dev_addr, unsigned int offset, int alen, uchar * data, return status; }
- i2c_init (i2cFreq, 0); /* set the i2c frequency again */ + /* set the i2c frequency again */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_start (); if (status) { @@ -442,7 +445,7 @@ void i2c_stop (void) /* */ /* returns 0 = succesful */ /* anything but zero is failure */ -uchar +int i2c_write (uchar dev_addr, unsigned int offset, int alen, uchar * data, int len) { @@ -451,7 +454,8 @@ i2c_write (uchar dev_addr, unsigned int offset, int alen, uchar * data,
DP (puts ("i2c_write\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_start (); /* send a start bit */
@@ -504,7 +508,8 @@ int i2c_probe (uchar chip)
DP (puts ("i2c_probe\n"));
- i2c_init (i2cFreq, 0); /* set the i2c frequency */ + /* set the i2c frequency */ + i2c_init (i2cFreq, CONFIG_SYS_I2C_SLAVE);
status = i2c_start (); /* send a start bit */

Add standard CONFIG_SYS_I2C_SPEED define for the mpc7448hpc2 so that it can use the common 'i2c speed' command. Note that the I2C controller utilized by the mpc7448hpc2 has a fixed speed and cannot be changed dynamically.
Signed-off-by: Peter Tyser ptyser@xes-inc.com --- include/configs/mpc7448hpc2.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/configs/mpc7448hpc2.h b/include/configs/mpc7448hpc2.h index a1783b2..7d42155 100644 --- a/include/configs/mpc7448hpc2.h +++ b/include/configs/mpc7448hpc2.h @@ -179,6 +179,7 @@ */ #define CONFIG_VERSION_VARIABLE 1 #define CONFIG_TSI108_I2C +#define CONFIG_SYS_I2C_SPEED 100000 /* I2C speed */
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 /* I2C EEPROM page 1 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */

Add the i2c_init() function so that the tsi108_i2c.c driver fits U-Boot's standard I2C API which is utilized by cmd_i2c.c
Signed-off-by: Peter Tyser ptyser@xes-inc.com --- drivers/i2c/tsi108_i2c.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/i2c/tsi108_i2c.c b/drivers/i2c/tsi108_i2c.c index fda822c..3829ef9 100644 --- a/drivers/i2c/tsi108_i2c.c +++ b/drivers/i2c/tsi108_i2c.c @@ -41,6 +41,15 @@ /* All functions assume that Tsi108 I2C block is the only master on the bus */ /* I2C read helper function */
+void i2c_init(int speed, int slaveaddr) +{ + /* + * The TSI108 has a fixed I2C clock rate and doesn't support slave + * operation. This function only exists as a stub to fit into the + * U-Boot I2C API. + */ +} + static int i2c_read_byte ( uint i2c_chan, /* I2C channel number: 0 - main, 1 - SDC SPD */ uchar chip_addr,/* I2C device address on the bus */

Hello Peter,
Peter Tyser wrote:
Hi Heiko, These 5 patches should clean up the compile issues that you noticed after application of the "[PATCH v2 0/7] Remove individual I2C commands and cleanup" series.
Thanks.
I only have a build environment for powerpc boards so it'd be much appreciated if other architectures could do some basic compile testing after the "Remove individual I2C commands and cleanup" series is applied to the i2c repository.
I did a "powerpc" and an "arm" MAKEALL ... Hmm.. maybe we should add somewhere in the tree a documentation, where toolchains can be found?
Assuming these patches are accepted, the original "v2 Remove individual I2C commands and cleanup" series should then be applied.
Applied to u-boot-i2c next branch, also the "v2 Remove individual I2C commands and cleanup" series, see:
http://git.denx.de/?p=u-boot/u-boot-i2c.git;a=shortlog;h=refs/heads/next
bye Heiko
participants (2)
-
Heiko Schocher
-
Peter Tyser