Skip to content

Commit a4ffa8b

Browse files
bardliaogregkh
authored andcommitted
ASoC: Intel: sof_sdw: use generic rtd_init function for Realtek SDW DMICs
commit bee2fe4 upstream. The only thing that the rt_xxx_rtd_init() functions do is to set card->components. And we can set card->components with name_prefix as rt712_sdca_dmic_rtd_init() does. And sof_sdw_rtd_init() will always select the first dai with the given dai->name from codec_info_list[]. Unfortunately, we have different codecs with the same dai name. For example, dai name of rt715 and rt715-sdca are both "rt715-aif2". Using a generic rtd_init allow sof_sdw_rtd_init() run the rtd_init() callback from a similar codec dai. Fixes: 8266c73 ("ASoC: Intel: sof_sdw: add common sdw dai link init") Reviewed-by: Chao Song <chao.song@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://msgid.link/r/20240326160429.13560-25-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent cf26a92 commit a4ffa8b

4 files changed

Lines changed: 60 additions & 6 deletions

File tree

sound/soc/intel/boards/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ snd-soc-sof-sdw-objs += sof_sdw.o \
4242
sof_sdw_rt711.o sof_sdw_rt_sdca_jack_common.o \
4343
sof_sdw_rt712_sdca.o sof_sdw_rt715.o \
4444
sof_sdw_rt715_sdca.o sof_sdw_rt722_sdca.o \
45+
sof_sdw_rt_dmic.o \
4546
sof_sdw_cs42l42.o sof_sdw_cs42l43.o \
4647
sof_sdw_cs_amp.o \
4748
sof_sdw_dmic.o \

sound/soc/intel/boards/sof_sdw.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
730730
.dai_name = "rt712-sdca-dmic-aif1",
731731
.dai_type = SOF_SDW_DAI_TYPE_MIC,
732732
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
733-
.rtd_init = rt712_sdca_dmic_rtd_init,
733+
.rtd_init = rt_dmic_rtd_init,
734734
},
735735
},
736736
.dai_num = 1,
@@ -760,7 +760,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
760760
.dai_name = "rt712-sdca-dmic-aif1",
761761
.dai_type = SOF_SDW_DAI_TYPE_MIC,
762762
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
763-
.rtd_init = rt712_sdca_dmic_rtd_init,
763+
.rtd_init = rt_dmic_rtd_init,
764764
},
765765
},
766766
.dai_num = 1,
@@ -822,7 +822,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
822822
.dai_name = "rt715-aif2",
823823
.dai_type = SOF_SDW_DAI_TYPE_MIC,
824824
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
825-
.rtd_init = rt715_sdca_rtd_init,
825+
.rtd_init = rt_dmic_rtd_init,
826826
},
827827
},
828828
.dai_num = 1,
@@ -837,7 +837,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
837837
.dai_name = "rt715-aif2",
838838
.dai_type = SOF_SDW_DAI_TYPE_MIC,
839839
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
840-
.rtd_init = rt715_sdca_rtd_init,
840+
.rtd_init = rt_dmic_rtd_init,
841841
},
842842
},
843843
.dai_num = 1,
@@ -852,7 +852,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
852852
.dai_name = "rt715-aif2",
853853
.dai_type = SOF_SDW_DAI_TYPE_MIC,
854854
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
855-
.rtd_init = rt715_rtd_init,
855+
.rtd_init = rt_dmic_rtd_init,
856856
},
857857
},
858858
.dai_num = 1,
@@ -867,7 +867,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
867867
.dai_name = "rt715-aif2",
868868
.dai_type = SOF_SDW_DAI_TYPE_MIC,
869869
.dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID},
870-
.rtd_init = rt715_rtd_init,
870+
.rtd_init = rt_dmic_rtd_init,
871871
},
872872
},
873873
.dai_num = 1,

sound/soc/intel/boards/sof_sdw_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ int rt712_sdca_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd);
190190
int rt712_spk_rtd_init(struct snd_soc_pcm_runtime *rtd);
191191
int rt715_rtd_init(struct snd_soc_pcm_runtime *rtd);
192192
int rt715_sdca_rtd_init(struct snd_soc_pcm_runtime *rtd);
193+
int rt_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd);
193194
int rt_amp_spk_rtd_init(struct snd_soc_pcm_runtime *rtd);
194195
int rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd);
195196

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
// Copyright (c) 2024 Intel Corporation
3+
4+
/*
5+
* sof_sdw_rt_dmic - Helpers to handle Realtek SDW DMIC from generic machine driver
6+
*/
7+
8+
#include <linux/device.h>
9+
#include <linux/errno.h>
10+
#include <sound/soc.h>
11+
#include <sound/soc-acpi.h>
12+
#include "sof_board_helpers.h"
13+
#include "sof_sdw_common.h"
14+
15+
static const char * const dmics[] = {
16+
"rt715",
17+
"rt712-sdca-dmic",
18+
};
19+
20+
int rt_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd)
21+
{
22+
struct snd_soc_card *card = rtd->card;
23+
struct snd_soc_component *component;
24+
struct snd_soc_dai *codec_dai;
25+
char *mic_name;
26+
27+
codec_dai = get_codec_dai_by_name(rtd, dmics, ARRAY_SIZE(dmics));
28+
if (!codec_dai)
29+
return -EINVAL;
30+
31+
component = codec_dai->component;
32+
33+
/*
34+
* rt715-sdca (aka rt714) is a special case that uses different name in card->components
35+
* and component->name_prefix.
36+
*/
37+
if (!strcmp(component->name_prefix, "rt714"))
38+
mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "rt715-sdca");
39+
else
40+
mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s", component->name_prefix);
41+
42+
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
43+
"%s mic:%s", card->components,
44+
mic_name);
45+
if (!card->components)
46+
return -ENOMEM;
47+
48+
dev_dbg(card->dev, "card->components: %s\n", card->components);
49+
50+
return 0;
51+
}
52+
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_BOARD_HELPERS);

0 commit comments

Comments
 (0)