diff options
| -rw-r--r-- | cpu/mpc8260/i2c.c | 36 | ||||
| -rw-r--r-- | drivers/i2c/soft_i2c.c | 36 | 
2 files changed, 72 insertions, 0 deletions
| diff --git a/cpu/mpc8260/i2c.c b/cpu/mpc8260/i2c.c index c3af7b6d8..335177fad 100644 --- a/cpu/mpc8260/i2c.c +++ b/cpu/mpc8260/i2c.c @@ -36,6 +36,10 @@  DECLARE_GLOBAL_DATA_PTR; +#if defined(CONFIG_I2C_MULTI_BUS) +static unsigned int i2c_bus_num __attribute__ ((section ("data"))) = 0; +#endif /* CONFIG_I2C_MULTI_BUS */ +  /* uSec to wait between polls of the i2c */  #define DELAY_US	100  /* uSec to wait for the CPM to start processing the buffer */ @@ -765,4 +769,36 @@ i2c_reg_write(uchar chip, uchar reg, uchar val)  	i2c_write(chip, reg, 1, &val, 1);  } +#if defined(CONFIG_I2C_MULTI_BUS) +/* + * Functions for multiple I2C bus handling + */ +unsigned int i2c_get_bus_num(void) +{ +	return i2c_bus_num; +} + +int i2c_set_bus_num(unsigned int bus) +{ +	if (bus >= CFG_MAX_I2C_BUS) +		return -1; +	i2c_bus_num = bus; + +	return 0; +} +/* TODO: add 100/400k switching */ +unsigned int i2c_get_bus_speed(void) +{ +	return CFG_I2C_SPEED; +} + +int i2c_set_bus_speed(unsigned int speed) +{ +	if (speed != CFG_I2C_SPEED) +		return -1; + +	return 0; +} + +#endif	/* CONFIG_I2C_MULTI_BUS */  #endif	/* CONFIG_HARD_I2C */ diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c index 23db2ee8f..57736da42 100644 --- a/drivers/i2c/soft_i2c.c +++ b/drivers/i2c/soft_i2c.c @@ -68,6 +68,10 @@ DECLARE_GLOBAL_DATA_PTR;  #define PRINTD(fmt,args...)  #endif +#if defined(CONFIG_I2C_MULTI_BUS) +static unsigned int i2c_bus_num __attribute__ ((section ("data"))) = 0; +#endif /* CONFIG_I2C_MULTI_BUS */ +  /*-----------------------------------------------------------------------   * Local functions   */ @@ -230,6 +234,38 @@ static int write_byte(uchar data)  	return(nack);	/* not a nack is an ack */  } +#if defined(CONFIG_I2C_MULTI_BUS) +/* + * Functions for multiple I2C bus handling + */ +unsigned int i2c_get_bus_num(void) +{ +	return i2c_bus_num; +} + +int i2c_set_bus_num(unsigned int bus) +{ +	if (bus >= CFG_MAX_I2C_BUS) +		return -1; +	i2c_bus_num = bus; + +	return 0; +} + +/* TODO: add 100/400k switching */ +unsigned int i2c_get_bus_speed(void) +{ +	return CFG_I2C_SPEED; +} + +int i2c_set_bus_speed(unsigned int speed) +{ +	if (speed != CFG_I2C_SPEED) +		return -1; + +	return 0; +} +#endif  /*-----------------------------------------------------------------------   * if ack == I2C_ACK, ACK the byte so can continue reading, else |