ALSA: usb-audio: set the interface format after resume on Dell WD19
authorHui Wang <hui.wang@canonical.com>
Wed, 18 Dec 2019 13:26:50 +0000 (21:26 +0800)
committerTakashi Iwai <tiwai@suse.de>
Wed, 18 Dec 2019 19:04:37 +0000 (20:04 +0100)
commit92adc96f8eecd9522a907c197cc3d62e405539fe
treef5521e07eee4b8dfe8a1c5d8a2aa8c19ee169ce0
parent7c497d799267134786afdf719d9230b7d6f77d84
ALSA: usb-audio: set the interface format after resume on Dell WD19

Recently we found the headset-mic on the Dell Dock WD19 doesn't work
anymore after s3 (s2i or deep), this problem could be workarounded by
closing (pcm_close) the app and then reopening (pcm_open) the app, so
this bug is not easy to be detected by users.

When problem happens, retire_capture_urb() could still be called
periodically, but the size of captured data is always 0, it could be
a firmware bug on the dock. Anyway I found after resuming, the
snd_usb_pcm_prepare() will be called, and if we forcibly run
set_format() to set the interface and its endpoint, the capture
size will be normal again. This problem and workaound also apply to
playback.

To fix it in the kernel, add a quirk to let set_format() run
forcibly once after resume.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20191218132650.6303-1-hui.wang@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.h
sound/usb/pcm.c
sound/usb/quirks-table.h
sound/usb/quirks.c
sound/usb/usbaudio.h