ASoC: SOF: Intel: fix SoundWire/HDaudio mutual exclusion
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Tue, 6 Jun 2023 22:25:28 +0000 (17:25 -0500)
committerMark Brown <broonie@kernel.org>
Wed, 7 Jun 2023 11:37:19 +0000 (12:37 +0100)
The functionality described in Commit 61bef9e68dca ("ASoC: SOF: Intel: hda: enforce exclusion between HDaudio and SoundWire")
does not seem to be properly implemented with two issues that need to
be corrected.

a) The test used is incorrect when DisplayAudio codecs are not supported.

b) Conversely when only Display Audio codecs can be found, we do want
to start the SoundWire links, if any. That will help add the relevant
topologies and machine descriptors, and identify cases where the
SoundWire information in ACPI needs to be modified with a quirk.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20230606222529.57156-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda.c

index 066f27e3402f9a0fc706a7c8b5e3342cae09fb02..ec31a5762ddf54a44a5eb9c012f5bab234330e3c 100644 (file)
@@ -1368,12 +1368,22 @@ static void hda_generic_machine_select(struct snd_sof_dev *sdev,
                        hda_mach->mach_params.dmic_num = dmic_num;
                        pdata->tplg_filename = tplg_filename;
 
-                       if (codec_num == 2) {
+                       if (codec_num == 2 ||
+                           (codec_num == 1 && !HDA_IDISP_CODEC(bus->codec_mask))) {
                                /*
                                 * Prevent SoundWire links from starting when an external
                                 * HDaudio codec is used
                                 */
                                hda_mach->mach_params.link_mask = 0;
+                       } else {
+                               /*
+                                * Allow SoundWire links to start when no external HDaudio codec
+                                * was detected. This will not create a SoundWire card but
+                                * will help detect if any SoundWire codec reports as ATTACHED.
+                                */
+                               struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
+
+                               hda_mach->mach_params.link_mask = hdev->info.link_mask;
                        }
 
                        *mach = hda_mach;