Skip to content

Commit 7e1508e

Browse files
committed
ASoC: Intel: sof-function-topology-lib: add I2S support for sof_sdw_get_tplg_files
The Intel SOF SDW machine drive also supports I2S interface. Add related supports for the sof_sdw_get_tplg_files() callback. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
1 parent e48da7a commit 7e1508e

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

sound/soc/intel/common/sof-function-topology-lib.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ enum tplg_device_id {
1919
TPLG_DEVICE_SDCA_MIC,
2020
TPLG_DEVICE_INTEL_PCH_DMIC,
2121
TPLG_DEVICE_HDMI,
22+
TPLG_DEVICE_SSP_JACK,
23+
TPLG_DEVICE_SSP_AMP,
24+
TPLG_DEVICE_SSP_BT,
25+
TPLG_DEVICE_SSP_HDMI_IN,
2226
TPLG_DEVICE_MAX
2327
};
2428

@@ -77,6 +81,9 @@ static char *get_tplg_filename(struct device *dev, const char *prefix,
7781
*/
7882
switch (tplg_dev) {
7983
case TPLG_DEVICE_INTEL_PCH_DMIC:
84+
case TPLG_DEVICE_SSP_JACK:
85+
case TPLG_DEVICE_SSP_AMP:
86+
case TPLG_DEVICE_SSP_BT:
8087
filename = devm_kasprintf(dev, GFP_KERNEL, "%s/sof-%s-%s-id%d.tplg",
8188
prefix, platform, tplg_dev_name, dai_link_id);
8289
break;
@@ -96,6 +103,7 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
96103
struct snd_soc_dai_link *dai_link;
97104
char platform[SOF_INTEL_PLATFORM_NAME_MAX];
98105
unsigned long tplg_mask = 0;
106+
u16 hdmi_in_mask = 0;
99107
int tplg_num = 0;
100108
int tplg_dev;
101109
int ret;
@@ -140,6 +148,45 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
140148
tplg_dev = TPLG_DEVICE_HDMI;
141149
tplg_dev_name = "hdmi-pcm5";
142150

151+
} else if (strstr(dai_link->name, "SSP")) {
152+
unsigned int ssp_port;
153+
154+
if (sscanf(dai_link->name, "SSP%d", &ssp_port) != 1) {
155+
dev_err(card->dev, "Invalid SSP port %d\n", ssp_port);
156+
return -EINVAL;
157+
}
158+
if (strstr(dai_link->name, "Codec")) {
159+
/*
160+
* Assume DAI link 0 is jack which is true in all existing
161+
* machine driver
162+
*/
163+
if (dai_link->id == 0) {
164+
tplg_dev = TPLG_DEVICE_SSP_JACK;
165+
tplg_dev_name = devm_kasprintf(card->dev, GFP_KERNEL,
166+
"ssp%d-jack", ssp_port);
167+
} else {
168+
tplg_dev = TPLG_DEVICE_SSP_AMP;
169+
tplg_dev_name = devm_kasprintf(card->dev, GFP_KERNEL,
170+
"ssp%d-amp", ssp_port);
171+
}
172+
} else if (strstr(dai_link->name, "BT")) {
173+
tplg_dev = TPLG_DEVICE_SSP_BT;
174+
tplg_dev_name = devm_kasprintf(card->dev, GFP_KERNEL,
175+
"ssp%d-bt", ssp_port);
176+
} else if (strstr(dai_link->name, "HDMI")) {
177+
hdmi_in_mask |= BIT(ssp_port);
178+
/* The number of HDMI in dai link is always 2 right now */
179+
if (hweight16(hdmi_in_mask) != 2)
180+
continue;
181+
182+
tplg_dev = TPLG_DEVICE_SSP_HDMI_IN;
183+
tplg_dev_name = devm_kasprintf(card->dev, GFP_KERNEL,
184+
"ssp%x-hdmiin", hdmi_in_mask);
185+
} else {
186+
dev_warn(card->dev,
187+
"unsupported SSP link %s\n", dai_link->name);
188+
continue;
189+
}
143190
} else {
144191
/* The dai link is not supported by separated tplg yet */
145192
dev_dbg(card->dev,

0 commit comments

Comments
 (0)