Skip to content

Commit 34e06c9

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 64417a6 commit 34e06c9

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

@@ -78,6 +82,10 @@ static char *get_tplg_filename(struct device *dev, const char *prefix,
7882
*/
7983
switch (tplg_dev) {
8084
case TPLG_DEVICE_INTEL_PCH_DMIC:
85+
case TPLG_DEVICE_SSP_JACK:
86+
case TPLG_DEVICE_SSP_AMP:
87+
case TPLG_DEVICE_SSP_BT:
88+
case TPLG_DEVICE_SSP_HDMI_IN:
8189
filename = devm_kasprintf(dev, GFP_KERNEL, "%s/sof-%s-%s-id%d.tplg",
8290
prefix, platform, tplg_dev_name, dai_link_id);
8391
break;
@@ -97,6 +105,7 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
97105
struct snd_soc_dai_link *dai_link;
98106
char platform[SOF_INTEL_PLATFORM_NAME_MAX];
99107
unsigned long tplg_mask = 0;
108+
u16 hdmi_in_mask = 0;
100109
int tplg_num = 0;
101110
int tplg_dev;
102111
int ret;
@@ -140,7 +149,45 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
140149
} else if (strstr(dai_link->name, "iDisp")) {
141150
tplg_dev = TPLG_DEVICE_HDMI;
142151
tplg_dev_name = "hdmi-pcm5";
152+
} else if (strstr(dai_link->name, "SSP")) {
153+
unsigned int ssp_port;
143154

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

0 commit comments

Comments
 (0)