[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