|
@@ -1180,6 +1180,7 @@ static int s3c_hsotg_process_req_feature(struct s3c_hsotg *hsotg,
|
|
|
}
|
|
|
|
|
|
static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg);
|
|
|
+static void s3c_hsotg_disconnect(struct s3c_hsotg *hsotg);
|
|
|
|
|
|
/**
|
|
|
* s3c_hsotg_process_control - process a control request
|
|
@@ -1221,6 +1222,7 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
|
|
|
if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
|
|
|
switch (ctrl->bRequest) {
|
|
|
case USB_REQ_SET_ADDRESS:
|
|
|
+ s3c_hsotg_disconnect(hsotg);
|
|
|
dcfg = readl(hsotg->regs + DCFG);
|
|
|
dcfg &= ~DCFG_DevAddr_MASK;
|
|
|
dcfg |= ctrl->wValue << DCFG_DevAddr_SHIFT;
|
|
@@ -2537,7 +2539,6 @@ irq_retry:
|
|
|
writel(GINTSTS_USBSusp, hsotg->regs + GINTSTS);
|
|
|
|
|
|
call_gadget(hsotg, suspend);
|
|
|
- s3c_hsotg_disconnect(hsotg);
|
|
|
}
|
|
|
|
|
|
if (gintsts & GINTSTS_WkUpInt) {
|