diff mbox

powerpc/83xx: Do not configure or probe disabled FSL DR USB controllers

Message ID 20090219160223.GA2095@oksana.dev.rtsoft.ru (mailing list archive)
State Accepted, archived
Commit c026c98739c7e435440e76cbcd96e0f8ebeeada0
Delegated to: Kumar Gala
Headers show

Commit Message

Anton Vorontsov Feb. 19, 2009, 4:02 p.m. UTC
On MPC837X CPUs Dual-Role USB isn't always available (for example DR
USB pins can be muxed away to eSDHC).

U-Boot adds status = "disabled" property into the DR USB nodes to
indicate that we must not try to configure or probe Dual-Role USB,
otherwise we'll break eSDHC support on targets with MPC837X CPUs.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 arch/powerpc/platforms/83xx/usb.c |    3 ++-
 arch/powerpc/sysdev/fsl_soc.c     |    4 ++++
 2 files changed, 6 insertions(+), 1 deletions(-)

Comments

Kumar Gala Feb. 19, 2009, 4:19 p.m. UTC | #1
On Feb 19, 2009, at 10:02 AM, Anton Vorontsov wrote:

> On MPC837X CPUs Dual-Role USB isn't always available (for example DR
> USB pins can be muxed away to eSDHC).
>
> U-Boot adds status = "disabled" property into the DR USB nodes to
> indicate that we must not try to configure or probe Dual-Role USB,
> otherwise we'll break eSDHC support on targets with MPC837X CPUs.
>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/platforms/83xx/usb.c |    3 ++-
> arch/powerpc/sysdev/fsl_soc.c     |    4 ++++
> 2 files changed, 6 insertions(+), 1 deletions(-)

Mind looking at possibly killing the fsl_soc.c  usb code and making  
the usb a real of-platform driver?

- k
Kumar Gala Feb. 19, 2009, 4:43 p.m. UTC | #2
On Feb 19, 2009, at 10:02 AM, Anton Vorontsov wrote:

> On MPC837X CPUs Dual-Role USB isn't always available (for example DR
> USB pins can be muxed away to eSDHC).
>
> U-Boot adds status = "disabled" property into the DR USB nodes to
> indicate that we must not try to configure or probe Dual-Role USB,
> otherwise we'll break eSDHC support on targets with MPC837X CPUs.
>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/platforms/83xx/usb.c |    3 ++-
> arch/powerpc/sysdev/fsl_soc.c     |    4 ++++
> 2 files changed, 6 insertions(+), 1 deletions(-)


applied to next

- k
Anton Vorontsov Feb. 19, 2009, 5:29 p.m. UTC | #3
On Thu, Feb 19, 2009 at 10:19:05AM -0600, Kumar Gala wrote:
>
> On Feb 19, 2009, at 10:02 AM, Anton Vorontsov wrote:
>
>> On MPC837X CPUs Dual-Role USB isn't always available (for example DR
>> USB pins can be muxed away to eSDHC).
>>
>> U-Boot adds status = "disabled" property into the DR USB nodes to
>> indicate that we must not try to configure or probe Dual-Role USB,
>> otherwise we'll break eSDHC support on targets with MPC837X CPUs.
>>
>> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
>> ---
>> arch/powerpc/platforms/83xx/usb.c |    3 ++-
>> arch/powerpc/sysdev/fsl_soc.c     |    4 ++++
>> 2 files changed, 6 insertions(+), 1 deletions(-)
>
> Mind looking at possibly killing the fsl_soc.c  usb code and making the 
> usb a real of-platform driver?

Sure, but it's a bit complicated because of OTG support (which
doesn't currently work, btw).

Just need to think about whether we want to leave UDC and HOST
drivers as pure platform drivers, and implement an of platform
driver as a proxy for Host/UDC/OTG...

Thanks,
diff mbox

Patch

diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index cc99c28..11e1fac 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -14,6 +14,7 @@ 
 #include <linux/stddef.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
+#include <linux/of.h>
 
 #include <asm/io.h>
 #include <asm/prom.h>
@@ -210,7 +211,7 @@  int mpc837x_usb_cfg(void)
 	int ret = 0;
 
 	np = of_find_compatible_node(NULL, NULL, "fsl-usb2-dr");
-	if (!np)
+	if (!np || !of_device_is_available(np))
 		return -ENODEV;
 	prop = of_get_property(np, "phy_type", NULL);
 
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 18e49ef..afe8dbc 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -22,6 +22,7 @@ 
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/phy.h>
 #include <linux/phy_fixed.h>
@@ -328,6 +329,9 @@  static int __init fsl_usb_of_init(void)
 		struct fsl_usb2_platform_data usb_data;
 		const unsigned char *prop = NULL;
 
+		if (!of_device_is_available(np))
+			continue;
+
 		memset(&r, 0, sizeof(r));
 		memset(&usb_data, 0, sizeof(usb_data));