Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion sound/soc/intel/common/sof-function-topology-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ enum tplg_device_id {
TPLG_DEVICE_SDCA_MIC,
TPLG_DEVICE_INTEL_PCH_DMIC,
TPLG_DEVICE_HDMI,
TPLG_DEVICE_LOOPBACK_VIRTUAL,
TPLG_DEVICE_MAX
};

Expand Down Expand Up @@ -54,6 +55,7 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
if (strstr(dai_link->name, "SimpleJack")) {
tplg_dev = TPLG_DEVICE_SDCA_JACK;
tplg_dev_name = "sdca-jack";

} else if (strstr(dai_link->name, "SmartAmp")) {
tplg_dev = TPLG_DEVICE_SDCA_AMP;
tplg_dev_name = devm_kasprintf(card->dev, GFP_KERNEL,
Expand Down Expand Up @@ -81,7 +83,29 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
} else if (strstr(dai_link->name, "iDisp")) {
tplg_dev = TPLG_DEVICE_HDMI;
tplg_dev_name = "hdmi-pcm5";

} else if (strstr(dai_link->name, "Loopback_Virtual")) {
/*
* Loopback_Virtual is always the last DAI link, that's why we can check
* tplg_mask to know whether the jack or amp DAI link exists, and select
* the echo reference topology accordingly.
*/
switch (tplg_mask & (BIT(TPLG_DEVICE_SDCA_JACK) | BIT(TPLG_DEVICE_SDCA_AMP))) {
case BIT(TPLG_DEVICE_SDCA_JACK):
tplg_dev_name = "sdca-jack-ref";
break;
case BIT(TPLG_DEVICE_SDCA_AMP):
tplg_dev_name = "sdca-amp-ref";
break;
case (BIT(TPLG_DEVICE_SDCA_JACK) | BIT(TPLG_DEVICE_SDCA_AMP)):
tplg_dev_name = "sdca-jack-amp-ref";
break;
default: /* No jack or amp */
dev_dbg(card->dev,
"tplg_mask %#lx, No echo referrence is required\n",
tplg_mask);
continue;
}
tplg_dev = TPLG_DEVICE_LOOPBACK_VIRTUAL;
} else {
/* The dai link is not supported by separated tplg yet */
dev_dbg(card->dev,
Expand Down Expand Up @@ -109,6 +133,11 @@ int sof_sdw_get_tplg_files(struct snd_soc_card *card, const struct snd_soc_acpi_
prefix, platform,
tplg_dev_name, dai_link->id);
break;
case TPLG_DEVICE_LOOPBACK_VIRTUAL:
(*tplg_files)[tplg_num] = devm_kasprintf(card->dev, GFP_KERNEL,
"%s/sof-%s.tplg",
prefix, tplg_dev_name);
break;
default:
(*tplg_files)[tplg_num] = devm_kasprintf(card->dev, GFP_KERNEL,
"%s/sof-%s-id%d.tplg",
Expand Down
Loading