ALSA: hda/hdmi: Add option to enable all pins forcibly
authorTakashi Iwai <tiwai@suse.de>
Mon, 12 Jul 2021 09:35:51 +0000 (11:35 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Jul 2021 11:13:38 +0000 (13:13 +0200)
On Intel platforms, we always enable all pins no matter what BIOS
sets, but for others, we still take the conservative approach, and the
HD-audio HDMI codec driver enables the streams only for the pins that
are enabled by BIOS, and skips the disabled pins.  This seems not good
for some machines that have (as expected) broken BIOS, resulting in
the lack of needed outputs.

There is an allow-list in the driver code to enable all pins, but its
addition needs a recompilation.  This patch adds a module option for
user's convenience to enable all pins forcibly on the fly.  User can
pass snd_hda_codec_hdmi.enable_all_pins=1 option for testing, and once
confirmed, we may add a static entry in force_connect_list[].

Link: https://lore.kernel.org/r/20210712093551.29007-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_hdmi.c

index 4b2cc8c..672fd28 100644 (file)
@@ -47,6 +47,10 @@ IS_ENABLED(CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM);
 module_param(enable_silent_stream, bool, 0644);
 MODULE_PARM_DESC(enable_silent_stream, "Enable Silent Stream for HDMI devices");
 
+static bool enable_all_pins;
+module_param(enable_all_pins, bool, 0444);
+MODULE_PARM_DESC(enable_all_pins, "Forcibly enable all pins");
+
 struct hdmi_spec_per_cvt {
        hda_nid_t cvt_nid;
        int assigned;
@@ -1957,6 +1961,9 @@ static int hdmi_parse_codec(struct hda_codec *codec)
                return -EINVAL;
        }
 
+       if (enable_all_pins)
+               spec->force_connect = true;
+
        q = snd_pci_quirk_lookup(codec->bus->pci, force_connect_list);
 
        if (q && q->value)