Skip to contentSkip to conversation

OMAP3: beaglexm: GPIO fixes

PATCH New Nishanth Menon 2 participants 8 messages Jan 11, 2011 – Jan 12, 2011 1 message not in the archive

Subsystems (3)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [PATCH v4 0/3] OMAP3: beaglexm: GPIO fixes

#1 lore raw

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

#2 lore raw

PATCH v5 1/3 omap3: beaglexm: fix EHCI power up GPIO dir

In reply to a message not in the archive

From: 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

[nm at ti.com: split up, added descriptive changelogs]
---
 arch/arm/mach-omap2/board-omap3beagle.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +8 -2
index 6c12760..af1166b 100644
@@ -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
#3 lore raw

PATCH v5 2/3 omap3: beaglexm: fix DVI reset GPIO

In reply to a message not in the archive

From: 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.

[nm at ti.com: split up, added descriptive changelogs]
---
 arch/arm/mach-omap2/board-omap3beagle.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +7 -1
index af1166b..673deb9 100644
@@ -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
#4 lore raw

PATCH v5 3/3 omap3: beaglexm: fix power on of DVI

In reply to a message not in the archive

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]
---
 arch/arm/mach-omap2/board-omap3beagle.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +17 -3
index 673deb9..458aee4 100644
@@ -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
maintainer
#5 lore raw

PATCH 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]
---
 arch/arm/mach-omap2/board-omap3beagle.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +0 -0
index 673deb9..458aee4 100644

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

#6 lore raw

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_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

Signature · 2 lines
Regards,
Nishanth Menon
maintainer
#7 lore raw

PATCH 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_request must 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

#8 lore raw

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_request must 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.patch

That 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_free be 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