drivers: udc_dwc2: Fix isochronous endpoint disable
The NAKSts bit may be set on isochronous OUT endpoints when incomplete ISO OUT interrupt is raised. The code would then assume that endpoint is already disabled and would not perform the endpoint disable procedure. This in turn was essentially halting any transmission on the isochronous endpoint, abruptly terminating the data stream. Fix the issue by always following full endpoint disable procedure on isochronous endpoints. Signed-off-by: Tomasz Moń <tomasz.mon@nordicsemi.no>
This commit is contained in:
parent
d7d636d1f2
commit
8b212d80fd
1 changed files with 2 additions and 1 deletions
|
@ -1387,11 +1387,12 @@ static void udc_dwc2_ep_disable(const struct device *dev,
|
|||
uint8_t ep_idx = USB_EP_GET_IDX(cfg->addr);
|
||||
mem_addr_t dxepctl_reg;
|
||||
uint32_t dxepctl;
|
||||
const bool is_iso = dwc2_ep_is_iso(cfg);
|
||||
|
||||
dxepctl_reg = dwc2_get_dxepctl_reg(dev, cfg->addr);
|
||||
dxepctl = sys_read32(dxepctl_reg);
|
||||
|
||||
if (dxepctl & USB_DWC2_DEPCTL_NAKSTS) {
|
||||
if (!is_iso && (dxepctl & USB_DWC2_DEPCTL_NAKSTS)) {
|
||||
/* Endpoint already sends forced NAKs. STALL if necessary. */
|
||||
if (stall) {
|
||||
dxepctl |= USB_DWC2_DEPCTL_STALL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue