diff options
author | Hui Wang <hui.wang@canonical.com> | 2019-12-18 16:26:50 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-01-09 12:18:59 +0300 |
commit | 9884a8d03973c70b193f6ef0e59816424c140209 (patch) | |
tree | 0e15f0d9ab59f08b28f693fa72be14125d57bcb2 /sound/usb/quirks-table.h | |
parent | 70986b20f631c497414a4a840b818d61ff70fc8e (diff) | |
download | linux-9884a8d03973c70b193f6ef0e59816424c140209.tar.xz |
ALSA: usb-audio: set the interface format after resume on Dell WD19
commit 92adc96f8eecd9522a907c197cc3d62e405539fe upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound/usb/quirks-table.h')
-rw-r--r-- | sound/usb/quirks-table.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 57c6209a4ccb..65f9c4ba62ee 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3400,7 +3400,8 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), .vendor_name = "Dell", .product_name = "WD19 Dock", .profile_name = "Dell-WD15-Dock", - .ifnum = QUIRK_NO_INTERFACE + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_SETUP_FMT_AFTER_RESUME } }, |