]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/usb/musb/omap2430.c
I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver
[linux-2.6-omap-h63xx.git] / drivers / usb / musb / omap2430.c
index eacd6c4c0434a08b037e527e1cdf63e60a7344bc..caae81b0bed612f89575fc7a07432ec960e51edb 100644 (file)
@@ -192,19 +192,31 @@ static int omap_set_power(struct otg_transceiver *x, unsigned mA)
        return 0;
 }
 
-static int omap_set_suspend(struct otg_transceiver *x, int suspend)
+int musb_platform_resume(struct musb *musb);
+
+void musb_platform_set_mode(struct musb *musb, u8 musb_mode)
 {
-       if (suspend)
-               twl4030_phy_suspend(1);
-       else
-               twl4030_phy_resume();
-       return 0;
-}
+       u8      devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
 
-int musb_platform_resume(struct musb *musb);
+       devctl |= MUSB_DEVCTL_SESSION;
+       musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+
+       switch (musb_mode) {
+       case MUSB_HOST:
+               otg_set_host(&musb->xceiv, musb->xceiv.host);
+               break;
+       case MUSB_PERIPHERAL:
+               otg_set_peripheral(&musb->xceiv, musb->xceiv.gadget);
+               break;
+       case MUSB_OTG:
+               break;
+       }
+}
 
 int __init musb_platform_init(struct musb *musb)
 {
+       struct otg_transceiver *xceiv = otg_get_transceiver();
+
 #if defined(CONFIG_ARCH_OMAP2430)
        omap_cfg_reg(AE5_2430_USB0HS_STP);
        /* get the clock */
@@ -215,7 +227,7 @@ int __init musb_platform_init(struct musb *musb)
        if(IS_ERR(musb->clock))
                return PTR_ERR(musb->clock);
 
-       musb->xceiv.set_suspend = omap_set_suspend;
+       musb->xceiv = *xceiv;
        musb_platform_resume(musb);
 
        OTG_INTERFSEL_REG |= ULPI_12PIN;