diff options
| -rw-r--r-- | drivers/usb/gadget/udc/dummy_hcd.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c index d515ec31afe4..b2ab9cc33fec 100644 --- a/drivers/usb/gadget/udc/dummy_hcd.c +++ b/drivers/usb/gadget/udc/dummy_hcd.c | |||
| @@ -237,6 +237,8 @@ struct dummy_hcd { | |||
| 237 | 237 | ||
| 238 | struct usb_device *udev; | 238 | struct usb_device *udev; |
| 239 | struct list_head urbp_list; | 239 | struct list_head urbp_list; |
| 240 | struct urbp *next_frame_urbp; | ||
| 241 | |||
| 240 | u32 stream_en_ep; | 242 | u32 stream_en_ep; |
| 241 | u8 num_stream[30 / 2]; | 243 | u8 num_stream[30 / 2]; |
| 242 | 244 | ||
| @@ -1250,6 +1252,8 @@ static int dummy_urb_enqueue( | |||
| 1250 | 1252 | ||
| 1251 | list_add_tail(&urbp->urbp_list, &dum_hcd->urbp_list); | 1253 | list_add_tail(&urbp->urbp_list, &dum_hcd->urbp_list); |
| 1252 | urb->hcpriv = urbp; | 1254 | urb->hcpriv = urbp; |
| 1255 | if (!dum_hcd->next_frame_urbp) | ||
| 1256 | dum_hcd->next_frame_urbp = urbp; | ||
| 1253 | if (usb_pipetype(urb->pipe) == PIPE_CONTROL) | 1257 | if (usb_pipetype(urb->pipe) == PIPE_CONTROL) |
| 1254 | urb->error_count = 1; /* mark as a new urb */ | 1258 | urb->error_count = 1; /* mark as a new urb */ |
| 1255 | 1259 | ||
| @@ -1766,6 +1770,7 @@ static void dummy_timer(unsigned long _dum_hcd) | |||
| 1766 | spin_unlock_irqrestore(&dum->lock, flags); | 1770 | spin_unlock_irqrestore(&dum->lock, flags); |
| 1767 | return; | 1771 | return; |
| 1768 | } | 1772 | } |
| 1773 | dum_hcd->next_frame_urbp = NULL; | ||
| 1769 | 1774 | ||
| 1770 | for (i = 0; i < DUMMY_ENDPOINTS; i++) { | 1775 | for (i = 0; i < DUMMY_ENDPOINTS; i++) { |
| 1771 | if (!ep_info[i].name) | 1776 | if (!ep_info[i].name) |
| @@ -1782,6 +1787,10 @@ restart: | |||
| 1782 | int type; | 1787 | int type; |
| 1783 | int status = -EINPROGRESS; | 1788 | int status = -EINPROGRESS; |
| 1784 | 1789 | ||
| 1790 | /* stop when we reach URBs queued after the timer interrupt */ | ||
| 1791 | if (urbp == dum_hcd->next_frame_urbp) | ||
| 1792 | break; | ||
| 1793 | |||
| 1785 | urb = urbp->urb; | 1794 | urb = urbp->urb; |
| 1786 | if (urb->unlinked) | 1795 | if (urb->unlinked) |
| 1787 | goto return_urb; | 1796 | goto return_urb; |
