1
0
Fork 0

MLK-18609-1 usb: cdns3: gadget: add ep0 request to list

It is necessary to add ep0 request for its ep request list,
ep0 request may need to be dequeued when remove gadget driver,
see composite_dev_cleanup for detail.

Reviewed-by: Jun Li <jun.li@nxp.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
pull/10/head
Peter Chen 2018-06-14 11:04:39 +08:00 committed by Jason Liu
parent 9e6f76e73f
commit ffa2804f24
1 changed files with 13 additions and 12 deletions

View File

@ -1110,6 +1110,7 @@ static void cdns_check_ep0_interrupt_proceed(struct usb_ss_dev *usb_ss, int dir)
dev_dbg(&usb_ss->dev, "IOC(%02X) %d\n",
dir ? USB_DIR_IN : USB_DIR_OUT,
usb_ss->actual_ep0_request->actual);
list_del_init(&usb_ss->actual_ep0_request->list);
}
if (usb_ss->actual_ep0_request
@ -1404,6 +1405,7 @@ static int usb_ss_gadget_ep0_queue(struct usb_ep *ep,
usb_ss->actual_ep0_request = request;
cdns_ep0_run_transfer(usb_ss, request->dma, request->length, 1);
list_add_tail(&request->list, &usb_ss_ep->request_list);
spin_unlock_irqrestore(&usb_ss->lock, flags);
return ret;
}
@ -1848,19 +1850,17 @@ static int usb_ss_gadget_ep_dequeue(struct usb_ep *ep,
select_ep(usb_ss, ep->desc->bEndpointAddress);
ret = cdns_data_flush(usb_ss_ep);
if (ep->address) {
list_for_each_entry_safe(req, req_temp,
&usb_ss_ep->request_list, list) {
if (request == req) {
list_del_init(&request->list);
if (request->complete) {
spin_unlock(&usb_ss->lock);
usb_gadget_giveback_request
(&usb_ss_ep->endpoint, request);
spin_lock(&usb_ss->lock);
}
break;
list_for_each_entry_safe(req, req_temp,
&usb_ss_ep->request_list, list) {
if (request == req) {
list_del_init(&request->list);
if (request->complete) {
spin_unlock(&usb_ss->lock);
usb_gadget_giveback_request
(&usb_ss_ep->endpoint, request);
spin_lock(&usb_ss->lock);
}
break;
}
}
@ -2216,6 +2216,7 @@ static int usb_ss_init_ep0(struct usb_ss_dev *usb_ss)
ep0->endpoint.name = ep0->name;
ep0->endpoint.desc = &cdns3_gadget_ep0_desc;
usb_ss->gadget.ep0 = &ep0->endpoint;
INIT_LIST_HEAD(&ep0->request_list);
return 0;
}