diff options
author | Wolfgang Denk <wd@denx.de> | 2010-11-19 22:02:40 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2010-11-19 22:02:40 +0100 |
commit | b9d77535e9335b554af03aa0e0a54b664677d018 (patch) | |
tree | 4925e2afb12d925ccfb4c7f8f07d982ae3e9f941 | |
parent | b68ef0dbcec32147aaefdf6781aeca1a3e646394 (diff) | |
parent | 9b107e6138e719ea5a0b924862a9b109c020c7ac (diff) | |
download | u-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.c | 43 | ||||
-rw-r--r-- | post/drivers/i2c.c | 3 |
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; |