Merge branch 'slab/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/penber...
[linux-2.6-block.git] / arch / arm / mach-omap2 / omap_phy_internal.c
index 4d76a3ca5bf3de373b08104bc1792e013671e835..e237602e10ea45ee3fe0f932242df79cd038bf11 100644 (file)
 #include "control.h"
 #include "usb.h"
 
+#define CONTROL_DEV_CONF               0x300
+#define PHY_PD                         0x1
+
+/**
+ * omap4430_phy_power_down: disable MUSB PHY during early init
+ *
+ * OMAP4 MUSB PHY module is enabled by default on reset, but this will
+ * prevent core retention if not disabled by SW. USB driver will
+ * later on enable this, once and if the driver needs it.
+ */
+static int __init omap4430_phy_power_down(void)
+{
+       void __iomem *ctrl_base;
+
+       if (!cpu_is_omap44xx())
+               return 0;
+
+       ctrl_base = ioremap(OMAP443X_SCM_BASE, SZ_1K);
+       if (!ctrl_base) {
+               pr_err("control module ioremap failed\n");
+               return -ENOMEM;
+       }
+
+       /* Power down the phy */
+       __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
+
+       iounmap(ctrl_base);
+
+       return 0;
+}
+early_initcall(omap4430_phy_power_down);
+
 void am35x_musb_reset(void)
 {
        u32     regval;