[alsa-devel] [PATCH] ALSA: HDA: Remove unconnected PCM devices for Intel HDMI
Wu Fengguang
wfg at linux.intel.com
Tue Nov 23 16:15:36 CET 2010
> >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)?
> 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) {
> + 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..
Thanks,
Fengguang
More information about the Alsa-devel
mailing list