1. 06 6月, 2011 3 次提交
    • S
      ALSA: hda: Virtualize SPDIF out controls · 74b654c9
      Stephen Warren 提交于
      The SPDIF output controls apply to converter widgets. A future change
      will create a PCM device per pin widget, and hence a set of SPDIF output
      controls per pin widget, for certain HDMI codecs. To support this, we
      need the ability to virtualize the SPDIF output controls. Specifically:
      
      * Controls can be "unassigned" from real hardware when a converter is
        not used for the PCM the control was created for.
      * Control puts only write to hardware when they are assigned.
      * Controls can be "assigned" to real hardware when a converter is picked
        to support output for a particular PCM.
      * When a converter is assigned, the hardware is updated to the cached
        configuration.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      74b654c9
    • S
      ALSA: hda: Allow multple SPDIF controls per codec · 7c935976
      Stephen Warren 提交于
      Currently, the data that backs the kcontrols created by
      snd_hda_create_spdif_out_ctls is stored directly in struct hda_codec. When
      multiple sets of these controls are stored, they will all manipulate the
      same data, causing confusion. Instead, store an array of this data, one
      copy per converter, to isolate the controls.
      
      This patch would cause a behavioural change in the case where
      snd_hda_create_spdif_out_ctls was called multiple times for a single codec.
      As best I can tell, this is never the case for any codec.
      
      This will be relevant at least for some HDMI audio codecs, such as the
      NVIDIA GeForce 520 and Intel Ibex Peak. A future change will modify the
      driver's handling of those codecs to create multiple PCMs per codec. Note
      that this issue isn't affected by whether one creates a PCM-per-converter
      or PCM-per-pin; there are multiple of both within a single codec in both
      of those codecs.
      
      Note that those codecs don't currently create multiple PCMs for the codec
      due to the default HW mux state of all pins being to point at the same
      converter, hence there is only a single converter routed to any pin, and
      hence only a single PCM.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      7c935976
    • S
      ALSA: hda: Gate ELD usage only by whether ELD is valid · c3d52105
      Stephen Warren 提交于
      It's perfectly valid for an ELD to contain no SADs. This simply means that
      only basic audio is supoprted.
      
      In this case, we still want to limit a PCM's capabilities based on the ELD.
      
      History:
      
      * Originally, ELD application was limited solely by sad_count>0, which
        was used to check that an ELD had been read.
      * Later, eld_valid was added to the conditions to satisfy.
      
      This change removes the original sad_count>0 check, which when squashed
      with the above two changes ends up replacing if (sad_count) with
      if (eld_valid).
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c3d52105
  2. 26 5月, 2011 1 次提交
  3. 25 5月, 2011 1 次提交
    • S
      ALSA: HDA: Unify HDMI hotplug handling. · 5d44f927
      Stephen Warren 提交于
      This change unifies the initial handling of a pin's state with the code to
      update a pin's state after a hotplug (unsolicited response) event. The
      initial probing, and all updates, are now routed through hdmi_present_sense.
      
      The stored PD and ELDV status is now always derived from GetPinSense verb
      execution, and not from the data in the unsolicited response. This means:
      
      a) The WAR for NVIDIA codec's UR.PD values ("old_pin_detect") can be
         removed, since this only affected the no-longer-used unsolicited
         response payload.
      
      b) In turn, this means that most NVIDIA codecs can simply use
         patch_generic_hdmi instead of having a custom variant just to set
         old_pin_detect.
      
      c) When PD && ELDV becomes true, no extra verbs are executed, because the
         GetPinSense that was previously executed by snd_hdmi_get_eld (really,
         hdmi_eld_valid) has simply moved into hdmi_present_sense.
      
      d) When PD && ELDV becomes false, there is a single extra GetPinSense verb
         executed for codecs where old_pin_detect wasn't set, i.e. some NVIDIA,
         and all ATI/AMD and Intel codecs. I doubt this will be a performance
         issue.
      
      The new unified code in hdmi_present_sense also ensures that eld->eld_valid
      is not set unless eld->monitor_present is also set. This protects against
      potential invalid combinations of PD and ELDV received from HW, and
      transitively from a graphics driver.
      
      Also, print the derived PD/ELDV bits from hdmi_present_sense so the kernel
      log always displays the actual state stored, which will differ from the
      values in the unsolicited response for NVIDIA HW where old_pin_detect was
      previously set.
      
      Finally, a couple of small tweaks originally by Takashi:
      
      * Clear the ELD content to zero before reading it, so that if it's not
        read (i.e. when !(PD && ELDV)) it's in a known state.
      
      * Don't show ELD fields in /proc ELD files when the ELD isn't valid.
      
      The only possibility I can see for regression here is a codec where the
      GetPinSense verb returns incorrect data. However, we're already exposed
      to that, since that data is used (a) from hdmi_add_pin to set up the
      initial pin state, and (b) within snd_hda_input_jack_report to query
      a pin's presence value. As such, I don't believe any HW has bugs here.
      Includes-changes-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NWu Fengguang <fengguang.wu@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5d44f927
  4. 20 5月, 2011 1 次提交
  5. 19 5月, 2011 1 次提交
  6. 02 5月, 2011 1 次提交
  7. 07 4月, 2011 1 次提交
    • A
      ALSA: hda - HDMI: Fix MCP7x audio infoframe checksums · 1f348522
      Aaron Plattner 提交于
      The MCP7x hardware computes the audio infoframe channel count
      automatically, but requires the audio driver to set the audio
      infoframe checksum manually via the Nv_VERB_SET_Info_Frame_Checksum
      control verb.
      
      When audio starts playing, nvhdmi_8ch_7x_pcm_prepare sets the checksum
      to (0x71 - chan - chanmask).  For example, for 2ch audio, chan == 1
      and chanmask == 0 so the checksum is set to 0x70.  When audio playback
      finishes and the device is closed, nvhdmi_8ch_7x_pcm_close resets the
      channel formats, causing the channel count to revert to 8ch.  Since
      the checksum is not reset, the hardware starts generating audio
      infoframes with invalid checksums.  This causes some displays to blank
      the video.
      
      Fix this by updating the checksum and channel mask when the device is
      closed and also when it is first initialized.  In addition, make sure
      that the channel mask is appropriate for an 8ch infoframe by setting
      it to 0x13 (FL FR LFE FC RL RR RLC RRC).
      Signed-off-by: NAaron Plattner <aplattner@nvidia.com>
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Cc: <stable@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      1f348522
  8. 03 3月, 2011 1 次提交
  9. 11 2月, 2011 1 次提交
  10. 09 2月, 2011 1 次提交
  11. 14 1月, 2011 3 次提交
  12. 12 1月, 2011 3 次提交
    • N
      ALSA: hda: Disable 4/6 channels on some NVIDIA GPUs. · 393004b2
      Nitin Daga 提交于
      Added hardware constraint in patch_hdmi.c to disable
      channels 4/6 which are not supported by some older
      NVIDIA GPUs.
      Signed-off-by: NNitin Daga <ndaga@nvidia.com>
      Acked-By: NStephen Warren <swarren@nvidia.com>
      Cc: <stable@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      393004b2
    • T
      ALSA: hda - Add static_hdmi_pcm option to HDMI codec parser · 0ebaa24c
      Takashi Iwai 提交于
      The dynamic PCM restriction based on ELD information may lead to the
      problem in some cases, e.g. when the receiver is turned off.  Then it
      may send a TV HDMI default such as channels = 2.  Since it's still
      plugged, the driver doesn't know whether it's the right configuration
      for future use.  Now, when an app opens the device at this moment,
      then turn on the receiver, the app still sends channels=2.
      
      The right solution is to implement some kind of notification and
      automatic re-open mechanism.  But, this is a goal far ahead.
      
      This patch provides a workaround for such a case by providing a new
      module option static_hdmi_pcm for snd-hda-codec-hdmi module.  When
      this is set to true, the driver doesn't change PCM parameters per
      ELD information.  For users who need the static configuration like
      the scenario above, set this to true.
      
      The parameter can be changed dynamically via sysfs, too.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Cc: <stable@kernel.org>
      0ebaa24c
    • T
      ALSA: hda - Don't refer ELD when unplugged · 6661702f
      Takashi Iwai 提交于
      When unplugged, we shouldn't refer to ELD information for PCM open
      any more.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Cc: <stable@kernel.org>
      6661702f
  13. 08 12月, 2010 2 次提交
  14. 05 12月, 2010 1 次提交
  15. 21 9月, 2010 2 次提交
    • J
      ALSA: hdmi - fix surround41 channel mapping · 9396d317
      Jerry Zhou 提交于
      Channel 2 and channel 3 were all wrongly mapped to HDMI slot 4.
      This shows up as a bug that one channel is "lost" when playing in
      surround41 mode.
      Signed-off-by: NJerry Zhou <jerry.zhou@intel.com>
      Signed-off-by: NWu Fengguang <fengguang.wu@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      9396d317
    • W
      ALSA: hdmi - support infoframe for DisplayPort · 53d7d69d
      Wu Fengguang 提交于
      DisplayPort works mostly in the same way as HDMI, except that it expects
      a slightly different audio infoframe format.
      
      Citations from "HDA036-A: Display Port Support and HDMI Miscellaneous
      Corrections":
      
      The HDMI specification defines a data island packet with a header of 4
      bytes (3 bytes content + 1 byte ECC) and packet body of 32 bytes (28
      bytes content and 4 bytes ECC). Display Port specification on the other
      hand defines a data island packet (secondary data packet) with header of
      4 bytes protected by 4 bytes of parity, and data of theoretically up to
      1024 bytes with each 16 bytes chunk of data protected by 4 bytes of
      parity. Note that the ECC or parity bytes are not present in the DIP
      content populated by software and are hardware generated.
      
      It tests DP connection based on the ELD conn_type field, which will be
      set by the graphics driver and can be overriden manually by users
      through the /proc/asound/card0/eld* interface.
      
      The DP infoframe is tested OK on Intel SandyBridge/CougarPoint platform.
      Signed-off-by: NWu Fengguang <fengguang.wu@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      53d7d69d
  16. 20 9月, 2010 1 次提交
    • T
      ALSA: hda - Merge all HDMI modules into the unified module · 84eb01be
      Takashi Iwai 提交于
      This patch merges all three patch_*hdmi variants to the single HDMI
      parser.  There is only one snd-hda-codec-hdmi module now.
      
      In this patch, the behavior of each parser isn't changed much.
      The old ATI parser still doesn't use the dynamic parser yet.
      In later patches, they'll be cleaned up.
      
      Also, this patch gets rid of the individual snd-hda-eld module and
      builds into snd-hda-codec-hdmi, since this is referred only from the
      HDMI parser.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      84eb01be
  17. 20 8月, 2010 1 次提交
  18. 13 8月, 2010 1 次提交
    • T
      ALSA: hda - Restrict PCM parameters per ELD information over HDMI · bbbe3390
      Takashi Iwai 提交于
      When a device is plugged over HDMI, it passes some information in ELD
      including the supported PCM parameters like formats, rates, channels.
      This patch adds the check to PCM open callback of HDMI streams so that
      only valid parameters the device supports are used.
      
      When no device is plugged, the parameters the codec supports are used;
      it's mostly all parameters the hardware can work.  This is for apps
      that are started before device plugging and do probing (e.g. a sound
      daemon), so that at least, probing would work even before the device
      plugging.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      bbbe3390
  19. 03 8月, 2010 2 次提交
  20. 28 7月, 2010 1 次提交
    • T
      ALSA: hda - Fix pin-detection of Nvidia HDMI · 38faddb1
      Takashi Iwai 提交于
      The behavior of Nvidia HDMI codec regarding the pin-detection unsol events
      is based on the old HD-audio spec, i.e. PD bit indicates only the update
      and doesn't show the current state.  Since the current code assumes the
      new behavior, the pin-detection doesn't work relialby with these h/w.
      
      This patch adds a flag for indicating the old spec, and fixes the issue
      by checking the pin-detection explicitly for such hardware.
      Tested-by: NWei Ni <wni@nvidia.com>
      Cc: <stable@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      38faddb1
  21. 17 5月, 2010 1 次提交
  22. 08 3月, 2010 2 次提交
  23. 11 12月, 2009 4 次提交
  24. 18 11月, 2009 4 次提交