ASoC: SOF: Intel: hda: Remove link assignment limitation
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Fri, 28 Jan 2022 13:00:17 +0000 (15:00 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 28 Jan 2022 13:06:46 +0000 (13:06 +0000)
The limitation to assign a link DMA channel for a BE iff the
corresponding host DMA channel is assigned to a connected FE is only
applicable if the PROCEN_FMT_QUIRK is set. So, remove it for platforms
that do not enable the quirk.

Complements: a792bfc1c2bc ("ASoC: SOF: Intel: hda-stream: limit PROCEN workaround")
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20220128130017.28508-1-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-dai.c

index cd12589..28a5414 100644 (file)
@@ -59,6 +59,8 @@ static struct hdac_ext_stream *
 {
        struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        struct sof_intel_hda_stream *hda_stream;
+       const struct sof_intel_dsp_desc *chip;
+       struct snd_sof_dev *sdev;
        struct hdac_ext_stream *res = NULL;
        struct hdac_stream *stream = NULL;
 
@@ -77,9 +79,20 @@ static struct hdac_ext_stream *
                        continue;
 
                hda_stream = hstream_to_sof_hda_stream(hstream);
+               sdev = hda_stream->sdev;
+               chip = get_chip_info(sdev->pdata);
 
                /* check if link is available */
                if (!hstream->link_locked) {
+                       /*
+                        * choose the first available link for platforms that do not have the
+                        * PROCEN_FMT_QUIRK set.
+                        */
+                       if (!(chip->quirks & SOF_INTEL_PROCEN_FMT_QUIRK)) {
+                               res = hstream;
+                               break;
+                       }
+
                        if (stream->opened) {
                                /*
                                 * check if the stream tag matches the stream