提交 ac6e2fe6 编写于 作者: A Armando Visconti 提交者: Tom Rini

designware_i2c.c: Added the support for MULTI_BUS

This patch adds the capability to switch between 10
different I2C busses (from 0 to 9).
Signed-off-by: NArmando Visconti <armando.visconti@st.com>
上级 c86d9ed3
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册