]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
ASoc: Intel: board: add BE DAI link for WoV
authorMac Chiang <mac.chiang@intel.com>
Mon, 5 Apr 2021 12:48:35 +0000 (18:18 +0530)
committerMark Brown <broonie@kernel.org>
Tue, 6 Apr 2021 16:13:26 +0000 (17:13 +0100)
create dai link in kbl_da7219_max98357a driver for wake on voice
functionality.

changes picked from broonie's tree
commit 0c7941a63a0f
("ASoC: Intel: Skylake: Use refcap device for mono recording")
commit 2154be362c90
("ASoc: Intel: boards: Add WOV as sink for nau88l25_ssm4567 machine")

Signed-off-by: Mac Chiang <mac.chiang@intel.com>
Signed-off-by: Vamshi Krishna Gopal <vamshi.krishna.gopal@intel.com>
Tested-by: Kaiyen Chang <kaiyen.chang@intel.corp-partner.google.com>
Tested-by: luke yang <luke_yang@compal.corp-partner.google.com>
Tested-by: Grace Kao <grace.kao@intel.com>
Tested-by: Kaiyen Chang <kaiyen.chang@intel.com>
Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210405124835.71247-3-vamshi.krishna.gopal@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/kbl_da7219_max98357a.c

index 0e689ec7e11be1e95ad28c5c6bc0c85c835ddf40..c0d8a73c6d21808da98aa71e79115b8ee597b122 100644 (file)
@@ -44,6 +44,7 @@ struct kbl_codec_private {
 enum {
        KBL_DPCM_AUDIO_PB = 0,
        KBL_DPCM_AUDIO_CP,
+       KBL_DPCM_AUDIO_REF_CP,
        KBL_DPCM_AUDIO_DMIC_CP,
        KBL_DPCM_AUDIO_HDMI1_PB,
        KBL_DPCM_AUDIO_HDMI2_PB,
@@ -338,12 +339,49 @@ static struct snd_soc_ops kabylake_dmic_ops = {
        .startup = kabylake_dmic_startup,
 };
 
+static unsigned int rates_16000[] = {
+        16000,
+};
+
+static const struct snd_pcm_hw_constraint_list constraints_16000 = {
+        .count = ARRAY_SIZE(rates_16000),
+        .list  = rates_16000,
+};
+
+static const unsigned int ch_mono[] = {
+       1,
+};
+
+static const struct snd_pcm_hw_constraint_list constraints_refcap = {
+       .count = ARRAY_SIZE(ch_mono),
+       .list  = ch_mono,
+};
+
+static int kabylake_refcap_startup(struct snd_pcm_substream *substream)
+{
+       substream->runtime->hw.channels_max = 1;
+       snd_pcm_hw_constraint_list(substream->runtime, 0,
+                                       SNDRV_PCM_HW_PARAM_CHANNELS,
+                                       &constraints_refcap);
+
+       return snd_pcm_hw_constraint_list(substream->runtime, 0,
+                                       SNDRV_PCM_HW_PARAM_RATE,
+                                       &constraints_16000);
+}
+
+static struct snd_soc_ops skylake_refcap_ops = {
+       .startup = kabylake_refcap_startup,
+};
+
 SND_SOC_DAILINK_DEF(dummy,
        DAILINK_COMP_ARRAY(COMP_DUMMY()));
 
 SND_SOC_DAILINK_DEF(system,
        DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
 
+SND_SOC_DAILINK_DEF(reference,
+       DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
+
 SND_SOC_DAILINK_DEF(dmic,
        DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
 
@@ -418,6 +456,16 @@ static struct snd_soc_dai_link kabylake_dais[] = {
                .ops = &kabylake_da7219_fe_ops,
                SND_SOC_DAILINK_REG(system, dummy, platform),
        },
+       [KBL_DPCM_AUDIO_REF_CP] = {
+               .name = "Kbl Audio Reference cap",
+               .stream_name = "Wake on Voice",
+               .init = NULL,
+               .dpcm_capture = 1,
+               .nonatomic = 1,
+               .dynamic = 1,
+               .ops = &skylake_refcap_ops,
+               SND_SOC_DAILINK_REG(reference, dummy, platform),
+       },
        [KBL_DPCM_AUDIO_DMIC_CP] = {
                .name = "Kbl Audio DMIC cap",
                .stream_name = "dmiccap",