Re: [PATCH v5 3/3] omap3: beaglexm: fix power on of DVI
* Nishanth Menon n...@ti.com [110111 09:12]: From: Koen Kooi k...@beagleboard.org 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. [...@ti.com: split up, added descriptive changelogs] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Koen Kooi k...@beagleboard.org --- 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. /* * 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 -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 3/3] omap3: beaglexm: fix power on of DVI
Tony Lindgren had written, on 01/11/2011 05:23 PM, the following: [..] - - 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 From d08694a8dff8506f1963d9249a89dae9fe508e70 Mon Sep 17 00:00:00 2001 From: Koen Kooi k...@beagleboard.org Date: Thu, 6 Jan 2011 13:29:18 -0600 Subject: [PATCH v6 3/3] 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. [...@ti.com: split up, added descriptive changelogs] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Koen Kooi k...@beagleboard.org --- arch/arm/mach-omap2/board-omap3beagle.c | 42 -- 1 files changed, 39 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 673deb9..28dfe8e 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 + 1); + } + if (r) + pr_err(%s: unable to configure DVI_LDO_EN\n, +__func__); + } + return 0; } -- 1.6.3.3 From f16524ab1cfba7d2a9bd0a8ef5a577a1fb41bfff Mon Sep 17 00:00:00 2001 From: Nishanth Menon n...@ti.com Date: Tue, 11 Jan 2011 17:51:47 -0600 Subject: [PATCH] omap3: beagle: check gpio returns in gpio_setup gpio request and set of directions need checks of return value to ensure that operation succeeded or not. Signed-off-by: Nishanth Menon n...@ti.com --- arch/arm/mach-omap2/board-omap3beagle.c | 49 --- 1 files changed, 38 insertions(+), 11 deletions(-) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 458aee4..fc598d3 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) || @@ -294,19 +296,29 @@ static int beagle_twl_gpio_setup(struct device *dev, * power switch and overcurrent detect */ if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) { - gpio_request(gpio + 1, EHCI_nOC); - gpio_direction_input(gpio + 1); + 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:
Re: [PATCH v5 3/3] omap3: beaglexm: fix power on of DVI
* Nishanth Menon n...@ti.com [110111 15:54]: Tony Lindgren had written, on 01/11/2011 05:23 PM, the following: [..] - - 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 -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 3/3] omap3: beaglexm: fix power on of DVI
Tony Lindgren had written, on 01/11/2011 06:15 PM, the following: * Nishanth Menon n...@ti.com [110111 15:54]: Tony Lindgren had written, on 01/11/2011 05:23 PM, the following: [..] - - 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. ok + 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 -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html