summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorranderwang <rander.wang@linux.intel.com>2020-05-15 16:59:55 +0300
committerMark Brown <broonie@kernel.org>2020-05-18 13:24:56 +0100
commit7d1952bceb8a1a2372a1cb86ab109c6ec8772c5c (patch)
treec5c749cf99f9304bc4c26ee0604341ad572a9f1a /sound
parent82e8c00fa18a3ef0ad3087dcad1d82637a738e30 (diff)
downloadlinux-7d1952bceb8a1a2372a1cb86ab109c6ec8772c5c.tar.gz
linux-7d1952bceb8a1a2372a1cb86ab109c6ec8772c5c.tar.bz2
linux-7d1952bceb8a1a2372a1cb86ab109c6ec8772c5c.zip
ASoC: SOF: Intel: sdw: relax sdw machine select constraints
On some platforms such as Up Extreme all links are enabled but only one link can be used by external codec. Instead of exact match of two masks, first check whether link_mask of mach is subset of link_mask supported by hw and then go on searching link_adr. Signed-off-by: randerwang <rander.wang@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Link: https://lore.kernel.org/r/20200515135958.17511-6-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/sof/intel/hda.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index 578ac7b036b0..63ca920c8e6e 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -1107,7 +1107,15 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev)
if (link_mask && !pdata->machine) {
for (mach = pdata->desc->alt_machines;
mach && mach->link_mask; mach++) {
- if (mach->link_mask != link_mask)
+ /*
+ * On some platforms such as Up Extreme all links
+ * are enabled but only one link can be used by
+ * external codec. Instead of exact match of two masks,
+ * first check whether link_mask of mach is subset of
+ * link_mask supported by hw and then go on searching
+ * link_adr
+ */
+ if (~link_mask & mach->link_mask)
continue;
/* No need to match adr if there is no links defined */