aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/board-omap3beagle.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-14 16:13:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-14 16:13:07 -0500
commitec08bdb148767f1193f5f3028749ed865ac27181 (patch)
tree03effeb02aaa21a21eaa70cd438ae301566af740 /arch/arm/mach-omap2/board-omap3beagle.c
parent9cefa17e196beab300d4faf09d242de77e5900d5 (diff)
parent7d4ca85a53bab1f6f9911411be38e0486a11187a (diff)
Merge branch 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: (27 commits) omap4: Fix ULPI PHY init for ES1.0 SDP omap3: beaglexm: fix power on of DVI omap3: igep3: Add omap_reserve functionality omap3: beaglexm: fix DVI reset GPIO omap3: beaglexm: fix EHCI power up GPIO dir omap3: igep2: Add keypad support omap3: igep3: Fix IGEP module second MMC channel power supply omap3: igep3: Add USB EHCI support for IGEP module omap3: clocks: Fix build error 'CK_3430ES2' undeclared here arm: omap4: pandaboard: turn on PHY reference clock at init omap2plus: prm: Trvial build break fix for undefined reference to 'omap2_prm_read_mod_reg' omap2plus: voltage: Trivial linking fix for 'EINVAL' undeclared omap2plus: voltage: Trivial linking fix 'undefined reference' omap2plus: voltage: Trivial warning fix 'no return statement' omap2plus: clockdomain: Trivial fix for build break because of clktrctrl_mask arm: omap: gpio: don't access irq_desc array directly omap2+: pm_bus: make functions used as pointers as static OMAP: GPIO: fix _set_gpio_triggering() for OMAP2+ OMAP2+: TWL: include pm header for init protos OMAP2+: TWL: make conversion routines static ... Fix up conflicts in arch/arm/mach-omap2/board-omap3beagle.c ("DVI reset GPIO" vs "use generic DPI panel driver")
Diffstat (limited to 'arch/arm/mach-omap2/board-omap3beagle.c')
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c60
1 files changed, 54 insertions, 6 deletions
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index a4fe8e1ee1b..46d814ab565 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -207,7 +207,7 @@ static struct omap_dss_device beagle_dvi_device = {
207 .driver_name = "generic_dpi_panel", 207 .driver_name = "generic_dpi_panel",
208 .data = &dvi_panel, 208 .data = &dvi_panel,
209 .phy.dpi.data_lines = 24, 209 .phy.dpi.data_lines = 24,
210 .reset_gpio = 170, 210 .reset_gpio = -EINVAL,
211}; 211};
212 212
213static struct omap_dss_device beagle_tv_device = { 213static struct omap_dss_device beagle_tv_device = {
@@ -279,6 +279,8 @@ static struct gpio_led gpio_leds[];
279static int beagle_twl_gpio_setup(struct device *dev, 279static int beagle_twl_gpio_setup(struct device *dev,
280 unsigned gpio, unsigned ngpio) 280 unsigned gpio, unsigned ngpio)
281{ 281{
282 int r;
283
282 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 284 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
283 mmc[0].gpio_wp = -EINVAL; 285 mmc[0].gpio_wp = -EINVAL;
284 } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || 286 } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
@@ -299,17 +301,63 @@ static int beagle_twl_gpio_setup(struct device *dev,
299 /* REVISIT: need ehci-omap hooks for external VBUS 301 /* REVISIT: need ehci-omap hooks for external VBUS
300 * power switch and overcurrent detect 302 * power switch and overcurrent detect
301 */ 303 */
304 if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
305 r = gpio_request(gpio + 1, "EHCI_nOC");
306 if (!r) {
307 r = gpio_direction_input(gpio + 1);
308 if (r)
309 gpio_free(gpio + 1);
310 }
311 if (r)
312 pr_err("%s: unable to configure EHCI_nOC\n", __func__);
313 }
302 314
303 gpio_request(gpio + 1, "EHCI_nOC"); 315 /*
304 gpio_direction_input(gpio + 1); 316 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
305 317 * high / others active low)
306 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ 318 */
307 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); 319 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
308 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 320 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
321 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
322 else
323 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
324
325 /* DVI reset GPIO is different between beagle revisions */
326 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
327 beagle_dvi_device.reset_gpio = 129;
328 else
329 beagle_dvi_device.reset_gpio = 170;
309 330
310 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 331 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
311 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 332 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
312 333
334 /*
335 * gpio + 1 on Xm controls the TFP410's enable line (active low)
336 * gpio + 2 control varies depending on the board rev as follows:
337 * P7/P8 revisions(prototype): Camera EN
338 * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
339 */
340 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
341 r = gpio_request(gpio + 1, "nDVI_PWR_EN");
342 if (!r) {
343 r = gpio_direction_output(gpio + 1, 0);
344 if (r)
345 gpio_free(gpio + 1);
346 }
347 if (r)
348 pr_err("%s: unable to configure nDVI_PWR_EN\n",
349 __func__);
350 r = gpio_request(gpio + 2, "DVI_LDO_EN");
351 if (!r) {
352 r = gpio_direction_output(gpio + 2, 1);
353 if (r)
354 gpio_free(gpio + 2);
355 }
356 if (r)
357 pr_err("%s: unable to configure DVI_LDO_EN\n",
358 __func__);
359 }
360
313 return 0; 361 return 0;
314} 362}
315 363