diff options
| author | Heiko Schocher <hs@denx.de> | 2013-11-08 07:30:53 +0100 | 
|---|---|---|
| committer | Heiko Schocher <hs@denx.de> | 2013-11-13 06:18:27 +0100 | 
| commit | 0bdffe71fddeaa46768a39305797e4512dee0f15 (patch) | |
| tree | b05079a1337384867d36663a6531458ae5f0c11a /drivers/i2c | |
| parent | 6789e84ecaa8f45d053084e08c381284a04abff7 (diff) | |
| download | olio-uboot-2014.01-0bdffe71fddeaa46768a39305797e4512dee0f15.tar.xz olio-uboot-2014.01-0bdffe71fddeaa46768a39305797e4512dee0f15.zip | |
i2c, zynq: convert zynq i2c driver to new multibus/multiadapter framework
- add zync i2c driver to new multibus/multiadpater support
- adapted all config files, which uses this driver
Signed-off-by: Heiko Schocher <hs@denx.de>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/Makefile | 2 | ||||
| -rw-r--r-- | drivers/i2c/zynq_i2c.c | 29 | 
2 files changed, 17 insertions, 14 deletions
| diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile index 298b17b36..9dd90947d 100644 --- a/drivers/i2c/Makefile +++ b/drivers/i2c/Makefile @@ -28,4 +28,4 @@ obj-$(CONFIG_SYS_I2C_RCAR) += rcar_i2c.o  obj-$(CONFIG_SYS_I2C_SH) += sh_i2c.o  obj-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o  obj-$(CONFIG_SYS_I2C_TEGRA) += tegra_i2c.o -obj-$(CONFIG_ZYNQ_I2C) += zynq_i2c.o +obj-$(CONFIG_SYS_I2C_ZYNQ) += zynq_i2c.o diff --git a/drivers/i2c/zynq_i2c.c b/drivers/i2c/zynq_i2c.c index ce2d23f72..70a9aeafd 100644 --- a/drivers/i2c/zynq_i2c.c +++ b/drivers/i2c/zynq_i2c.c @@ -74,7 +74,8 @@ static struct zynq_i2c_registers *zynq_i2c =  	(struct zynq_i2c_registers *)ZYNQ_I2C_BASE;  /* I2C init called by cmd_i2c when doing 'i2c reset'. */ -void i2c_init(int requested_speed, int slaveadd) +static void zynq_i2c_init(struct i2c_adapter *adap, int requested_speed, +			  int slaveadd)  {  	/* 111MHz / ( (3 * 17) * 22 ) = ~100KHz */  	writel((16 << ZYNQ_I2C_CONTROL_DIV_B_SHIFT) | @@ -151,7 +152,7 @@ static u32 zynq_i2c_wait(u32 mask)   * I2C probe called by cmd_i2c when doing 'i2c probe'.   * Begin read, nak data byte, end.   */ -int i2c_probe(u8 dev) +static int zynq_i2c_probe(struct i2c_adapter *adap, u8 dev)  {  	/* Attempt to read a byte */  	setbits_le32(&zynq_i2c->control, ZYNQ_I2C_CONTROL_CLR_FIFO | @@ -170,7 +171,8 @@ int i2c_probe(u8 dev)   * I2C read called by cmd_i2c when doing 'i2c read' and by cmd_eeprom.c   * Begin write, send address byte(s), begin read, receive data bytes, end.   */ -int i2c_read(u8 dev, uint addr, int alen, u8 *data, int length) +static int zynq_i2c_read(struct i2c_adapter *adap, u8 dev, uint addr, +			 int alen, u8 *data, int length)  {  	u32 status;  	u32 i = 0; @@ -235,7 +237,8 @@ int i2c_read(u8 dev, uint addr, int alen, u8 *data, int length)   * I2C write called by cmd_i2c when doing 'i2c write' and by cmd_eeprom.c   * Begin write, send address byte(s), send data bytes, end.   */ -int i2c_write(u8 dev, uint addr, int alen, u8 *data, int length) +static int zynq_i2c_write(struct i2c_adapter *adap, u8 dev, uint addr, +			  int alen, u8 *data, int length)  {  	u8 *cur_data = data; @@ -275,16 +278,16 @@ int i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)  	return 0;  } -int i2c_set_bus_num(unsigned int bus) +static unsigned int zynq_i2c_set_bus_speed(struct i2c_adapter *adap, +			unsigned int speed)  { -	/* Only support bus 0 */ -	if (bus > 0) -		return -1; -	return 0; -} +	if (speed != 1000000) +		return -EINVAL; -unsigned int i2c_get_bus_num(void) -{ -	/* Only support bus 0 */  	return 0;  } + +U_BOOT_I2C_ADAP_COMPLETE(zynq_0, zynq_i2c_init, zynq_i2c_probe, zynq_i2c_read, +			 zynq_i2c_write, zynq_i2c_set_bus_speed, +			 CONFIG_SYS_I2C_ZYNQ_SPEED, CONFIG_SYS_I2C_ZYNQ_SLAVE, +			 0) |