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>
This commit is contained in:
parent
6789e84eca
commit
0bdffe71fd
5
README
5
README
|
@ -2071,6 +2071,11 @@ CBFS (Coreboot Filesystem) support
|
||||||
- CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4
|
- CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4
|
||||||
- CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4
|
- CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4
|
||||||
|
|
||||||
|
- drivers/i2c/zynq_i2c.c
|
||||||
|
- activate this driver with CONFIG_SYS_I2C_ZYNQ
|
||||||
|
- set CONFIG_SYS_I2C_ZYNQ_SPEED for speed setting
|
||||||
|
- set CONFIG_SYS_I2C_ZYNQ_SLAVE for slave addr
|
||||||
|
|
||||||
additional defines:
|
additional defines:
|
||||||
|
|
||||||
CONFIG_SYS_NUM_I2C_BUSES
|
CONFIG_SYS_NUM_I2C_BUSES
|
||||||
|
|
|
@ -28,4 +28,4 @@ obj-$(CONFIG_SYS_I2C_RCAR) += rcar_i2c.o
|
||||||
obj-$(CONFIG_SYS_I2C_SH) += sh_i2c.o
|
obj-$(CONFIG_SYS_I2C_SH) += sh_i2c.o
|
||||||
obj-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o
|
obj-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o
|
||||||
obj-$(CONFIG_SYS_I2C_TEGRA) += tegra_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
|
||||||
|
|
|
@ -74,7 +74,8 @@ static struct zynq_i2c_registers *zynq_i2c =
|
||||||
(struct zynq_i2c_registers *)ZYNQ_I2C_BASE;
|
(struct zynq_i2c_registers *)ZYNQ_I2C_BASE;
|
||||||
|
|
||||||
/* I2C init called by cmd_i2c when doing 'i2c reset'. */
|
/* 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 */
|
/* 111MHz / ( (3 * 17) * 22 ) = ~100KHz */
|
||||||
writel((16 << ZYNQ_I2C_CONTROL_DIV_B_SHIFT) |
|
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'.
|
* I2C probe called by cmd_i2c when doing 'i2c probe'.
|
||||||
* Begin read, nak data byte, end.
|
* 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 */
|
/* Attempt to read a byte */
|
||||||
setbits_le32(&zynq_i2c->control, ZYNQ_I2C_CONTROL_CLR_FIFO |
|
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
|
* 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.
|
* 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 status;
|
||||||
u32 i = 0;
|
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
|
* 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.
|
* 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;
|
u8 *cur_data = data;
|
||||||
|
|
||||||
|
@ -275,16 +278,16 @@ int i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)
|
||||||
return 0;
|
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 (speed != 1000000)
|
||||||
if (bus > 0)
|
return -EINVAL;
|
||||||
return -1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int i2c_get_bus_num(void)
|
U_BOOT_I2C_ADAP_COMPLETE(zynq_0, zynq_i2c_init, zynq_i2c_probe, zynq_i2c_read,
|
||||||
{
|
zynq_i2c_write, zynq_i2c_set_bus_speed,
|
||||||
/* Only support bus 0 */
|
CONFIG_SYS_I2C_ZYNQ_SPEED, CONFIG_SYS_I2C_ZYNQ_SLAVE,
|
||||||
return 0;
|
0)
|
||||||
}
|
|
||||||
|
|
|
@ -60,10 +60,10 @@
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#if defined(CONFIG_ZYNQ_I2C0) || defined(CONFIG_ZYNQ_I2C1)
|
#if defined(CONFIG_ZYNQ_I2C0) || defined(CONFIG_ZYNQ_I2C1)
|
||||||
# define CONFIG_CMD_I2C
|
# define CONFIG_CMD_I2C
|
||||||
# define CONFIG_ZYNQ_I2C
|
# define CONFIG_SYS_I2C
|
||||||
# define CONFIG_HARD_I2C
|
# define CONFIG_SYS_I2C_ZYNQ
|
||||||
# define CONFIG_SYS_I2C_SPEED 100000
|
# define CONFIG_SYS_I2C_ZYNQ_SPEED 100000
|
||||||
# define CONFIG_SYS_I2C_SLAVE 1
|
# define CONFIG_SYS_I2C_ZYNQ_SLAVE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ZYNQ_DCC)
|
#if defined(CONFIG_ZYNQ_DCC)
|
||||||
|
|
Loading…
Reference in New Issue