diff options
Diffstat (limited to 'arch/arm/mach-mx5/board-mx51_babbage.c')
-rw-r--r-- | arch/arm/mach-mx5/board-mx51_babbage.c | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c index 98b40aae8af..11b0ff67f89 100644 --- a/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/arch/arm/mach-mx5/board-mx51_babbage.c | |||
@@ -36,11 +36,13 @@ | |||
36 | 36 | ||
37 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) | 37 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) |
38 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) | 38 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) |
39 | #define BABBAGE_PHY_RESET IMX_GPIO_NR(2, 5) | 39 | #define BABBAGE_USB_PHY_RESET IMX_GPIO_NR(2, 5) |
40 | #define BABBAGE_FEC_PHY_RESET IMX_GPIO_NR(2, 14) | 40 | #define BABBAGE_FEC_PHY_RESET IMX_GPIO_NR(2, 14) |
41 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) | 41 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) |
42 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) | 42 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) |
43 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) | 43 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) |
44 | #define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6) | ||
45 | #define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5) | ||
44 | 46 | ||
45 | /* USB_CTRL_1 */ | 47 | /* USB_CTRL_1 */ |
46 | #define MX51_USB_CTRL_1_OFFSET 0x10 | 48 | #define MX51_USB_CTRL_1_OFFSET 0x10 |
@@ -110,6 +112,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
110 | /* USB HUB reset line*/ | 112 | /* USB HUB reset line*/ |
111 | MX51_PAD_GPIO1_7__GPIO1_7, | 113 | MX51_PAD_GPIO1_7__GPIO1_7, |
112 | 114 | ||
115 | /* USB PHY reset line */ | ||
116 | MX51_PAD_EIM_D21__GPIO2_5, | ||
117 | |||
113 | /* FEC */ | 118 | /* FEC */ |
114 | MX51_PAD_EIM_EB2__FEC_MDIO, | 119 | MX51_PAD_EIM_EB2__FEC_MDIO, |
115 | MX51_PAD_EIM_EB3__FEC_RDATA1, | 120 | MX51_PAD_EIM_EB3__FEC_RDATA1, |
@@ -139,6 +144,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
139 | MX51_PAD_SD1_DATA1__SD1_DATA1, | 144 | MX51_PAD_SD1_DATA1__SD1_DATA1, |
140 | MX51_PAD_SD1_DATA2__SD1_DATA2, | 145 | MX51_PAD_SD1_DATA2__SD1_DATA2, |
141 | MX51_PAD_SD1_DATA3__SD1_DATA3, | 146 | MX51_PAD_SD1_DATA3__SD1_DATA3, |
147 | /* CD/WP from controller */ | ||
148 | MX51_PAD_GPIO1_0__SD1_CD, | ||
149 | MX51_PAD_GPIO1_1__SD1_WP, | ||
142 | 150 | ||
143 | /* SD 2 */ | 151 | /* SD 2 */ |
144 | MX51_PAD_SD2_CMD__SD2_CMD, | 152 | MX51_PAD_SD2_CMD__SD2_CMD, |
@@ -147,6 +155,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
147 | MX51_PAD_SD2_DATA1__SD2_DATA1, | 155 | MX51_PAD_SD2_DATA1__SD2_DATA1, |
148 | MX51_PAD_SD2_DATA2__SD2_DATA2, | 156 | MX51_PAD_SD2_DATA2__SD2_DATA2, |
149 | MX51_PAD_SD2_DATA3__SD2_DATA3, | 157 | MX51_PAD_SD2_DATA3__SD2_DATA3, |
158 | /* CD/WP gpio */ | ||
159 | MX51_PAD_GPIO1_6__GPIO1_6, | ||
160 | MX51_PAD_GPIO1_5__GPIO1_5, | ||
150 | 161 | ||
151 | /* eCSPI1 */ | 162 | /* eCSPI1 */ |
152 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, | 163 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, |
@@ -169,34 +180,31 @@ static struct imxi2c_platform_data babbage_hsi2c_data = { | |||
169 | .bitrate = 400000, | 180 | .bitrate = 400000, |
170 | }; | 181 | }; |
171 | 182 | ||
183 | static struct gpio mx51_babbage_usbh1_gpios[] = { | ||
184 | { BABBAGE_USBH1_STP, GPIOF_OUT_INIT_LOW, "usbh1_stp" }, | ||
185 | { BABBAGE_USB_PHY_RESET, GPIOF_OUT_INIT_LOW, "usbh1_phy_reset" }, | ||
186 | }; | ||
187 | |||
172 | static int gpio_usbh1_active(void) | 188 | static int gpio_usbh1_active(void) |
173 | { | 189 | { |
174 | iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27; | 190 | iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27; |
175 | iomux_v3_cfg_t phyreset_gpio = MX51_PAD_EIM_D21__GPIO2_5; | ||
176 | int ret; | 191 | int ret; |
177 | 192 | ||
178 | /* Set USBH1_STP to GPIO and toggle it */ | 193 | /* Set USBH1_STP to GPIO and toggle it */ |
179 | mxc_iomux_v3_setup_pad(usbh1stp_gpio); | 194 | mxc_iomux_v3_setup_pad(usbh1stp_gpio); |
180 | ret = gpio_request(BABBAGE_USBH1_STP, "usbh1_stp"); | 195 | ret = gpio_request_array(mx51_babbage_usbh1_gpios, |
196 | ARRAY_SIZE(mx51_babbage_usbh1_gpios)); | ||
181 | 197 | ||
182 | if (ret) { | 198 | if (ret) { |
183 | pr_debug("failed to get MX51_PAD_USBH1_STP__GPIO_1_27: %d\n", ret); | 199 | pr_debug("failed to get USBH1 pins: %d\n", ret); |
184 | return ret; | 200 | return ret; |
185 | } | 201 | } |
186 | gpio_direction_output(BABBAGE_USBH1_STP, 0); | ||
187 | gpio_set_value(BABBAGE_USBH1_STP, 1); | ||
188 | msleep(100); | ||
189 | gpio_free(BABBAGE_USBH1_STP); | ||
190 | |||
191 | /* De-assert USB PHY RESETB */ | ||
192 | mxc_iomux_v3_setup_pad(phyreset_gpio); | ||
193 | ret = gpio_request(BABBAGE_PHY_RESET, "phy_reset"); | ||
194 | 202 | ||
195 | if (ret) { | 203 | msleep(100); |
196 | pr_debug("failed to get MX51_PAD_EIM_D21__GPIO_2_5: %d\n", ret); | 204 | gpio_set_value(BABBAGE_USBH1_STP, 1); |
197 | return ret; | 205 | gpio_set_value(BABBAGE_USB_PHY_RESET, 1); |
198 | } | 206 | gpio_free_array(mx51_babbage_usbh1_gpios, |
199 | gpio_direction_output(BABBAGE_PHY_RESET, 1); | 207 | ARRAY_SIZE(mx51_babbage_usbh1_gpios)); |
200 | return 0; | 208 | return 0; |
201 | } | 209 | } |
202 | 210 | ||
@@ -331,6 +339,18 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = { | |||
331 | .num_chipselect = ARRAY_SIZE(mx51_babbage_spi_cs), | 339 | .num_chipselect = ARRAY_SIZE(mx51_babbage_spi_cs), |
332 | }; | 340 | }; |
333 | 341 | ||
342 | static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = { | ||
343 | .cd_type = ESDHC_CD_CONTROLLER, | ||
344 | .wp_type = ESDHC_WP_CONTROLLER, | ||
345 | }; | ||
346 | |||
347 | static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = { | ||
348 | .cd_gpio = BABBAGE_SD2_CD, | ||
349 | .wp_gpio = BABBAGE_SD2_WP, | ||
350 | .cd_type = ESDHC_CD_GPIO, | ||
351 | .wp_type = ESDHC_WP_GPIO, | ||
352 | }; | ||
353 | |||
334 | /* | 354 | /* |
335 | * Board specific initialization. | 355 | * Board specific initialization. |
336 | */ | 356 | */ |
@@ -340,6 +360,8 @@ static void __init mx51_babbage_init(void) | |||
340 | iomux_v3_cfg_t power_key = _MX51_PAD_EIM_A27__GPIO2_21 | | 360 | iomux_v3_cfg_t power_key = _MX51_PAD_EIM_A27__GPIO2_21 | |
341 | MUX_PAD_CTRL(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | PAD_CTL_PUS_100K_UP); | 361 | MUX_PAD_CTRL(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | PAD_CTL_PUS_100K_UP); |
342 | 362 | ||
363 | imx51_soc_init(); | ||
364 | |||
343 | #if defined(CONFIG_CPU_FREQ_IMX) | 365 | #if defined(CONFIG_CPU_FREQ_IMX) |
344 | get_cpu_op = mx51_get_cpu_op; | 366 | get_cpu_op = mx51_get_cpu_op; |
345 | #endif | 367 | #endif |
@@ -374,8 +396,8 @@ static void __init mx51_babbage_init(void) | |||
374 | mxc_iomux_v3_setup_pad(usbh1stp); | 396 | mxc_iomux_v3_setup_pad(usbh1stp); |
375 | babbage_usbhub_reset(); | 397 | babbage_usbhub_reset(); |
376 | 398 | ||
377 | imx51_add_sdhci_esdhc_imx(0, NULL); | 399 | imx51_add_sdhci_esdhc_imx(0, &mx51_babbage_sd1_data); |
378 | imx51_add_sdhci_esdhc_imx(1, NULL); | 400 | imx51_add_sdhci_esdhc_imx(1, &mx51_babbage_sd2_data); |
379 | 401 | ||
380 | spi_register_board_info(mx51_babbage_spi_board_info, | 402 | spi_register_board_info(mx51_babbage_spi_board_info, |
381 | ARRAY_SIZE(mx51_babbage_spi_board_info)); | 403 | ARRAY_SIZE(mx51_babbage_spi_board_info)); |