• Takashi Iwai's avatar
    ALSA: hda - Fix broken workaround for HDMI/SPDIF conflicts · ea9b43ad
    Takashi Iwai authored
    The commit [dcda5806: ALSA: hda - Add workaround for conflicting
    IEC958 controls] introduced a workaround for cards that have both
    SPDIF and HDMI devices for giving device=1 to SPDIF control elements.
    It turned out, however, that this workaround doesn't work well -
    
    - The workaround checks only conflicts in a single codec, but SPDIF
      and HDMI are provided by multiple codecs in many cases, and
    
    - ALSA mixer abstraction doesn't care about the device number in ctl
      elements, thus you'll get errors from amixer such as
      % amixer scontrols -c 0
      ALSA lib simple_none.c:1551:(simple_add1) helem (MIXER,'IEC958
      Playback Switch',0,1,0) appears twice or more
      amixer: Mixer hw:0 load error: Invalid argument
    
    This patch fixes the previous broken workaround.  Instead of changing
    the device number of SPDIF ctl elements, shift the element indices of
    such controls up to 16.  Also, the conflict check is performed over
    all codecs found on the bus.
    
    HDMI devices will be put to dev=0,index=0 as before.  Only the
    conflicting SPDIF device is moved to a different place.  The new place
    of SPDIF device is supposed by the updated alsa-lib HDA-Intel.conf,
    respectively.
    Reported-by: default avatarStephan Raue <stephan@openelec.tv>
    Reported-by: default avatarAnssi Hannula <anssi.hannula@iki.fi>
    Cc: <stable@vger.kernel.org> [v3.8]
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    ea9b43ad
hda_codec.c 148 KB