Merge "USB: msm72k_udc: Flush both control out and in requests on _dequeue"
diff --git a/drivers/usb/gadget/msm72k_udc.c b/drivers/usb/gadget/msm72k_udc.c
index 923be08..e35a60e 100644
--- a/drivers/usb/gadget/msm72k_udc.c
+++ b/drivers/usb/gadget/msm72k_udc.c
@@ -1259,6 +1259,9 @@
struct msm_request *req, *next_req = NULL;
unsigned long flags;
+ if (!ept->req)
+ return;
+
/* inactive endpoints have nothing to do here */
if (ept->ep.maxpacket == 0)
return;
@@ -2206,6 +2209,9 @@
struct msm_endpoint *ep = to_msm_endpoint(_ep);
struct usb_info *ui = ep->ui;
+ if (!atomic_read(&ui->softconnect))
+ return -ENODEV;
+
if (ep == &ui->ep0in) {
struct msm_request *r = to_msm_request(req);
if (!req->length)
@@ -2233,6 +2239,13 @@
struct msm_request *temp_req;
unsigned long flags;
+ if (ep->num == 0) {
+ /* Flush both out and in control endpoints */
+ flush_endpoint(&ui->ep0out);
+ flush_endpoint(&ui->ep0in);
+ return 0;
+ }
+
if (!(ui && req && ep->req))
return -EINVAL;