diff --git a/drivers/usb/gadget/function/f_qdss.c b/drivers/usb/gadget/function/f_qdss.c index 5fea4e4f45c8..d92ff5dee4a9 100644 --- a/drivers/usb/gadget/function/f_qdss.c +++ b/drivers/usb/gadget/function/f_qdss.c @@ -591,8 +591,8 @@ static void usb_qdss_connect_work(struct work_struct *work) qdss = container_of(work, struct f_qdss, connect_w); - /* If qdss is closed or cable is removed, discard connect_work */ - if (qdss->qdss_close || qdss->usb_connected == 0) { + /* If cable is removed, discard connect_work */ + if (qdss->usb_connected == 0) { cancel_work_sync(&qdss->disconnect_w); return; } @@ -927,6 +927,8 @@ void usb_qdss_close(struct usb_qdss_ch *ch) if (qdss->endless_req) { spin_unlock_irqrestore(&channel_lock, flags); + /* Flush connect work before proceeding with de-queue */ + flush_work(&qdss->connect_w); usb_ep_dequeue(qdss->port.data, qdss->endless_req); spin_lock_irqsave(&channel_lock, flags); }