hsotg->driver->driver.name);
 
        spin_lock_irqsave(&hsotg->lock, flags);
+       s3c_hsotg_core_disconnect(hsotg);
        s3c_hsotg_disconnect(hsotg);
-       s3c_hsotg_phy_disable(hsotg);
        hsotg->gadget.speed = USB_SPEED_UNKNOWN;
        spin_unlock_irqrestore(&hsotg->lock, flags);
 
+       s3c_hsotg_phy_disable(hsotg);
+
        if (hsotg->driver) {
                int ep;
                for (ep = 0; ep < hsotg->num_of_eps; ep++)
                                      hsotg->supplies);
        }
 
-       spin_lock_irqsave(&hsotg->lock, flags);
        s3c_hsotg_phy_enable(hsotg);
+
+       spin_lock_irqsave(&hsotg->lock, flags);
        s3c_hsotg_core_init_disconnected(hsotg);
        s3c_hsotg_core_connect(hsotg);
        spin_unlock_irqrestore(&hsotg->lock, flags);