ALSA: hda: Allow SST driver on SKL and KBL platforms with DMIC
authorCezary Rojewski <cezary.rojewski@intel.com>
Wed, 6 May 2020 20:39:51 +0000 (22:39 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 7 May 2020 07:08:12 +0000 (09:08 +0200)
Update intel-dspcfg with FLAG_SST_ONLY_IF_DMIC option and use it for
Skylake and Kabylake platforms when DMIC is present.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200506203951.6369-1-cezary.rojewski@intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/intel-dsp-config.c

index 1c1fdab2a55f6103a95f7cd42b20842327897ef2..20b8f6cb3ff8e615723a9679a1d35324f5e92b3b 100644 (file)
@@ -19,6 +19,7 @@ MODULE_PARM_DESC(dsp_driver, "Force the DSP driver for Intel DSP (0=auto, 1=lega
 
 #define FLAG_SST                       BIT(0)
 #define FLAG_SOF                       BIT(1)
+#define FLAG_SST_ONLY_IF_DMIC          BIT(15)
 #define FLAG_SOF_ONLY_IF_DMIC          BIT(16)
 #define FLAG_SOF_ONLY_IF_SOUNDWIRE     BIT(17)
 
@@ -107,6 +108,10 @@ static const struct config_entry config_table[] = {
                        {}
                }
        },
+       {
+               .flags = FLAG_SST | FLAG_SST_ONLY_IF_DMIC,
+               .device = 0x9d70,
+       },
 #endif
 /* Kabylake-LP */
 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_KBL)
@@ -123,6 +128,10 @@ static const struct config_entry config_table[] = {
                        {}
                }
        },
+       {
+               .flags = FLAG_SST | FLAG_SST_ONLY_IF_DMIC,
+               .device = 0x9d71,
+       },
 #endif
 
 /*
@@ -410,8 +419,17 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)
                        return SND_INTEL_DSP_DRIVER_SOF;
        }
 
-       if (cfg->flags & FLAG_SST)
-               return SND_INTEL_DSP_DRIVER_SST;
+
+       if (cfg->flags & FLAG_SST) {
+               if (cfg->flags & FLAG_SST_ONLY_IF_DMIC) {
+                       if (snd_intel_dsp_check_dmic(pci)) {
+                               dev_info(&pci->dev, "Digital mics found on Skylake+ platform, using SST driver\n");
+                               return SND_INTEL_DSP_DRIVER_SST;
+                       }
+               } else {
+                       return SND_INTEL_DSP_DRIVER_SST;
+               }
+       }
 
        return SND_INTEL_DSP_DRIVER_LEGACY;
 }