From 200de9028d5de8a8a6f2e6b039369cd5c7e0cade Mon Sep 17 00:00:00 2001 From: William Wu Date: Wed, 13 Nov 2019 12:51:16 +0800 Subject: [PATCH] usb: gadget: f_uac1_legacy: disable ep in f_audio_disable() The f_audio_disable() doesn't disable usb ep, and this cause usb enumeration fail. So add usb ep disable operation. This patch also reinitializes the opts->bound flag to false in f_audio_free(), and then it can setup ALSA audio device again in f_audio_bind(). Change-Id: I7b10630f5085b1a03792bc4b9e7eabb02d2bd5a2 Signed-off-by: William Wu --- drivers/usb/gadget/function/f_uac1_legacy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/gadget/function/f_uac1_legacy.c b/drivers/usb/gadget/function/f_uac1_legacy.c index 24c086bcdeaa..93cba72cc0e2 100644 --- a/drivers/usb/gadget/function/f_uac1_legacy.c +++ b/drivers/usb/gadget/function/f_uac1_legacy.c @@ -668,6 +668,11 @@ static int f_audio_get_alt(struct usb_function *f, unsigned intf) static void f_audio_disable(struct usb_function *f) { + struct f_audio *audio = func_to_audio(f); + struct usb_ep *out_ep = audio->out_ep; + + usb_ep_disable(out_ep); + return; } @@ -968,6 +973,7 @@ static void f_audio_free(struct usb_function *f) gaudio_cleanup(&audio->card); opts = container_of(f->fi, struct f_uac1_legacy_opts, func_inst); + opts->bound = false; kfree(audio); mutex_lock(&opts->lock); --opts->refcnt;