[U-Boot] [PATCH 3/3] WIP: tegra: i2c: Enable new I2C framework
Simon Glass
sjg at chromium.org
Tue Jan 17 08:12:25 CET 2012
This is just a rough patch to show how this might be done.
Not to be applied, please.
Signed-off-by: Simon Glass <sjg at 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
--
1.7.7.3
More information about the U-Boot
mailing list