• Takashi Iwai's avatar
    ALSA: usb-audio: Fix UAC2/3 effect unit parsing · d75a170f
    Takashi Iwai authored
    We've got a regression report about M-Audio Fast Track C400 device,
    and the git bisection resulted in the commit e0ccdef9 ("ALSA:
    usb-audio: Clean up check_input_term()").  This commit was about the
    rewrite of the input terminal parser, and it's not too obvious from
    the change what really broke.  The answer is: it's the interpretation
    of UAC2/3 effect units.
    
    In the original code, UAC2 effect unit is as if through UAC1
    processing unit because both UAC1 PU and UAC2/3 EU share the same
    number (0x07).  The old code went through a complex switch-case
    fallthrough, finally bailing out in the middle:
    
      if (protocol == UAC_VERSION_2 &&
          hdr[2] == UAC2_EFFECT_UNIT) {
             /* UAC2/UAC1 unit IDs overlap here in an
              * uncompatible way. Ignore this unit for now.
              */
             return 0;
       }
    
    ... and this special handling was missing in the new code; the new
    code treats UAC2/3 effect unit as if it were equivalent with the
    processing unit.
    
    Actually, the old code was too confusing.  The effect unit has an
    incompatible unit description with the processing unit, so we
    shouldn't have dealt with EU in the same way.
    
    This patch addresses the regression by changing the effect unit
    handling to the own parser function.  The own parser function makes
    the clear distinct with PU, so it improves the readability, too.
    
    The EU parser just sets the type and the id like the old kernels.
    Once when the proper effect unit support is added, we can revisit this
    parser function, but for now, let's keep this simple setup as is.
    
    Fixes: e0ccdef9 ("ALSA: usb-audio: Clean up check_input_term()")
    Cc: <stable@vger.kernel.org>
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206147
    Link: https://lore.kernel.org/r/20200211160521.31990-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    d75a170f
mixer.c 94.7 KB