usb: dwc3: gadget: skip Set/Clear Halt when invalid
At least macOS seems to be sending ClearFeature(ENDPOINT_HALT) to endpoints which aren't Halted. This makes DWC3's CLEARSTALL command time out which causes several issues for the driver. Instead, let's just return 0 and bail out early. Cc: <stable@vger.kernel.org> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
538967983b
commit
ffb80fc672
@ -1379,6 +1379,9 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
|
|||||||
unsigned transfer_in_flight;
|
unsigned transfer_in_flight;
|
||||||
unsigned started;
|
unsigned started;
|
||||||
|
|
||||||
|
if (dep->flags & DWC3_EP_STALL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (dep->number > 1)
|
if (dep->number > 1)
|
||||||
trb = dwc3_ep_prev_trb(dep, dep->trb_enqueue);
|
trb = dwc3_ep_prev_trb(dep, dep->trb_enqueue);
|
||||||
else
|
else
|
||||||
@ -1400,6 +1403,8 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
|
|||||||
else
|
else
|
||||||
dep->flags |= DWC3_EP_STALL;
|
dep->flags |= DWC3_EP_STALL;
|
||||||
} else {
|
} else {
|
||||||
|
if (!(dep->flags & DWC3_EP_STALL))
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = dwc3_send_clear_stall_ep_cmd(dep);
|
ret = dwc3_send_clear_stall_ep_cmd(dep);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user