From 68fc3e152c9f99323e2a4917967725aec5281b32 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 11 Jan 2011 17:13:35 +0000 Subject: omap3: beaglexm: fix EHCI power up GPIO dir EHCI enable power pin is inverted (active high) in comparison to vanilla beagle which is active low. Handle this case conditionally. Without this fix, Beagle XM 4 port EHCI will not function and no networking will be available [nm@ti.com: split up, added descriptive changelogs] Signed-off-by: Nishanth Menon Signed-off-by: Koen Kooi Signed-off-by: Tony Lindgren --- arch/arm/mach-omap2/board-omap3beagle.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'arch/arm/mach-omap2/board-omap3beagle.c') diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 6c127605942f..af1166bd1c86 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -297,9 +297,15 @@ static int beagle_twl_gpio_setup(struct device *dev, gpio_request(gpio + 1, "EHCI_nOC"); gpio_direction_input(gpio + 1); - /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ + /* + * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active + * high / others active low) + */ gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) + gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1); + else + gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; -- cgit v1.2.3 From f8362d215549c66066f78e67c033dd370ae50322 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 11 Jan 2011 17:13:36 +0000 Subject: omap3: beaglexm: fix DVI reset GPIO GPIO reset line for Beagle XM is different from vanilla beagle so we populate it as part of gpio update routine. This in part fixes the issue of display not functioning on beagle XM platform. [nm@ti.com: split up, added descriptive changelogs] Signed-off-by: Nishanth Menon Signed-off-by: Koen Kooi Signed-off-by: Tony Lindgren --- arch/arm/mach-omap2/board-omap3beagle.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'arch/arm/mach-omap2/board-omap3beagle.c') diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index af1166bd1c86..673deb9189fe 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -199,7 +199,7 @@ static struct omap_dss_device beagle_dvi_device = { .name = "dvi", .driver_name = "generic_panel", .phy.dpi.data_lines = 24, - .reset_gpio = 170, + .reset_gpio = -EINVAL, .platform_enable = beagle_enable_dvi, .platform_disable = beagle_disable_dvi, }; @@ -307,6 +307,12 @@ static int beagle_twl_gpio_setup(struct device *dev, else gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); + /* DVI reset GPIO is different between beagle revisions */ + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) + beagle_dvi_device.reset_gpio = 129; + else + beagle_dvi_device.reset_gpio = 170; + /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; -- cgit v1.2.3 From 1bd9ef198498e3e00c9d78a1566338f7ea2e4bb5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 12 Jan 2011 00:23:29 +0000 Subject: omap3: beaglexm: fix power on of DVI TFP410 DVI chip is used to provide display out. This chip is controlled by 2 lines: LDO which supplies the power is controlled over gpio + 2 and the enable of the chip itself is done over gpio + 1 NOTE: the LDO is necessary for LED, serial blocks as well. gpio + 1 was used to sense USB overcurrent in vanilla beagle. Without this fix, the display would not function as the LDO remains shut down. [nm@ti.com: split up, added descriptive changelogs] Signed-off-by: Nishanth Menon Signed-off-by: Koen Kooi Signed-off-by: Tony Lindgren --- arch/arm/mach-omap2/board-omap3beagle.c | 42 ++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'arch/arm/mach-omap2/board-omap3beagle.c') diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 673deb9189fe..2ed804073f35 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -273,6 +273,8 @@ static struct gpio_led gpio_leds[]; static int beagle_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio) { + int r; + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { mmc[0].gpio_wp = -EINVAL; } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || @@ -293,9 +295,16 @@ static int beagle_twl_gpio_setup(struct device *dev, /* REVISIT: need ehci-omap hooks for external VBUS * power switch and overcurrent detect */ - - gpio_request(gpio + 1, "EHCI_nOC"); - gpio_direction_input(gpio + 1); + if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) { + r = gpio_request(gpio + 1, "EHCI_nOC"); + if (!r) { + r = gpio_direction_input(gpio + 1); + if (r) + gpio_free(gpio + 1); + } + if (r) + pr_err("%s: unable to configure EHCI_nOC\n", __func__); + } /* * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active @@ -316,6 +325,33 @@ static int beagle_twl_gpio_setup(struct device *dev, /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; + /* + * gpio + 1 on Xm controls the TFP410's enable line (active low) + * gpio + 2 control varies depending on the board rev as follows: + * P7/P8 revisions(prototype): Camera EN + * A2+ revisions (production): LDO (supplies DVI, serial, led blocks) + */ + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { + r = gpio_request(gpio + 1, "nDVI_PWR_EN"); + if (!r) { + r = gpio_direction_output(gpio + 1, 0); + if (r) + gpio_free(gpio + 1); + } + if (r) + pr_err("%s: unable to configure nDVI_PWR_EN\n", + __func__); + r = gpio_request(gpio + 2, "DVI_LDO_EN"); + if (!r) { + r = gpio_direction_output(gpio + 2, 1); + if (r) + gpio_free(gpio + 2); + } + if (r) + pr_err("%s: unable to configure DVI_LDO_EN\n", + __func__); + } + return 0; } -- cgit v1.2.3