diff options
author | Eric Bénard <eric@eukrea.com> | 2012-05-08 03:20:23 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-05-08 11:31:24 -0400 |
commit | 7138a7f9ac3640df808c295c411bc4acb3d1965e (patch) | |
tree | 986862b123a0b1e08c6b89448f244712e8da2804 | |
parent | 932d67d4c8367fa753c55d922cefafcdcdcf18c3 (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.c | 49 |
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 | ||
113 | static const struct imxuart_platform_data uart_pdata __initconst = { | 122 | static const struct imxuart_platform_data uart_pdata __initconst = { |
114 | .flags = IMXUART_HAVE_RTSCTS, | 123 | .flags = IMXUART_HAVE_RTSCTS, |
115 | }; | 124 | }; |
116 | 125 | ||
126 | static 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 | |||
117 | static struct tsc2007_platform_data tsc2007_info = { | 134 | static 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 | ||
122 | static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = { | 140 | static 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 | ||
258 | static struct platform_device *platform_devices[] __initdata = { | 275 | static struct platform_device *rev2_platform_devices[] __initdata = { |
259 | &hsi2c_gpio_device, | 276 | &hsi2c_gpio_device, |
260 | }; | 277 | }; |
261 | 278 | ||
279 | static const struct imxi2c_platform_data cpuimx51sd_i2c_data __initconst = { | ||
280 | .bitrate = 100000, | ||
281 | }; | ||
282 | |||
262 | static void __init eukrea_cpuimx51sd_init(void) | 283 | static 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); |