From ec43e93b7e36e2baa6685da504b9db3ac7048ceb Mon Sep 17 00:00:00 2001 From: Jonathan Bell Date: Fri, 16 Apr 2021 11:40:23 +0100 Subject: [PATCH] sound/usb: call usb_autopm_get_interface() for devices that should not be suspended Webcams with microphones are composite devices, and autosuspend is set at the device level. If uvcvideo is probed after snd-usb-audio, the effect of the quirk applied by snd-usb-audio is undone by uvcvideo's global application of autosuspend. Incrementing the interface's PM refcount in such cases prevents runtime PM from happening, thus the device is left active. Signed-off-by: Jonathan Bell --- sound/usb/quirks.c | 5 +++++ 1 file changed, 5 insertions(+) --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -531,6 +531,11 @@ static int setup_disable_autosuspend(str struct usb_driver *driver, const struct snd_usb_audio_quirk *quirk) { + /* + * Grab the interface, because on a webcam uvcvideo may race + * with snd-usb-audio during probe and re-enable autosuspend. + */ + usb_autopm_get_interface(iface); usb_disable_autosuspend(interface_to_usbdev(iface)); return 1; /* Continue with creating streams and mixer */ }