summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2010-11-19 22:02:40 +0100
committerWolfgang Denk <wd@denx.de>2010-11-19 22:02:40 +0100
commitb9d77535e9335b554af03aa0e0a54b664677d018 (patch)
tree4925e2afb12d925ccfb4c7f8f07d982ae3e9f941
parentb68ef0dbcec32147aaefdf6781aeca1a3e646394 (diff)
parent9b107e6138e719ea5a0b924862a9b109c020c7ac (diff)
downloadu-boot-imx-b9d77535e9335b554af03aa0e0a54b664677d018.zip
u-boot-imx-b9d77535e9335b554af03aa0e0a54b664677d018.tar.gz
u-boot-imx-b9d77535e9335b554af03aa0e0a54b664677d018.tar.bz2
Merge branch 'master' of git://git.denx.de/u-boot-i2c
-rw-r--r--arch/powerpc/cpu/mpc5xxx/i2c.c43
-rw-r--r--post/drivers/i2c.c3
2 files changed, 45 insertions, 1 deletions
diff --git a/arch/powerpc/cpu/mpc5xxx/i2c.c b/arch/powerpc/cpu/mpc5xxx/i2c.c
index 4f7f716..9fb330f 100644
--- a/arch/powerpc/cpu/mpc5xxx/i2c.c
+++ b/arch/powerpc/cpu/mpc5xxx/i2c.c
@@ -30,6 +30,7 @@ DECLARE_GLOBAL_DATA_PTR;
#include <mpc5xxx.h>
#include <i2c.h>
+#if !defined(CONFIG_I2C_MULTI_BUS)
#if (CONFIG_SYS_I2C_MODULE == 2)
#define I2C_BASE MPC5XXX_I2C2
#elif (CONFIG_SYS_I2C_MODULE == 1)
@@ -37,6 +38,19 @@ DECLARE_GLOBAL_DATA_PTR;
#else
#error CONFIG_SYS_I2C_MODULE is not properly configured
#endif
+#else
+static unsigned int i2c_bus_num __attribute__ ((section (".data"))) =
+ CONFIG_SYS_SPD_BUS_NUM;
+static unsigned int i2c_bus_speed[2] = {CONFIG_SYS_I2C_SPEED,
+ CONFIG_SYS_I2C_SPEED};
+
+static const unsigned long i2c_dev[2] = {
+ MPC5XXX_I2C1,
+ MPC5XXX_I2C2,
+};
+
+#define I2C_BASE ((struct mpc5xxx_i2c *)i2c_dev[i2c_bus_num])
+#endif
#define I2C_TIMEOUT 6667
#define I2C_RETRIES 3
@@ -439,4 +453,33 @@ Done:
return ret;
}
+#if defined(CONFIG_I2C_MULTI_BUS)
+int i2c_set_bus_num(unsigned int bus)
+{
+ if (bus > 1)
+ return -1;
+
+ i2c_bus_num = bus;
+ i2c_init(i2c_bus_speed[bus], CONFIG_SYS_I2C_SLAVE);
+ return 0;
+}
+
+int i2c_set_bus_speed(unsigned int speed)
+{
+ i2c_init(speed, CONFIG_SYS_I2C_SLAVE);
+ return 0;
+}
+
+unsigned int i2c_get_bus_num(void)
+{
+ return i2c_bus_num;
+}
+
+unsigned int i2c_get_bus_speed(void)
+{
+ return i2c_bus_speed[i2c_bus_num];
+}
+#endif
+
+
#endif /* CONFIG_HARD_I2C */
diff --git a/post/drivers/i2c.c b/post/drivers/i2c.c
index 4a1b1a4..4cbd9f3 100644
--- a/post/drivers/i2c.c
+++ b/post/drivers/i2c.c
@@ -63,11 +63,12 @@ int i2c_post_test (int flags)
unsigned int i;
#ifndef CONFIG_SYS_POST_I2C_ADDRS
/* Start at address 1, address 0 is the general call address */
- for (i = 1; i < 128; i++)
+ for (i = 1; i < 128; i++) {
if (i2c_ignore_device(i))
continue;
if (i2c_probe (i) == 0)
return 0;
+ }
/* No devices found */
return -1;