On 21-04-19 09:50:53, Pawel Laszczak wrote: > From: Pawel Laszczak <pawell@xxxxxxxxxxx> > > Patch adds disabling endpoint before enabling it during changing > alternate setting. Lack of this functionality causes that in some > cases uac2 queue the same request multiple time. > Such situation can occur when host send set interface with > alternate setting 1 twice. > > Signed-off-by: Pawel Laszczak <pawell@xxxxxxxxxxx> > --- > drivers/usb/gadget/function/f_uac2.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c > index 9cc5c512a5cd..7d20a9d8a1b4 100644 > --- a/drivers/usb/gadget/function/f_uac2.c > +++ b/drivers/usb/gadget/function/f_uac2.c > @@ -890,17 +890,17 @@ afunc_set_alt(struct usb_function *fn, unsigned intf, unsigned alt) > if (intf == uac2->as_out_intf) { > uac2->as_out_alt = alt; > > + u_audio_stop_capture(&uac2->g_audio); > + > if (alt) > ret = u_audio_start_capture(&uac2->g_audio); > - else > - u_audio_stop_capture(&uac2->g_audio); > } else if (intf == uac2->as_in_intf) { > uac2->as_in_alt = alt; > > + u_audio_stop_playback(&uac2->g_audio); > + > if (alt) > ret = u_audio_start_playback(&uac2->g_audio); > - else > - u_audio_stop_playback(&uac2->g_audio); > } else { > dev_err(dev, "%s:%d Error!\n", __func__, __LINE__); > return -EINVAL; To avoid this, you may use prm->ep_enabled to judge if the endpoint has already enabled. -- Thanks, Peter Chen