]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ALSA: usb-audio: add quirk to fix Hamedal C20 disconnect issue
authorAi Chao <aichao@kylinos.cn>
Thu, 10 Nov 2022 06:34:52 +0000 (14:34 +0800)
committerTakashi Iwai <tiwai@suse.de>
Thu, 10 Nov 2022 06:50:30 +0000 (07:50 +0100)
For Hamedal C20, the current rate is different from the runtime rate,
snd_usb_endpoint stop and close endpoint to resetting rate.
if snd_usb_endpoint close the endpoint, sometimes usb will
disconnect the device.

Signed-off-by: Ai Chao <aichao@kylinos.cn>
Link: https://lore.kernel.org/r/20221110063452.295110-1-aichao@kylinos.cn
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/endpoint.c
sound/usb/quirks.c
sound/usb/usbaudio.h

index d0b8d61d1d22b2705562637e36ec6d4205663ab4..310cd6fb0038aeb0e08ad9a6fa998eb1522562e5 100644 (file)
@@ -931,7 +931,8 @@ void snd_usb_endpoint_close(struct snd_usb_audio *chip,
        usb_audio_dbg(chip, "Closing EP 0x%x (count %d)\n",
                      ep->ep_num, ep->opened);
 
-       if (!--ep->iface_ref->opened)
+       if (!--ep->iface_ref->opened &&
+               !(chip->quirk_flags & QUIRK_FLAG_IFACE_SKIP_CLOSE))
                endpoint_set_interface(chip, ep, false);
 
        if (!--ep->opened) {
index aedc3987a4cf2160a4d59652e190602df92b294d..0f4dd3503a6a9b6cb3643b3a0e2cbd36cf399813 100644 (file)
@@ -2148,6 +2148,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
                   QUIRK_FLAG_GENERIC_IMPLICIT_FB),
        DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
                   QUIRK_FLAG_GENERIC_IMPLICIT_FB),
+       DEVICE_FLG(0x0525, 0xa4ad, /* Hamedal C20 usb camero */
+                  QUIRK_FLAG_IFACE_SKIP_CLOSE),
 
        /* Vendor matches */
        VENDOR_FLG(0x045e, /* MS Lifecam */
index 2c6575029b1cd7fde6f1125a8085d06e3be35034..e97141ef730ad9f72542f8afebf49cc3a521f578 100644 (file)
@@ -170,6 +170,8 @@ extern bool snd_usb_skip_validation;
  *  Apply the generic implicit feedback sync mode (same as implicit_fb=1 option)
  * QUIRK_FLAG_SKIP_IMPLICIT_FB
  *  Don't apply implicit feedback sync mode
+ * QUIRK_FLAG_IFACE_SKIP_CLOSE
+ *  Don't closed interface during setting sample rate
  */
 
 #define QUIRK_FLAG_GET_SAMPLE_RATE     (1U << 0)
@@ -191,5 +193,6 @@ extern bool snd_usb_skip_validation;
 #define QUIRK_FLAG_SET_IFACE_FIRST     (1U << 16)
 #define QUIRK_FLAG_GENERIC_IMPLICIT_FB (1U << 17)
 #define QUIRK_FLAG_SKIP_IMPLICIT_FB    (1U << 18)
+#define QUIRK_FLAG_IFACE_SKIP_CLOSE    (1U << 19)
 
 #endif /* __USBAUDIO_H */