imx: ventana: remove setup of I2C3 from SPL

Do not setup I2C3 in the SPL for Ventana as some devices on that bus
(aic3x codecs) can hang the bus causing i2c_setup to spin endlessly until
they are put into reset. Removing the setup of I2C3 from the SPL allows
the board-specific GPIO to be configured to take care of putting codecs
in reset prior to U-Boot setting up I2C3.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
This commit is contained in:
Tim Harvey 2019-02-04 13:10:49 -08:00 committed by Stefano Babic
parent ff3568fcfe
commit 3f0da8748a
4 changed files with 90 additions and 86 deletions

View File

@ -78,95 +78,96 @@ static iomux_v3_cfg_t const usdhc3_pads[] = {
IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
}; };
/* I2C1: GSC */ /*
static struct i2c_pads_info mx6q_i2c_pad_info0 = { * I2C pad configs:
.scl = { * I2C1: GSC
.i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC, * I2C2: PMIC,PCIe Switch,Clock,Mezz
.gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC, * I2C3: Multimedia/Expansion
.gp = IMX_GPIO_NR(3, 21) */
}, static struct i2c_pads_info mx6q_i2c_pad_info[] = {
.sda = { {
.i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC, .scl = {
.gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC, .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC,
.gp = IMX_GPIO_NR(3, 28) .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC,
} .gp = IMX_GPIO_NR(3, 21)
}; },
static struct i2c_pads_info mx6dl_i2c_pad_info0 = { .sda = {
.scl = { .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC,
.i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC, .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC,
.gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC, .gp = IMX_GPIO_NR(3, 28)
.gp = IMX_GPIO_NR(3, 21) }
}, }, {
.sda = { .scl = {
.i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC, .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
.gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC, .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
.gp = IMX_GPIO_NR(3, 28) .gp = IMX_GPIO_NR(4, 12)
},
.sda = {
.i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
.gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
.gp = IMX_GPIO_NR(4, 13)
}
}, {
.scl = {
.i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
.gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
.gp = IMX_GPIO_NR(1, 3)
},
.sda = {
.i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
.gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
.gp = IMX_GPIO_NR(1, 6)
}
} }
}; };
/* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */ static struct i2c_pads_info mx6dl_i2c_pad_info[] = {
static struct i2c_pads_info mx6q_i2c_pad_info1 = { {
.scl = { .scl = {
.i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC, .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC,
.gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC, .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC,
.gp = IMX_GPIO_NR(4, 12) .gp = IMX_GPIO_NR(3, 21)
}, },
.sda = { .sda = {
.i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC, .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC,
.gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC, .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC,
.gp = IMX_GPIO_NR(4, 13) .gp = IMX_GPIO_NR(3, 28)
} }
}; }, {
static struct i2c_pads_info mx6dl_i2c_pad_info1 = { .scl = {
.scl = { .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC,
.i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC, .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC,
.gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC, .gp = IMX_GPIO_NR(4, 12)
.gp = IMX_GPIO_NR(4, 12) },
}, .sda = {
.sda = { .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC,
.i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC, .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC,
.gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC, .gp = IMX_GPIO_NR(4, 13)
.gp = IMX_GPIO_NR(4, 13) }
}, {
.scl = {
.i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
.gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
.gp = IMX_GPIO_NR(1, 3)
},
.sda = {
.i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
.gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
.gp = IMX_GPIO_NR(1, 6)
}
} }
}; };
/* I2C3: Misc/Expansion */ void setup_ventana_i2c(int i2c)
static struct i2c_pads_info mx6q_i2c_pad_info2 = {
.scl = {
.i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
.gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
.gp = IMX_GPIO_NR(1, 3)
},
.sda = {
.i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
.gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
.gp = IMX_GPIO_NR(1, 6)
}
};
static struct i2c_pads_info mx6dl_i2c_pad_info2 = {
.scl = {
.i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
.gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
.gp = IMX_GPIO_NR(1, 3)
},
.sda = {
.i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
.gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
.gp = IMX_GPIO_NR(1, 6)
}
};
void setup_ventana_i2c(void)
{ {
if (is_cpu_type(MXC_CPU_MX6Q)) { struct i2c_pads_info *p;
setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0);
setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1); if (is_cpu_type(MXC_CPU_MX6Q))
setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2); p = &mx6q_i2c_pad_info[i2c];
} else { else
setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0); p = &mx6dl_i2c_pad_info[i2c];
setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1);
setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2); setup_i2c(i2c, CONFIG_SYS_I2C_SPEED, 0x7f, p);
}
} }
/* /*

View File

@ -85,7 +85,7 @@ struct ventana {
extern struct ventana gpio_cfg[GW_UNKNOWN]; extern struct ventana gpio_cfg[GW_UNKNOWN];
/* configure i2c iomux */ /* configure i2c iomux */
void setup_ventana_i2c(void); void setup_ventana_i2c(int);
/* configure uart iomux */ /* configure uart iomux */
void setup_iomux_uart(void); void setup_iomux_uart(void);
/* conifgure PMIC */ /* conifgure PMIC */

View File

@ -631,7 +631,9 @@ int board_init(void)
#ifdef CONFIG_MXC_SPI #ifdef CONFIG_MXC_SPI
setup_spi(); setup_spi();
#endif #endif
setup_ventana_i2c(); setup_ventana_i2c(0);
setup_ventana_i2c(1);
setup_ventana_i2c(2);
#ifdef CONFIG_SATA #ifdef CONFIG_SATA
setup_sata(); setup_sata();

View File

@ -599,9 +599,10 @@ void board_init_f(ulong dummy)
/* setup AXI */ /* setup AXI */
gpr_init(); gpr_init();
/* iomux and setup of i2c */ /* iomux and setup of uart/i2c */
setup_iomux_uart(); setup_iomux_uart();
setup_ventana_i2c(); setup_ventana_i2c(0);
setup_ventana_i2c(1);
/* setup GP timer */ /* setup GP timer */
timer_init(); timer_init();