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

David Henningsson david.henningsson at canonical.com
Tue Nov 23 16:40:49 CET 2010


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".

>> 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.
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?

-- 
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: hdmi-codec.txt
Url: http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20101123/4f30ff89/attachment.txt 


More information about the Alsa-devel mailing list