Skip to content

Commit 0cd2c08

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 <[email protected]>
1 parent 03f7694 commit 0cd2c08

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

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

Lines changed: 46 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;
@@ -139,7 +147,45 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
139147
} else if (strstr(dai_link->name, "iDisp")) {
140148
tplg_dev = TPLG_DEVICE_HDMI;
141149
tplg_dev_name = "hdmi-pcm5";
150+
} else if (strstr(dai_link->name, "SSP")) {
151+
unsigned int ssp_port;
142152

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

0 commit comments

Comments
 (0)