[U-Boot] [PATCH v2 2/7] i2c: Create common default i2c_[set|get]_bus_speed() functions

Peter Tyser ptyser at xes-inc.com
Sun Apr 19 05:34:01 CEST 2009


New default, weak i2c_get_bus_speed() and i2c_set_bus_speed() functions
replace a number of architecture-specific implementations.

Also, providing default functions will allow all boards to enable
CONFIG_I2C_CMD_TREE.  This was previously not possible since the
tree-form of the i2c command provides the ability to display and modify
the i2c bus speed which requires i2c_[set|get]_bus_speed() to be
present.

Signed-off-by: Peter Tyser <ptyser at xes-inc.com>
---
 common/cmd_i2c.c             |   18 ++++++++++++++++++
 cpu/arm920t/at91rm9200/i2c.c |   10 ----------
 cpu/mpc512x/i2c.c            |   14 --------------
 cpu/mpc8260/i2c.c            |   13 -------------
 cpu/ppc4xx/i2c.c             |   14 --------------
 drivers/i2c/soft_i2c.c       |   14 --------------
 6 files changed, 18 insertions(+), 65 deletions(-)

diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
index 16439ac..29baadd 100644
--- a/common/cmd_i2c.c
+++ b/common/cmd_i2c.c
@@ -138,6 +138,24 @@ DECLARE_GLOBAL_DATA_PTR;
 static int
 mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[]);
 
+/* TODO: Implement architecture-specific get/set functions */
+unsigned int __def_i2c_get_bus_speed(void)
+{
+	return CONFIG_SYS_I2C_SPEED;
+}
+unsigned int i2c_get_bus_speed(void)
+	__attribute__((weak, alias("__def_i2c_get_bus_speed")));
+
+int __def_i2c_set_bus_speed(unsigned int speed)
+{
+	if (speed != CONFIG_SYS_I2C_SPEED)
+		return -1;
+
+	return 0;
+}
+int i2c_set_bus_speed(unsigned int)
+	__attribute__((weak, alias("__def_i2c_set_bus_speed")));
+
 /*
  * Syntax:
  *	imd {i2c_chip} {addr}{.0, .1, .2} {len}
diff --git a/cpu/arm920t/at91rm9200/i2c.c b/cpu/arm920t/at91rm9200/i2c.c
index 9fd72d3..1711088 100644
--- a/cpu/arm920t/at91rm9200/i2c.c
+++ b/cpu/arm920t/at91rm9200/i2c.c
@@ -189,14 +189,4 @@ i2c_init(int speed, int slaveaddr)
 	return;
 }
 
-int i2c_set_bus_speed(unsigned int speed)
-{
-	return -1;
-}
-
-unsigned int i2c_get_bus_speed(void)
-{
-	return CONFIG_SYS_I2C_SPEED;
-}
-
 #endif /* CONFIG_HARD_I2C */
diff --git a/cpu/mpc512x/i2c.c b/cpu/mpc512x/i2c.c
index 4f6bc86..0da906a 100644
--- a/cpu/mpc512x/i2c.c
+++ b/cpu/mpc512x/i2c.c
@@ -397,18 +397,4 @@ unsigned int i2c_get_bus_num (void)
 	return bus_num;
 }
 
-/* TODO */
-unsigned int i2c_get_bus_speed (void)
-{
-	return -1;
-}
-
-int i2c_set_bus_speed (unsigned int speed)
-{
-	if (speed != CONFIG_SYS_I2C_SPEED)
-		return -1;
-
-	return 0;
-}
-
 #endif	/* CONFIG_HARD_I2C */
diff --git a/cpu/mpc8260/i2c.c b/cpu/mpc8260/i2c.c
index 35cf8f1..7fcd00f 100644
--- a/cpu/mpc8260/i2c.c
+++ b/cpu/mpc8260/i2c.c
@@ -783,19 +783,6 @@ int i2c_set_bus_num(unsigned int bus)
 #endif
 	return 0;
 }
-/* TODO: add 100/400k switching */
-unsigned int i2c_get_bus_speed(void)
-{
-	return CONFIG_SYS_I2C_SPEED;
-}
-
-int i2c_set_bus_speed(unsigned int speed)
-{
-	if (speed != CONFIG_SYS_I2C_SPEED)
-		return -1;
-
-	return 0;
-}
 
 #endif	/* CONFIG_I2C_MULTI_BUS */
 #endif	/* CONFIG_HARD_I2C */
diff --git a/cpu/ppc4xx/i2c.c b/cpu/ppc4xx/i2c.c
index 9d416ca..e3e1bab 100644
--- a/cpu/ppc4xx/i2c.c
+++ b/cpu/ppc4xx/i2c.c
@@ -438,18 +438,4 @@ int i2c_set_bus_num(unsigned int bus)
 	return 0;
 }
 #endif	/* CONFIG_I2C_MULTI_BUS */
-
-/* TODO: add 100/400k switching */
-unsigned int i2c_get_bus_speed(void)
-{
-	return CONFIG_SYS_I2C_SPEED;
-}
-
-int i2c_set_bus_speed(unsigned int speed)
-{
-	if (speed != CONFIG_SYS_I2C_SPEED)
-		return -1;
-
-	return 0;
-}
 #endif	/* CONFIG_HARD_I2C */
diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c
index 185634d..59883a5 100644
--- a/drivers/i2c/soft_i2c.c
+++ b/drivers/i2c/soft_i2c.c
@@ -244,20 +244,6 @@ int i2c_set_bus_num(unsigned int bus)
 }
 #endif
 
-/* TODO: add 100/400k switching */
-unsigned int i2c_get_bus_speed(void)
-{
-	return CONFIG_SYS_I2C_SPEED;
-}
-
-int i2c_set_bus_speed(unsigned int speed)
-{
-	if (speed != CONFIG_SYS_I2C_SPEED)
-		return -1;
-
-	return 0;
-}
-
 /*-----------------------------------------------------------------------
  * if ack == I2C_ACK, ACK the byte so can continue reading, else
  * send I2C_NOACK to end the read.
-- 
1.6.2.1



More information about the U-Boot mailing list