
This is just a rough patch to show how this might be done.
Not to be applied, please.
Signed-off-by: Simon Glass sjg@chromium.org --- drivers/i2c/tegra2_i2c.c | 53 +++++++++++++++++++------------------------ include/configs/seaboard.h | 2 + 2 files changed, 25 insertions(+), 30 deletions(-)
diff --git a/drivers/i2c/tegra2_i2c.c b/drivers/i2c/tegra2_i2c.c index b42d9ac..93f3269 100644 --- a/drivers/i2c/tegra2_i2c.c +++ b/drivers/i2c/tegra2_i2c.c @@ -30,7 +30,9 @@ #include <asm/arch/gpio.h> #include <asm/arch/pinmux.h> #include <asm/arch/tegra2_i2c.h> + #include <fdtdec.h> +#include <i2c.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -296,12 +298,7 @@ static int tegra2_i2c_read_data(u32 addr, u8 *data, u32 len) #error "Please enable device tree support to use this driver" #endif
-unsigned int i2c_get_bus_speed(void) -{ - return i2c_controllers[i2c_bus_num].speed; -} - -int i2c_set_bus_speed(unsigned int speed) +uint tegra_i2c_set_bus_speed(unsigned int speed) { struct i2c_bus *i2c_bus;
@@ -309,7 +306,7 @@ int i2c_set_bus_speed(unsigned int speed) i2c_bus->speed = speed; i2c_init_controller(i2c_bus);
- return 0; + return 0; /* TODO: return actual speed */ }
static int i2c_get_config(const void *blob, int node, struct i2c_bus *i2c_bus) @@ -404,7 +401,7 @@ int i2c_init_board(void) return 0; }
-void i2c_init(int speed, int slaveaddr) +void tegra_i2c_init(int speed, int slaveaddr) { debug("i2c_init(speed=%u, slaveaddr=0x%x)\n", speed, slaveaddr); } @@ -450,7 +447,7 @@ int i2c_read_data(uchar chip, uchar *buffer, int len) }
/* Probe to see if a chip is present. */ -int i2c_probe(uchar chip) +int tegra_i2c_probe(uchar chip) { int rc; uchar reg; @@ -472,7 +469,7 @@ static int i2c_addr_ok(const uint addr, const int alen) }
/* Read bytes */ -int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) +int tegra_i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) { uint offset; int i; @@ -506,7 +503,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) }
/* Write bytes */ -int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) +int tegra_i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) { uint offset; int i; @@ -531,25 +528,6 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) return 0; }
-#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 >= CONFIG_SYS_MAX_I2C_BUS || !i2c_controllers[bus].inited) - return -1; - i2c_bus_num = bus; - - return 0; -} -#endif - int tegra_i2c_get_dvc_bus_num(void) { int i; @@ -563,3 +541,18 @@ int tegra_i2c_get_dvc_bus_num(void)
return -1; } + +struct i2c_adapter tegra_i2c_adap[] = { + { + .init = tegra_i2c_init, + .probe = tegra_i2c_probe, + .read = tegra_i2c_read, + .write = tegra_i2c_write, + .set_bus_speed = tegra_i2c_set_bus_speed, + .speed = 100000, + .slaveaddr = 0, + .name = "tegra-i2c", + .init_done = 0, + .hwadapnr = 0, + } +}; diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h index d2d0115..64c804a 100644 --- a/include/configs/seaboard.h +++ b/include/configs/seaboard.h @@ -79,6 +79,8 @@ #define CONFIG_SYS_MAX_I2C_BUS 4 #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_CMD_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_ADAPTERS {&tegra_i2c_adap}
/* SD/MMC */ #define CONFIG_MMC