|
|
|
@ -26,7 +26,12 @@ |
|
|
|
|
#include <asm/arch/hardware.h> |
|
|
|
|
#include "designware_i2c.h" |
|
|
|
|
|
|
|
|
|
static struct i2c_regs *const i2c_regs_p = |
|
|
|
|
#ifdef CONFIG_I2C_MULTI_BUS |
|
|
|
|
static unsigned int bus_initialized[CONFIG_SYS_I2C_BUS_MAX]; |
|
|
|
|
static unsigned int current_bus = 0; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static struct i2c_regs *i2c_regs_p = |
|
|
|
|
(struct i2c_regs *)CONFIG_SYS_I2C_BASE; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -150,6 +155,10 @@ void i2c_init(int speed, int slaveadd) |
|
|
|
|
enbl = readl(&i2c_regs_p->ic_enable); |
|
|
|
|
enbl |= IC_ENABLE_0B; |
|
|
|
|
writel(enbl, &i2c_regs_p->ic_enable); |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_I2C_MULTI_BUS |
|
|
|
|
bus_initialized[current_bus] = 1; |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -344,3 +353,74 @@ int i2c_probe(uchar chip) |
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_I2C_MULTI_BUS |
|
|
|
|
int i2c_set_bus_num(unsigned int bus) |
|
|
|
|
{ |
|
|
|
|
switch (bus) { |
|
|
|
|
case 0: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE; |
|
|
|
|
break; |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE1 |
|
|
|
|
case 1: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE1; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE2 |
|
|
|
|
case 2: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE2; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE3 |
|
|
|
|
case 3: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE3; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE4 |
|
|
|
|
case 4: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE4; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE5 |
|
|
|
|
case 5: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE5; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE6 |
|
|
|
|
case 6: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE6; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE7 |
|
|
|
|
case 7: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE7; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE8 |
|
|
|
|
case 8: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE8; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
#ifdef CONFIG_SYS_I2C_BASE9 |
|
|
|
|
case 9: |
|
|
|
|
i2c_regs_p = (void *)CONFIG_SYS_I2C_BASE9; |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
default: |
|
|
|
|
printf("Bad bus: %d\n", bus); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
current_bus = bus; |
|
|
|
|
|
|
|
|
|
if (!bus_initialized[current_bus]) |
|
|
|
|
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int i2c_get_bus_num(void) |
|
|
|
|
{ |
|
|
|
|
return current_bus; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|