[PATCH v5 3/3] omap3: beaglexm: fix power on of DVI
Subsystems:
arm port , omap2+ support , the rest
STALE5717d
5 messages,
2 authors,
2011-01-12 · open the first message on its own page
From: Koen Kooi <redacted>
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 at ti.com: split up, added descriptive changelogs]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Koen Kooi <redacted>
---
arch/arm/mach-omap2/board-omap3beagle.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 673deb9..458aee4 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -293,9 +293,10 @@ 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 ) {
+ gpio_request ( gpio + 1 , "EHCI_nOC" );
+ gpio_direction_input ( gpio + 1 );
+ }
/*
* TWL4030_GPIO_MAX + 0 == ledA , EHCI nEN_USB_PWR ( out , XM active @@ -316,6 +317,19 @@ 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 ) {
+ gpio_request ( gpio + 1 , "nDVI_PWR_EN" );
+ gpio_direction_output ( gpio + 1 , 0 );
+ gpio_request ( gpio + 2 , "DVI_LDO_EN" );
+ gpio_direction_output ( gpio + 2 , 1 );
+ }
+
return 0 ;
}
--
1.6.3.3
* Nishanth Menon [off-list ref] [110111 09:12]: quoted hunk From: Koen Kooi <redacted>
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 at ti.com: split up, added descriptive changelogs]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Koen Kooi <redacted>
---
arch/arm/mach-omap2/board-omap3beagle.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 673deb9..458aee4 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -293,9 +293,10 @@ 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 ) {
+ gpio_request ( gpio + 1 , "EHCI_nOC" );
+ gpio_direction_input ( gpio + 1 );
+ }
The return value for gpio_request must be checked.
quoted hunk /*
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active @@ -316,6 +317,19 @@ 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) {
+ gpio_request(gpio + 1, "nDVI_PWR_EN");
+ gpio_direction_output(gpio + 1, 0);
+ gpio_request(gpio + 2, "DVI_LDO_EN");
+ gpio_direction_output(gpio + 2, 1);
+ }
+
return 0;
}
Here too. I've applied the first two patches into devel-board branch,
but not this one.
Regards,
Tony
Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..] quoted -
- gpio_request(gpio + 1, "EHCI_nOC");
- gpio_direction_input(gpio + 1);
+ if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
+ gpio_request(gpio + 1, "EHCI_nOC");
+ gpio_direction_input(gpio + 1);
+ }
The return value for gpio_request must be checked. Ack.
we can go down two paths:
a) I can redo this patch as in v6.patch (attached)
OR
b) we take this patch and do another one cleaning the function up -
gpio-check.patch
--
Regards,
Nishanth Menon
* Nishanth Menon [off-list ref] [110111 15:54]: Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..] quoted quoted -
- gpio_request(gpio + 1, "EHCI_nOC");
- gpio_direction_input(gpio + 1);
+ if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
+ gpio_request(gpio + 1, "EHCI_nOC");
+ gpio_direction_input(gpio + 1);
+ }
The return value for gpio_request must be checked. Ack.
we can go down two paths:
a) I can redo this patch as in v6.patch (attached)
Yes let's do that, one comment below though..
OR
b) we take this patch and do another one cleaning the function up -
gpio-check.patch
That can be done later.
+ 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 + 1);
+ }
+ if (r)
+ pr_err("%s: unable to configure DVI_LDO_EN\n",
+ __func__);
+ }
+
Should the second gpio_free be gpio + 2 instead of gpio + 1?
Tony
Tony Lindgren had written, on 01/11/2011 06:15 PM, the following: * Nishanth Menon [off-list ref] [110111 15:54]: quoted Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..] quoted quoted -
- gpio_request(gpio + 1, "EHCI_nOC");
- gpio_direction_input(gpio + 1);
+ if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
+ gpio_request(gpio + 1, "EHCI_nOC");
+ gpio_direction_input(gpio + 1);
+ } The return value for gpio_request must be checked. Ack.
we can go down two paths:
a) I can redo this patch as in v6.patch (attached)
Yes let's do that, one comment below though..
quoted OR
b) we take this patch and do another one cleaning the function up -
gpio-check.patch
That can be done later. ok
quoted + 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 + 1);
+ }
+ if (r)
+ pr_err("%s: unable to configure DVI_LDO_EN\n",
+ __func__);
+ }
+
Should the second gpio_free be gpio + 2 instead of gpio + 1? oops.. yep. will fix and send out a v6 for this alone. thanks for the check.
--
Regards,
Nishanth Menon