aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Bénard <eric@eukrea.com>2012-05-08 03:20:23 -0400
committerSascha Hauer <s.hauer@pengutronix.de>2012-05-08 11:31:24 -0400
commit7138a7f9ac3640df808c295c411bc4acb3d1965e (patch)
tree986862b123a0b1e08c6b89448f244712e8da2804
parent932d67d4c8367fa753c55d922cefafcdcdcf18c3 (diff)
ARM: imx: eukrea_cpuimx51sd: support rev2 PCB
rev1 were shipped with silicon 2.0, rev2 with silicon 3.0 so we are using the silicon version to know the PCB revision Signed-off-by: Eric Bénard <eric@eukrea.com> Cc: Sascha Hauer <kernel@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-imx/mach-cpuimx51sd.c49
1 files changed, 41 insertions, 8 deletions
diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c
index 3e1d9fe1508b..ce341a6874fc 100644
--- a/arch/arm/mach-imx/mach-cpuimx51sd.c
+++ b/arch/arm/mach-imx/mach-cpuimx51sd.c
@@ -41,11 +41,13 @@
41 41
42#define USBH1_RST IMX_GPIO_NR(2, 28) 42#define USBH1_RST IMX_GPIO_NR(2, 28)
43#define ETH_RST IMX_GPIO_NR(2, 31) 43#define ETH_RST IMX_GPIO_NR(2, 31)
44#define TSC2007_IRQGPIO IMX_GPIO_NR(3, 12) 44#define TSC2007_IRQGPIO_REV2 IMX_GPIO_NR(3, 12)
45#define TSC2007_IRQGPIO_REV3 IMX_GPIO_NR(4, 0)
45#define CAN_IRQGPIO IMX_GPIO_NR(1, 1) 46#define CAN_IRQGPIO IMX_GPIO_NR(1, 1)
46#define CAN_RST IMX_GPIO_NR(4, 15) 47#define CAN_RST IMX_GPIO_NR(4, 15)
47#define CAN_NCS IMX_GPIO_NR(4, 24) 48#define CAN_NCS IMX_GPIO_NR(4, 24)
48#define CAN_RXOBF IMX_GPIO_NR(1, 4) 49#define CAN_RXOBF_REV2 IMX_GPIO_NR(1, 4)
50#define CAN_RXOBF_REV3 IMX_GPIO_NR(3, 12)
49#define CAN_RX1BF IMX_GPIO_NR(1, 6) 51#define CAN_RX1BF IMX_GPIO_NR(1, 6)
50#define CAN_TXORTS IMX_GPIO_NR(1, 7) 52#define CAN_TXORTS IMX_GPIO_NR(1, 7)
51#define CAN_TX1RTS IMX_GPIO_NR(1, 8) 53#define CAN_TX1RTS IMX_GPIO_NR(1, 8)
@@ -90,6 +92,10 @@ static iomux_v3_cfg_t eukrea_cpuimx51sd_pads[] = {
90 MX51_PAD_I2C1_CLK__GPIO4_16, 92 MX51_PAD_I2C1_CLK__GPIO4_16,
91 MX51_PAD_I2C1_DAT__GPIO4_17, 93 MX51_PAD_I2C1_DAT__GPIO4_17,
92 94
95 /* I2C1 */
96 MX51_PAD_SD2_CMD__I2C1_SCL,
97 MX51_PAD_SD2_CLK__I2C1_SDA,
98
93 /* CAN */ 99 /* CAN */
94 MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI, 100 MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI,
95 MX51_PAD_CSPI1_MISO__ECSPI1_MISO, 101 MX51_PAD_CSPI1_MISO__ECSPI1_MISO,
@@ -108,15 +114,27 @@ static iomux_v3_cfg_t eukrea_cpuimx51sd_pads[] = {
108 NEW_PAD_CTRL(MX51_PAD_GPIO_NAND__GPIO_NAND, PAD_CTL_PUS_22K_UP | 114 NEW_PAD_CTRL(MX51_PAD_GPIO_NAND__GPIO_NAND, PAD_CTL_PUS_22K_UP |
109 PAD_CTL_PKE | PAD_CTL_SRE_FAST | 115 PAD_CTL_PKE | PAD_CTL_SRE_FAST |
110 PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), 116 PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS),
117 NEW_PAD_CTRL(MX51_PAD_NANDF_D8__GPIO4_0, PAD_CTL_PUS_22K_UP |
118 PAD_CTL_PKE | PAD_CTL_SRE_FAST |
119 PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS),
111}; 120};
112 121
113static const struct imxuart_platform_data uart_pdata __initconst = { 122static const struct imxuart_platform_data uart_pdata __initconst = {
114 .flags = IMXUART_HAVE_RTSCTS, 123 .flags = IMXUART_HAVE_RTSCTS,
115}; 124};
116 125
126static int tsc2007_get_pendown_state(void)
127{
128 if (mx51_revision() < IMX_CHIP_REVISION_3_0)
129 return !gpio_get_value(TSC2007_IRQGPIO_REV2);
130 else
131 return !gpio_get_value(TSC2007_IRQGPIO_REV3);
132}
133
117static struct tsc2007_platform_data tsc2007_info = { 134static struct tsc2007_platform_data tsc2007_info = {
118 .model = 2007, 135 .model = 2007,
119 .x_plate_ohms = 180, 136 .x_plate_ohms = 180,
137 .get_pendown_state = tsc2007_get_pendown_state,
120}; 138};
121 139
122static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = { 140static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = {
@@ -126,7 +144,6 @@ static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = {
126 I2C_BOARD_INFO("tsc2007", 0x49), 144 I2C_BOARD_INFO("tsc2007", 0x49),
127 .type = "tsc2007", 145 .type = "tsc2007",
128 .platform_data = &tsc2007_info, 146 .platform_data = &tsc2007_info,
129 .irq = IMX_GPIO_TO_IRQ(TSC2007_IRQGPIO),
130 }, 147 },
131}; 148};
132 149
@@ -255,10 +272,14 @@ static const struct spi_imx_master cpuimx51sd_ecspi1_pdata __initconst = {
255 .num_chipselect = ARRAY_SIZE(cpuimx51sd_spi1_cs), 272 .num_chipselect = ARRAY_SIZE(cpuimx51sd_spi1_cs),
256}; 273};
257 274
258static struct platform_device *platform_devices[] __initdata = { 275static struct platform_device *rev2_platform_devices[] __initdata = {
259 &hsi2c_gpio_device, 276 &hsi2c_gpio_device,
260}; 277};
261 278
279static const struct imxi2c_platform_data cpuimx51sd_i2c_data __initconst = {
280 .bitrate = 100000,
281};
282
262static void __init eukrea_cpuimx51sd_init(void) 283static void __init eukrea_cpuimx51sd_init(void)
263{ 284{
264 imx51_soc_init(); 285 imx51_soc_init();
@@ -292,13 +313,25 @@ static void __init eukrea_cpuimx51sd_init(void)
292 spi_register_board_info(cpuimx51sd_spi_device, 313 spi_register_board_info(cpuimx51sd_spi_device,
293 ARRAY_SIZE(cpuimx51sd_spi_device)); 314 ARRAY_SIZE(cpuimx51sd_spi_device));
294 315
295 gpio_request(TSC2007_IRQGPIO, "tsc2007_irq"); 316 if (mx51_revision() < IMX_CHIP_REVISION_3_0) {
296 gpio_direction_input(TSC2007_IRQGPIO); 317 eukrea_cpuimx51sd_i2c_devices[1].irq =
297 gpio_free(TSC2007_IRQGPIO); 318 gpio_to_irq(TSC2007_IRQGPIO_REV2),
319 platform_add_devices(rev2_platform_devices,
320 ARRAY_SIZE(rev2_platform_devices));
321 gpio_request(TSC2007_IRQGPIO_REV2, "tsc2007_irq");
322 gpio_direction_input(TSC2007_IRQGPIO_REV2);
323 gpio_free(TSC2007_IRQGPIO_REV2);
324 } else {
325 eukrea_cpuimx51sd_i2c_devices[1].irq =
326 gpio_to_irq(TSC2007_IRQGPIO_REV3),
327 imx51_add_imx_i2c(0, &cpuimx51sd_i2c_data);
328 gpio_request(TSC2007_IRQGPIO_REV3, "tsc2007_irq");
329 gpio_direction_input(TSC2007_IRQGPIO_REV3);
330 gpio_free(TSC2007_IRQGPIO_REV3);
331 }
298 332
299 i2c_register_board_info(0, eukrea_cpuimx51sd_i2c_devices, 333 i2c_register_board_info(0, eukrea_cpuimx51sd_i2c_devices,
300 ARRAY_SIZE(eukrea_cpuimx51sd_i2c_devices)); 334 ARRAY_SIZE(eukrea_cpuimx51sd_i2c_devices));
301 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
302 335
303 if (otg_mode_host) 336 if (otg_mode_host)
304 imx51_add_mxc_ehci_otg(&dr_utmi_config); 337 imx51_add_mxc_ehci_otg(&dr_utmi_config);