int musb_platform_suspend(struct musb *musb)
 {
+       if (!musb->clock)
+               return 0;
+
        /* in any role */
        OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
        OTG_SYSCONFIG_REG &= FORCESTDBY;        /* enable force standby */
        if (musb->xceiv.set_suspend)
                musb->xceiv.set_suspend(&musb->xceiv, 1);
 
+       if (musb->set_clock)
+               musb->set_clock(musb->clock, 0);
+       else
+               clk_disable(musb->clock);
+
        return 0;
 }
 
 int musb_platform_resume(struct musb *musb)
 {
+       if (!musb->clock)
+               return 0;
+
        if (musb->xceiv.set_suspend)
                musb->xceiv.set_suspend(&musb->xceiv, 0);
 
+       if (musb->set_clock)
+               musb->set_clock(musb->clock, 1);
+       else
+               clk_enable(musb->clock);
+
        OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
        OTG_SYSCONFIG_REG |= SMARTSTDBY;        /* enable smart standby */
        OTG_SYSCONFIG_REG &= ~AUTOIDLE;         /* disable auto idle */