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

David Henningsson david.henningsson at canonical.com
Wed Nov 24 14:50:34 CET 2010


On 2010-11-23 16:54, Wu Fengguang wrote:
> 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

Seems like the BIOS writers actually did what they should in this case, 
as opposed to leaving them all as "Jack"s?

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

Ok. Well, we could just disable cvt's that has no possible connections 
to a Jack (as compared to no *active* connections), but on the other 
hand - the day we need to change pin-cvt connections at runtime, we'll 
probably have to revisit this patch, as well as a lot of other code in 
patch_hdmi.c.

It seems like an unusual use case to me to need two different HDMI audio 
streams to two different displays, but who knows...

>> 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!

-- 
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic


More information about the Alsa-devel mailing list