• Pawel Moll's avatar
    ALSA: usb: Fix Processing Unit Descriptor parsers · b531f81b
    Pawel Moll authored
    Commit 99fc8645 "ALSA: usb-mixer:
    parse descriptors with structs" introduced a set of useful parsers
    for descriptors. Unfortunately the parses for the Processing Unit
    Descriptor came with a very subtle bug...
    
    Functions uac_processing_unit_iProcessing() and
    uac_processing_unit_specific() were indexing the baSourceID array
    forgetting the fields before the iProcessing and process-specific
    descriptors.
    
    The problem was observed with Sound Blaster Extigy mixer,
    where nNrModes in Up/Down-mix Processing Unit Descriptor
    was accessed at offset 10 of the descriptor (value 0)
    instead of offset 15 (value 7). In result the resulting
    control had interesting limit values:
    
    Simple mixer control 'Channel Routing Mode Select',0
      Capabilities: volume volume-joined penum
      Playback channels: Mono
      Capture channels: Mono
      Limits: 0 - -1
      Mono: -1 [100%]
    
    Fixed by starting from the bmControls, which was calculated
    correctly, instead of baSourceID.
    
    Now the mentioned control is fine:
    
    Simple mixer control 'Channel Routing Mode Select',0
      Capabilities: volume volume-joined penum
      Playback channels: Mono
      Capture channels: Mono
      Limits: 0 - 6
      Mono: 0 [0%]
    Signed-off-by: default avatarPawel Moll <mail@pawelmoll.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    b531f81b
audio.h 16.6 KB