summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/nvidia/cardhu/tegra3-waluigi.dts5
-rw-r--r--board/nvidia/cardhu/tegra30.dtsi31
-rw-r--r--drivers/i2c/tegra_i2c.c19
3 files changed, 41 insertions, 14 deletions
diff --git a/board/nvidia/cardhu/tegra3-waluigi.dts b/board/nvidia/cardhu/tegra3-waluigi.dts
index b0061ee4c28..20e3e833fa2 100644
--- a/board/nvidia/cardhu/tegra3-waluigi.dts
+++ b/board/nvidia/cardhu/tegra3-waluigi.dts
@@ -16,6 +16,11 @@
aliases {
console = "/serial@70006300";
+
+ i2c0 = "/i2c@0x7000d000";
+ i2c1 = "/i2c@0x7000c000";
+ i2c2 = "/i2c@0x7000c400";
+ i2c3 = "/i2c@0x7000c500";
};
chosen {
diff --git a/board/nvidia/cardhu/tegra30.dtsi b/board/nvidia/cardhu/tegra30.dtsi
index 79a3ba01c08..9e663107f74 100644
--- a/board/nvidia/cardhu/tegra30.dtsi
+++ b/board/nvidia/cardhu/tegra30.dtsi
@@ -73,5 +73,36 @@
status = "disabled";
};
+ i2c@0x7000c000 {
+ compatible = "nvidia,tegra250-i2c";
+ reg = <0x7000c000 0x006c>;
+ pinmux = <1>;
+ speed = <100000>;
+ periph-id = <12>; // PERIPH_ID_I2C1
+ };
+
+ i2c@0x7000c400 {
+ compatible = "nvidia,tegra250-i2c";
+ reg = <0x7000c400 0x006c>;
+ pinmux = <2>;
+ speed = <100000>;
+ periph-id = <54>; // PERIPH_ID_I2C2
+ };
+
+ i2c@0x7000c500 {
+ compatible = "nvidia,tegra250-i2c";
+ reg = <0x7000c500 0x006c>;
+ pinmux = <1>;
+ speed = <100000>;
+ periph-id = <67>; // PERIPH_ID_I2C3
+ };
+
+ i2c@0x7000d000 {
+ compatible = "nvidia,tegra250-i2c";
+ reg = <0x7000d000 0x007c>;
+ pinmux = <1>;
+ speed = <100000>;
+ periph-id = <47>; // PERIPH_ID_DVC_I2C
+ };
};
diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c
index 0f795091191..54d38f30abc 100644
--- a/drivers/i2c/tegra_i2c.c
+++ b/drivers/i2c/tegra_i2c.c
@@ -32,9 +32,6 @@
#include <asm/arch/pinmux.h>
#include <fdt_decode.h>
-/* TODO(sjg): This driver has not been tested with Tegra3 yet */
-#ifdef CONFIG_TEGRA2
-
DECLARE_GLOBAL_DATA_PTR;
static unsigned int i2c_bus_num;
@@ -61,6 +58,7 @@ struct i2c_bus i2c_controllers[CONFIG_SYS_MAX_I2C_BUS];
static void i2c_pin_mux_select(struct i2c_bus *i2c_bus, int pinmux_config)
{
+#ifdef CONFIG_TEGRA2
switch (i2c_bus->periph_id) {
case PERIPH_ID_DVC_I2C: /* DVC I2C (I2CP) */
/* there is only one selection, pinmux_config is ignored */
@@ -95,8 +93,10 @@ static void i2c_pin_mux_select(struct i2c_bus *i2c_bus, int pinmux_config)
default:
break;
}
+#endif
}
+
/**
* tristate : 0 - NORMAL
* 1 - TRISTATE
@@ -104,6 +104,7 @@ static void i2c_pin_mux_select(struct i2c_bus *i2c_bus, int pinmux_config)
static void i2c_pin_mux_tristate(struct i2c_bus *i2c_bus, int pinmux_config,
int tristate)
{
+#ifdef CONFIG_TEGRA2
enum pmux_pingrp pin;
switch (i2c_bus->periph_id) {
@@ -140,6 +141,7 @@ static void i2c_pin_mux_tristate(struct i2c_bus *i2c_bus, int pinmux_config,
}
pinmux_set_tristate(pin, tristate);
+#endif
}
static void set_packet_mode(struct i2c_bus *i2c_bus)
@@ -643,17 +645,6 @@ int i2c_set_bus_num(unsigned int bus)
}
#endif
-#else /* not CONFIG_TEGRA2 */
-
-/* Not implemented for now */
-int i2c_init_board(void)
-{
- printf("i2c support is not available on T30\n");
- return -1;
-}
-
-#endif /* CONFIG_TEGRA2 */
-
void tegra_i2c_ll_write_addr(uint addr, uint config)
{
struct i2c_ctlr *reg = (struct i2c_ctlr *)TEGRA_DVC_BASE;