1. 13 2月, 2013 1 次提交
    • T
      ALSA: hda - Fix broken workaround for HDMI/SPDIF conflicts · ea9b43ad
      Takashi Iwai 提交于
      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: NStephan Raue <stephan@openelec.tv>
      Reported-by: NAnssi Hannula <anssi.hannula@iki.fi>
      Cc: <stable@vger.kernel.org> [v3.8]
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      ea9b43ad
  2. 08 2月, 2013 2 次提交
    • M
      ALSA: hda - Support rereading widgets under the function group · a15d05db
      Mengdong Lin 提交于
      A codec may allow software to hide some unused pin/cvt widgets.
      
      Sometimes BIOS does not enable the hidden widgets properly although they are
      needed for the board. Thus the driver need to enable them as a board-specific
      fixup and the whole tree will change.
      
      This patch implements a common code for rereading codec widgets. So the fixup
      code can call it after enabling the hidden widgets.
      Signed-off-by: NMengdong Lin <mengdong.lin@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      a15d05db
    • T
      ALSA: hda - Remove limit of widget connections · 4eea3091
      Takashi Iwai 提交于
      Currently we set the max number of connections to be 32, but there
      seems codec that gives longer connection lists like AD1988, and we see
      errors in proc output and else.  (Though, in the case of AD1988, it's
      a list of all codecs connected to a single vendor widget, so this must
      be something fishy, but it's still valid from the h/w design POV.)
      
      This patch tries to remove this restriction.  For efficiency, we still
      use the fixed size array in the parser, but takes a dynamic array when
      the size is reported to be greater than that.
      
      Now the fixed array size is found only in patch_hdmi.c, but it should
      be fine, as the codec itself can't support so many pins.
      Reported-by: NRaymond Yau <superquad.vortex2@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      4eea3091
  3. 25 1月, 2013 3 次提交
  4. 23 1月, 2013 1 次提交
    • T
      ALSA: hda - Fix inconsistent pin states after resume · 31614bb8
      Takashi Iwai 提交于
      The commit [26a6cb6c: ALSA: hda - Implement a poll loop for jacks as a
      module parameter] introduced the polling jack detection code, but it
      also moved the call of snd_hda_jack_set_dirty_all() in the resume path
      after resume/init ops call.  This caused a regression when the jack
      state has been changed during power-down (e.g. in the power save
      mode).  Since the driver doesn't probe the new jack state but keeps
      using the cached value due to no dirty flag, the pin state remains
      also as if the jack is still plugged.
      
      The fix is simply moving snd_hda_jack_set_dirty_all() to the original
      position.
      Reported-by: NManolo Díaz <diaz.manolo@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      31614bb8
  5. 22 1月, 2013 1 次提交
  6. 15 1月, 2013 1 次提交
  7. 12 1月, 2013 15 次提交
  8. 03 1月, 2013 1 次提交
  9. 07 12月, 2012 1 次提交
  10. 01 12月, 2012 1 次提交
  11. 28 11月, 2012 1 次提交
    • T
      ALSA: hda - Call snd_array_init() early and only once · 361dab3e
      Takashi Iwai 提交于
      This is a preliminary patch for introducing a protection to access
      races of snd_array instances.  Call snd_array_init() appropriately
      at the initialization time and don't call it twice.
      
      Also the allocations of codec-spec structs are cleaned up by helper
      functions in patch_sigmatel.c and patch_analog.c.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      361dab3e
  12. 24 11月, 2012 1 次提交
  13. 23 11月, 2012 1 次提交
    • T
      ALSA: hda - Don't overwrite the pin default configs · 3fdf1469
      Takashi Iwai 提交于
      Since we keep the pin default config values anyway internally, we
      don't have to set the values in the codec.  This patch removes the
      code writing the pincfg values.
      
      As a gratis bonus, we can remove also the code restoring the original
      pincfg values at PM resume or module free.  This will give us more
      benefit, as it can reduce the unnecessary power-up of codecs.
      
      This won't change the driver functionality.  The only difference would
      be that the codec proc file will show the original pincfg values
      instead of the actually referred values.  The actually referred values
      can be determined from sysfs *_pin_configs files.
      (Also hda-emu was updated to follow this change.)
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      3fdf1469
  14. 19 11月, 2012 1 次提交
  15. 09 11月, 2012 1 次提交
  16. 04 11月, 2012 1 次提交
  17. 17 10月, 2012 1 次提交
    • T
      ALSA: hda - Add workaround for conflicting IEC958 controls · dcda5806
      Takashi Iwai 提交于
      When both an SPDIF and an HDMI device are created on the same card
      instance, multiple IEC958 controls are created with indices=0, 1, ...
      But the alsa-lib configuration can't know which index corresponds
      actually to which PCM device, and both the SPDIF and the HDMI
      configurations point to the first IEC958 control wrongly.
      
      This patch introduces a (hackish and ugly) workaround: the IEC958
      controls for the SPDIF device are re-labeled with device=1 when HDMI
      coexists.  The device=1 corresponds to the actual PCM device for
      SPDIF, so it's anyway a better representation.  In future, HDMI
      controls should be moved with the corresponding PCM device number,
      too.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      dcda5806
  18. 15 10月, 2012 1 次提交
  19. 10 10月, 2012 1 次提交
  20. 06 10月, 2012 1 次提交
    • D
      ALSA: hda - Fix hang caused by race during suspend. · d17344b3
      Dylan Reid 提交于
      There was a race condition when the system suspends while hda_power_work
      is running in the work queue.  If system suspend (snd_hda_suspend)
      happens after the work queue releases power_lock but before it calls
      hda_call_codec_suspend,  codec_suspend runs with power_on=0, causing the
      codec to power up for register reads, and hanging when it calls
      cancel_delayed_work_sync from the running work queue.
      
      The call chain from the work queue will look like this:
      hda_power_work <<- power_on = 1, unlock, then power_on cleard by suspend
        hda_call_codec_suspend
          hda_set_power_state
            snd_hda_codec_read
              codec_exec_verb
                snd_hda_power_up
      	    snd_hda_power_save
      	      __snd_hda_power_up
      	        cancel_delayed_work_sync <<-- cancelling executing wq
      
      Fix this by waiting for the work queue to finish before starting suspend
      if suspend is not happening on the work queue.
      Signed-off-by: NDylan Reid <dgreid@chromium.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      d17344b3
  21. 10 9月, 2012 1 次提交
    • T
      ALSA: hda - Fix Oops at codec reset/reconfig · 07dc59f0
      Takashi Iwai 提交于
      snd_hda_codec_reset() calls restore_pincfgs() where the codec is
      powered up again, which eventually tries to resume and initialize via
      the callbacks of the codec.  However, it's the place just after codec
      free callback, thus no codec callbacks should be called after that.
      On a codec like CS4206, it results in Oops due to the access in init
      callback.
      
      This patch fixes the issue by clearing the codec callbacks properly
      after freeing codec.
      Reported-by: NDaniel J Blueman <daniel@quora.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      07dc59f0
  22. 07 9月, 2012 1 次提交
  23. 31 8月, 2012 1 次提交