OMAP3: beaglexm: GPIO fixes
Subsystems (3)
A message that is not in the archive (sent off-list or not yet received): [PATCH v4 0/3] OMAP3: beaglexm: GPIO fixes
v5 cover OMAP3: beaglexm: GPIO fixes
Hi,
revision 5 of this series.
As discussed in the threads:
http://thread.gmane.org/gmane.linux.ports.arm.omap/47807/
http://marc.info/?t=121540030800004&r=1&w=2
here is the split up series with commit message after discussion:
http://www.beagleboard.org/irclogs/index.php?date=2011-01-06#T19:12:21
Koen Kooi (3):
omap3: beaglexm: fix EHCI power up GPIO dir
omap3: beaglexm: fix DVI reset GPIO
omap3: beaglexm: fix power on of DVI
arch/arm/mach-omap2/board-omap3beagle.c | 38 ++++++++++++++++++++++++++----- 1 files changed, 32 insertions(+), 6 deletions(-)
v5:
review comment incorporation - gpio_direction_output removable.
v4: http://marc.info/?t=129444130100001&r=1&w=2
no functional change.
minor cleanups in commit logs incorporating offline feedback
v3: http://marc.info/?t=129434384700006&r=1&w=2
split up the series, addressed review comments
v2: http://marc.info/?t=129276977900002&r=1&w=2
Reenable the PMU stat LED
v1: http://marc.info/?t=129172571000001&r=1&w=2
Regards,
Nishanth Menon
PATCH v5 1/3 omap3: beaglexm: fix EHCI power up GPIO dir
In reply to a message not in the archiveFrom: Koen Kooi <[email protected]>
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
--- arch/arm/mach-omap2/board-omap3beagle.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +8 -2
@@ -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 ;
Signature · 1 line
1.6.3.3
PATCH v5 2/3 omap3: beaglexm: fix DVI reset GPIO
In reply to a message not in the archiveFrom: Koen Kooi <[email protected]>
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.
--- arch/arm/mach-omap2/board-omap3beagle.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +7 -1
@@ -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 ;
Signature · 1 line
1.6.3.3
PATCH v5 3/3 omap3: beaglexm: fix power on of DVI
In reply to a message not in the archiveFrom: Koen Kooi <[email protected]>
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.
--- arch/arm/mach-omap2/board-omap3beagle.c | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +17 -3
@@ -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 ; }
Signature · 1 line
1.6.3.3
Tony Lindgren
maintainerPATCH v5 3/3 omap3: beaglexm: fix power on of DVI
Quoted 25 lines · Nishanth Menon
From: Koen Kooi <[email protected]>
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 <[email protected]>Signed-off-by Koen Kooi <[email protected]>--- arch/arm/mach-omap2/board-omap3beagle.c | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-)arch/arm/mach-omap2/board-omap3beagle.c +0
-0
arch/arm/mach-omap2/board-omap3beagle.c static int beagle_twl_gpio_setup(struct device *dev, · line 299
Quoted 10 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-3@@ -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 11 lines
arch/arm/mach-omap2/board-omap3beagle.c +5
-0/* * 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)
arch/arm/mach-omap2/board-omap3beagle.c static int beagle_twl_gpio_setup(struct device *dev, · line 334
Quoted 10 lines
arch/arm/mach-omap2/board-omap3beagle.c +8
-0+*/ +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
PATCH v5 3/3 omap3: beaglexm: fix power on of DVI
Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..]
Quoted 9 lines
arch/arm/mach-omap2/board-omap3beagle.c static int beagle_twl_gpio_setup(struct device *dev, · line 299
Quoted 7 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-3- -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_requestmust 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
Signature · 2 lines
Regards, Nishanth Menon
Tony Lindgren
maintainerPATCH v5 3/3 omap3: beaglexm: fix power on of DVI
Quoted 11 lines · Nishanth Menon
Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..]Quoted 9 lines
arch/arm/mach-omap2/board-omap3beagle.c static int beagle_twl_gpio_setup(struct device *dev, · line 299
Quoted 7 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-3- -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_requestmust be checked.
Quoted 3 lines
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 3 lines
OR
b) we take this patch and do another one cleaning the function up - gpio-check.patch
That can be done later.
Quoted 11 lines
(quoted diff) +11
-0+ 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");
Review
Quoted 10 lines
(quoted diff) +10
-0+ 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
PATCH v5 3/3 omap3: beaglexm: fix power on of DVI
Tony Lindgren had written, on 01/11/2011 06:15 PM, the following:
Quoted 15 lines · Nishanth Menon
Quoted 10 lines
Tony Lindgren had written, on 01/11/2011 05:23 PM, the following:
[..]Quoted 8 lines
arch/arm/mach-omap2/board-omap3beagle.c static int beagle_twl_gpio_setup(struct device *dev, · line 299
Quoted 7 lines
arch/arm/mach-omap2/board-omap3beagle.c +4
-3- -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_requestmust be checked.Quoted 3 lines
Ack.
we can go down two paths:
a) I can redo this patch as in v6.patch (attached)
Quoted 7 lines
Yes let's do that, one comment below though..
Quoted 3 lines
OR
b) we take this patch and do another one cleaning the function up - gpio-check.patchThat can be done later.
ok
Quoted 16 lines
Quoted 16 lines
(quoted diff) +15
-0+ 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);
Quoted 8 lines
Review
Quoted 6 lines
(quoted diff) +6
-0+ } + if (r) + pr_err("%s: unable to configure DVI_LDO_EN\n", + __func__); + } +Should the second
gpio_freebe gpio + 2 instead of gpio + 1?
oops.. yep. will fix and send out a v6 for this alone. thanks for the check.
Signature · 2 lines
Regards, Nishanth Menon