diff options
author | Heiko Schocher <hs@denx.de> | 2010-11-10 08:57:55 +0100 |
---|---|---|
committer | Heiko Schocher <hs@denx.de> | 2010-11-17 08:03:56 +0100 |
commit | 0091337932130ebe9c0a64ac7ef922e9100353be (patch) | |
tree | edb03727680750501358cd24c8bdf22538dd0d5e /arch/powerpc/cpu | |
parent | 8ad25bf8d9233eb7d0b614612108622a59069354 (diff) | |
download | u-boot-imx-0091337932130ebe9c0a64ac7ef922e9100353be.zip u-boot-imx-0091337932130ebe9c0a64ac7ef922e9100353be.tar.gz u-boot-imx-0091337932130ebe9c0a64ac7ef922e9100353be.tar.bz2 |
i2c, mpc5xxx: add multibus support
Tested on upcoming hydra (mpc5200 based) board.
Signed-off-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'arch/powerpc/cpu')
-rw-r--r-- | arch/powerpc/cpu/mpc5xxx/i2c.c | 43 |
1 files changed, 43 insertions, 0 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 */ |