lkml.org 
[lkml]   [2022]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 37/66] ALSA: usb-audio: Workaround for clock setup on TEAC devices
    Date
    From: Takashi Iwai <tiwai@suse.de>

    commit 5ce0b06ae5e69e23142e73c5c3c0260e9f2ccb4b upstream.

    Maris reported that TEAC UD-501 (0644:8043) doesn't work with the
    typical "clock source 41 is not valid, cannot use" errors on the
    recent kernels. The currently known workaround so far is to restore
    (partially) what we've done unconditionally at the clock setup;
    namely, re-setup the USB interface immediately after the clock is
    changed. This patch re-introduces the behavior conditionally for TEAC
    devices.

    Further notes:
    - The USB interface shall be set later in
    snd_usb_endpoint_configure(), but this seems to be too late.
    - Even calling usb_set_interface() right after
    sne_usb_init_sample_rate() doesn't help; so this must be related
    with the clock validation, too.
    - The device may still spew the "clock source 41 is not valid" error
    at the first clock setup. This seems happening at the very first
    try of clock setup, but it disappears at later attempts.
    The error is likely harmless because the driver retries the clock
    setup (such an error is more or less expected on some devices).

    Fixes: bf6313a0ff76 ("ALSA: usb-audio: Refactor endpoint management")
    Reported-and-tested-by: Maris Abele <maris7abele@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220521064627.29292-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    sound/usb/clock.c | 7 +++++++
    1 file changed, 7 insertions(+)

    --- a/sound/usb/clock.c
    +++ b/sound/usb/clock.c
    @@ -572,6 +572,13 @@ static int set_sample_rate_v2v3(struct s
    /* continue processing */
    }

    + /* FIXME - TEAC devices require the immediate interface setup */
    + if (rate != prev_rate && USB_ID_VENDOR(chip->usb_id) == 0x0644) {
    + usb_set_interface(chip->dev, fmt->iface, fmt->altsetting);
    + if (chip->quirk_flags & QUIRK_FLAG_IFACE_DELAY)
    + msleep(50);
    + }
    +
    validation:
    /* validate clock after rate change */
    if (!uac_clock_source_is_valid(chip, fmt, clock))

    \
     
     \ /
      Last update: 2022-06-03 20:04    [W:2.397 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site