OMAP3: PM: Ensure MUSB block can idle when driver not loaded
authorPeter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Mon, 19 Jan 2009 17:09:22 +0000 (19:09 +0200)
committerKevin Hilman <khilman@deeprootsystems.com>
Thu, 28 May 2009 17:59:09 +0000 (10:59 -0700)
Otherwise, bootloaders may leave MUSB in a state which prevents
retention.

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/usb-musb.c
arch/arm/plat-omap/include/mach/usb.h

index 6fd1c1f..3935a35 100644 (file)
@@ -57,6 +57,4 @@ obj-$(CONFIG_MACH_NOKIA_RX51)         += board-rx51.o \
                                           mmc-twl4030.o
 
 # Platform specific device init code
-ifeq ($(CONFIG_USB_MUSB_SOC),y)
 obj-y                                  += usb-musb.o
-endif
index 215d463..d85296d 100644 (file)
 #include <mach/mux.h>
 #include <mach/usb.h>
 
+#define OTG_SYSCONFIG  (OMAP34XX_HSUSB_OTG_BASE + 0x404)
+
+static void __init usb_musb_pm_init(void)
+{
+       /* Ensure force-idle mode for OTG controller */
+       if (cpu_is_omap34xx())
+               omap_writel(0, OTG_SYSCONFIG);
+}
+
+#ifdef CONFIG_USB_MUSB_SOC
+
 static struct resource musb_resources[] = {
        [0] = { /* start and end set dynamically */
                .flags  = IORESOURCE_MEM,
@@ -183,4 +194,13 @@ void __init usb_musb_init(void)
                printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n");
                return;
        }
+
+       usb_musb_pm_init();
+}
+
+#else
+void __init usb_musb_init(void)
+{
+       usb_musb_pm_init();
 }
+#endif /* CONFIG_USB_MUSB_SOC */
index 69f0cee..f337e17 100644 (file)
 #define UDC_BASE                       OMAP2_UDC_BASE
 #define OMAP_OHCI_BASE                 OMAP2_OHCI_BASE
 
-#ifdef CONFIG_USB_MUSB_SOC
 extern void usb_musb_init(void);
-#else
-static inline void usb_musb_init(void)
-{
-}
-#endif
 
 #endif