UPSTREAM: usb: gadget: f_uac2: Add suspend callback
When USB cable gets disconnected, the undergoing playback/capture stalls, without any notification to u_audio about the change. Experiments with a dwc2 gadget revealed that Suspend interrupt is thrown at cable disconnection, which the gadget framework translates to calling suspend callback of a function, if it is defined. Add the suspend callback to f_uac2 function, calling corresponding method of u_audio in order to stop the respective PCM streams and to notify subscribed clients at cable disconnection. Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com> Link: https://lore.kernel.org/r/20220121155308.48794-10-pavel.hofman@ivitera.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Bug: 235196743 (cherry picked from commit 7ff4a3b5489959a0256840a361b54d979b822535) Change-Id: I43f5ccd6f84771bd63462ba9b2419a9e42f45746 Signed-off-by: Luiz Matheus <luizmmat@motorola.com>
This commit is contained in:

committed by
Treehugger Robot

parent
31e6d620c1
commit
ff5468c71e
@@ -1437,6 +1437,14 @@ afunc_disable(struct usb_function *fn)
|
||||
usb_ep_disable(uac2->int_ep);
|
||||
}
|
||||
|
||||
static void
|
||||
afunc_suspend(struct usb_function *fn)
|
||||
{
|
||||
struct f_uac2 *uac2 = func_to_uac2(fn);
|
||||
|
||||
u_audio_suspend(&uac2->g_audio);
|
||||
}
|
||||
|
||||
static int
|
||||
in_rq_cur(struct usb_function *fn, const struct usb_ctrlrequest *cr)
|
||||
{
|
||||
@@ -2108,6 +2116,7 @@ static struct usb_function *afunc_alloc(struct usb_function_instance *fi)
|
||||
uac2->g_audio.func.set_alt = afunc_set_alt;
|
||||
uac2->g_audio.func.get_alt = afunc_get_alt;
|
||||
uac2->g_audio.func.disable = afunc_disable;
|
||||
uac2->g_audio.func.suspend = afunc_suspend;
|
||||
uac2->g_audio.func.setup = afunc_setup;
|
||||
uac2->g_audio.func.free_func = afunc_free;
|
||||
|
||||
|
Reference in New Issue
Block a user