usb: dwc2: gadget: Add dwc2_gadget_incr_frame_num()
Increases and checks targeted frame number of current ep if overrun happened, sets flag and masks with DSTS_SOFFN_LIMIT Added following fields to struct dwc2_hsotg_ep -target_frame: Targeted frame num to setup next ISOC transfer -frame_overrun: Indicates SOF number overrun in DSTS Tested-by: John Keeping <john@metanate.com> Signed-off-by: Vardan Mikayelyan <mvardan@synopsys.com> Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
6b58cb07a8
commit
92d1635d78
@ -177,6 +177,8 @@ struct dwc2_hsotg_req;
|
||||
* @fifo_load: The amount of data loaded into the FIFO (periodic IN)
|
||||
* @last_load: The offset of data for the last start of request.
|
||||
* @size_loaded: The last loaded size for DxEPTSIZE for periodic IN
|
||||
* @target_frame: Targeted frame num to setup next ISOC transfer
|
||||
* @frame_overrun: Indicates SOF number overrun in DSTS
|
||||
*
|
||||
* This is the driver's state for each registered enpoint, allowing it
|
||||
* to keep track of transactions that need doing. Each endpoint has a
|
||||
@ -214,6 +216,9 @@ struct dwc2_hsotg_ep {
|
||||
unsigned int isochronous:1;
|
||||
unsigned int send_zlp:1;
|
||||
unsigned int has_correct_parity:1;
|
||||
unsigned int target_frame;
|
||||
#define TARGET_FRAME_INITIAL 0xFFFFFFFF
|
||||
bool frame_overrun;
|
||||
|
||||
char name[10];
|
||||
};
|
||||
|
@ -96,6 +96,25 @@ static inline bool using_dma(struct dwc2_hsotg *hsotg)
|
||||
return hsotg->g_using_dma;
|
||||
}
|
||||
|
||||
/**
|
||||
* dwc2_gadget_incr_frame_num - Increments the targeted frame number.
|
||||
* @hs_ep: The endpoint
|
||||
* @increment: The value to increment by
|
||||
*
|
||||
* This function will also check if the frame number overruns DSTS_SOFFN_LIMIT.
|
||||
* If an overrun occurs it will wrap the value and set the frame_overrun flag.
|
||||
*/
|
||||
static inline void dwc2_gadget_incr_frame_num(struct dwc2_hsotg_ep *hs_ep)
|
||||
{
|
||||
hs_ep->target_frame += hs_ep->interval;
|
||||
if (hs_ep->target_frame > DSTS_SOFFN_LIMIT) {
|
||||
hs_ep->frame_overrun = 1;
|
||||
hs_ep->target_frame &= DSTS_SOFFN_LIMIT;
|
||||
} else {
|
||||
hs_ep->frame_overrun = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* dwc2_hsotg_en_gsint - enable one or more of the general interrupt
|
||||
* @hsotg: The device state
|
||||
|
Loading…
Reference in New Issue
Block a user