[alsa-devel] [PATCH] ALSA: HDA: Remove unconnected PCM devices for Intel HDMI

Wu Fengguang wfg at linux.intel.com
Tue Nov 23 16:54:32 CET 2010


On Tue, Nov 23, 2010 at 04:40:49PM +0100, David Henningsson wrote:
> On 2010-11-23 16:15, Wu Fengguang wrote:
> >>> From ca84aa8edbfb66e46266677249b141b5419d6e0a Mon Sep 17 00:00:00 2001
> >>From: David Henningsson<david.henningsson at canonical.com>
> >>Date: Tue, 23 Nov 2010 10:23:40 +0100
> >>Subject: [PATCH] ALSA: HDA: Remove unconnected PCM devices for Intel HDMI
> >>
> >>Some newer chips have more than one HDMI output, but usually not
> >
> >Please point out the model name here (where this patch actually makes
> >a difference)?
> 
> I'm attaching the codec-proc file for the relevant machine, which
> lists as "Intel Cougarpoint HDMI".

Yes it's different from old models:

  Pin Default 0x58560010: [N/A] Digital Out at Int HDMI
  Pin Default 0x58560020: [N/A] Digital Out at Int HDMI
  Pin Default 0x18560030: [Jack] Digital Out at Int HDMI

> >>all of them are exposed as physical jacks. Removing the unused
> >>PCM devices (as indicated by BIOS in the pin config default) will
> >>reduce user confusion as they currently have to choose between
> >>several HDMI devices, some of them not working anyway.
> >>
> >>Signed-off-by: David Henningsson<david.henningsson at canonical.com>
> >>---
> >>  sound/pci/hda/patch_hdmi.c |   41 ++++++++++++++++++++++++++++++++---------
> >>  1 files changed, 32 insertions(+), 9 deletions(-)
> >>
> >>diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> >>index d3e49aa..14a1087 100644
> >>--- a/sound/pci/hda/patch_hdmi.c
> >>+++ b/sound/pci/hda/patch_hdmi.c
> >>@@ -905,23 +905,28 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
> >>  	spec->pin[spec->num_pins] = pin_nid;
> >>  	spec->num_pins++;
> >>
> >>-	/*
> >>-	 * It is assumed that converter nodes come first in the node list and
> >>-	 * hence have been registered and usable now.
> >>-	 */
> >>  	return hdmi_read_pin_conn(codec, pin_nid);
> >>  }
> >>
> >>  static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t nid)
> >>  {
> >>+	int i, found_pin = 0;
> >>  	struct hdmi_spec *spec = codec->spec;
> >>
> >>-	if (spec->num_cvts>= MAX_HDMI_CVTS) {
> >>-		snd_printk(KERN_WARNING
> >>-			   "HDMI: no space for converter %d\n", nid);
> >>-		return -E2BIG;
> >
> >>+	for (i = 0; i<  spec->num_pins; i++)
> >>+		if (nid == spec->pin_cvt[i]) {
> >>+			found_pin = 1;
> >>+			break;
> >>+		}
> >>+
> >>+	if (!found_pin) {
> >
> >Can test this instead:
> >
> >         if (hda_node_index(spec->pin_cvt, nid)<  0) {
> 
> Yes, that would probably be simpler.
> 
> >>+		snd_printdd("HDMI: Skipping node %d (no connection)\n", nid);
> >>+		return -EINVAL;
> >>  	}
> >
> >The above return actually will hide the device for cvt 3:
> >
> >                +---- pin 4
> >               /
> >         cvt 2 ------ pin 5
> >               \
> >                +---- pin 6
> >
> >         cvt 3
> >
> >Which is the default connection for Intel ibexpeak/sandybridge codecs.
> >It might be a problem when the user uses dual displays (which may be
> >configured at runtime). I have no such a setup, so cannot assure
> >things will work or not work..
> 
> Hmm, is this really relevant? Looking at the current patch_hdmi.c, I
> can't see that it ever tries to change pin <-> cvt connections, but
> I might be missing something.

I just feel uncertain. Perhaps when there comes a need in future, we
can further do a patch to "restore" the hidden device at runtime?

> In fact, I have yet to see an HDMI codec where you can actually
> perform that change, perhaps you can post such a codec-proc file?

Here is the SandyBridge model. IbexPeak is almost the same.

Thanks,
Fengguang
---

Codec: Intel SandyBridge HDMI
Address: 3
Function Id: 0x1
Vendor Id: 0x80862805
Subsystem Id: 0x80860101
Revision Id: 0x100000
No Modem Function Group found
Default PCM:
    rates [0x0]:
    bits [0x0]:
    formats [0x0]:
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x02 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Control: name="IEC958 Playback Con Mask", index=0, device=0
  Control: name="IEC958 Playback Pro Mask", index=0, device=0
  Control: name="IEC958 Playback Default", index=0, device=0
  Control: name="IEC958 Playback Switch", index=0, device=0
  Device: name="INTEL HDMI 0", type="HDMI", device=3
  Converter: stream=0, channel=0
  Digital: Enabled
  Digital category: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Control: name="IEC958 Playback Con Mask", index=1, device=0
  Control: name="IEC958 Playback Pro Mask", index=1, device=0
  Control: name="IEC958 Playback Default", index=1, device=0
  Control: name="IEC958 Playback Switch", index=1, device=0
  Device: name="INTEL HDMI 1", type="HDMI", device=7
  Converter: stream=0, channel=0
  Digital: Enabled
  Digital category: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x04 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Control: name="IEC958 Playback Con Mask", index=2, device=0
  Control: name="IEC958 Playback Pro Mask", index=2, device=0
  Control: name="IEC958 Playback Default", index=2, device=0
  Control: name="IEC958 Playback Switch", index=2, device=0
  Converter: stream=0, channel=0
  Digital: Enabled
  Digital category: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x05 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x09000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=05, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 2
     0x02* 0x03
Node 0x06 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x09000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=06, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 2
     0x02* 0x03
Node 0x07 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x09000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=07, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 2
     0x02* 0x03
Node 0x08 [Vendor Defined Widget] wcaps 0xf00000: Mono


More information about the Alsa-devel mailing list