[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