ALSA: usb-audio: Fix microphone sound on Jieli webcam.
authorMarco Giunta <giun7a@gmail.com>
Mon, 18 Oct 2021 16:25:52 +0000 (18:25 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 19 Oct 2021 06:07:01 +0000 (08:07 +0200)
When a Jieli Technology USB Webcam is connected, the video part works
well, but the mic sound is speeded up. On dmesg there are messages
about different rates from the runtime rates, warnings about volume
resolution and lastly, the log is filled, every 5 seconds, with
retire_capture_urb error messages.

The mic works only when ep packet size is set to wMaxPacketSize (normal
sound and no more retire_capture_urb error messages). Skipping reading
sample rate, fixes the messages about different rates and forcing a volume
resolution, fixes warnings about volume range. I have arbitrarily choosed
the value (16): I read in a comment that there should be no more than 255
levels, so 4096 (max volume) / 16 = 0-255.

Signed-off-by: Marco Giunta <giun7a@gmail.com>
Link: https://lore.kernel.org/r/20211018162552.12082-1-giun7a@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer.c
sound/usb/quirks.c

index a2ce535df14b7f8e3787b188982b2b70d2aba1bc..8e030b1c061ab353ab0b1683fd37bf7f542666f8 100644 (file)
@@ -1198,6 +1198,13 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
                        cval->res = 1;
                }
                break;
+       case USB_ID(0x1224, 0x2a25): /* Jieli Technology USB PHY 2.0 */
+               if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
+                       usb_audio_info(chip,
+                               "set resolution quirk: cval->res = 16\n");
+                       cval->res = 16;
+               }
+               break;
        }
 }
 
index b8da4a08c458bc46a788c80ffb35a2bd11ae2781..8929d9abe8aa8368f2649a9dd29e2177f9c95424 100644 (file)
@@ -1719,6 +1719,11 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
                 */
                fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX;
                break;
+       case USB_ID(0x1224, 0x2a25):  /* Jieli Technology USB PHY 2.0 */
+               /* mic works only when ep packet size is set to wMaxPacketSize */
+               fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX;
+               break;
+
        }
 }
 
@@ -1890,6 +1895,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
                   QUIRK_FLAG_GET_SAMPLE_RATE),
        DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */
                   QUIRK_FLAG_ALIGN_TRANSFER),
+       DEVICE_FLG(0x1224, 0x2a25, /* Jieli Technology USB PHY 2.0 */
+                  QUIRK_FLAG_GET_SAMPLE_RATE),
 
        /* Vendor matches */
        VENDOR_FLG(0x045e, /* MS Lifecam */