[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210419075053.28467-1-pawell@gli-login.cadence.com>
Date: Mon, 19 Apr 2021 09:50:53 +0200
From: Pawel Laszczak <pawell@...ence.com>
To: <balbi@...nel.org>
CC: <gregkh@...uxfoundation.org>, <ruslan.bilovol@...il.com>,
<jbrunet@...libre.com>, <linux-usb@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <kurahul@...ence.com>,
Pawel Laszczak <pawell@...ence.com>
Subject: [PATCH 1/2] usb: gadget: f_uac2: Stop endpoint before enabling it.
From: Pawel Laszczak <pawell@...ence.com>
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@...ence.com>
---
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;
--
2.25.1
Powered by blists - more mailing lists