usb: dwc3: gadget: cache frame number in struct dwc3_ep
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 5 Sep 2017 11:36:13 +0000 (14:36 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 19 Oct 2017 07:38:05 +0000 (10:38 +0300)
This is in preparation to simplifying prototype of
__dwc3_gadget_kick_transfer().

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/core.h
drivers/usb/dwc3/gadget.c

index ea910acb4bb0076c2e654224a15a64224586a2d7..e33cc10121be0c8ca94c65d9f3ff2ab12fd53c87 100644 (file)
@@ -529,6 +529,7 @@ struct dwc3_event_buffer {
  * @number: endpoint number (1 - 15)
  * @type: set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK
  * @resource_index: Resource transfer index
+ * @frame_number: set to the frame number we want this transfer to start (ISOC)
  * @interval: the interval on which the ISOC transfer is started
  * @allocated_requests: number of requests allocated
  * @queued_requests: number of requests queued for transfer
@@ -581,6 +582,7 @@ struct dwc3_ep {
        u8                      resource_index;
        u32                     allocated_requests;
        u32                     queued_requests;
+       u32                     frame_number;
        u32                     interval;
 
        char                    name[20];
index 850fda01376894fad3d615112628f46ddafb946c..2c0b9d0e2b055835b2ea4d12693a48e1c0534da2 100644 (file)
@@ -1258,8 +1258,6 @@ static int __dwc3_gadget_get_frame(struct dwc3 *dwc)
 static void __dwc3_gadget_start_isoc(struct dwc3 *dwc,
                struct dwc3_ep *dep, u32 cur_uf)
 {
-       u32 uf;
-
        if (list_empty(&dep->pending_list)) {
                dev_info(dwc->dev, "%s: ran out of requests\n",
                                dep->name);
@@ -1271,9 +1269,8 @@ static void __dwc3_gadget_start_isoc(struct dwc3 *dwc,
         * Schedule the first trb for one interval in the future or at
         * least 4 microframes.
         */
-       uf = cur_uf + max_t(u32, 4, dep->interval);
-
-       __dwc3_gadget_kick_transfer(dep, uf);
+       dep->frame_number = cur_uf + max_t(u32, 4, dep->interval);
+       __dwc3_gadget_kick_transfer(dep, dep->frame_number);
 }
 
 static void dwc3_gadget_start_isoc(struct dwc3 *dwc,