mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08:00
ASoC: SOF: Introduce function sof_of_machine_select
From current design in sof_machine_check the SOF can only support ACPI type machine. In sof_machine_check if there is no ACPI machine exist, the function will return -ENODEV directly, that's we don't expected if we do not base on ACPI machine. So we add a new function named sof_of_machine_select that we can pass sof_machine_check and obtain info required by snd_sof_new_platform_drv. Signed-off-by: Chunxu Li <chunxu.li@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Link: https://lore.kernel.org/r/20220903032151.13664-1-chunxu.li@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
35c8ae25c4
commit
354f6008b7
@ -785,6 +785,28 @@ int sof_dai_get_bclk(struct snd_soc_pcm_runtime *rtd)
|
||||
}
|
||||
EXPORT_SYMBOL(sof_dai_get_bclk);
|
||||
|
||||
static struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct snd_sof_pdata *sof_pdata = sdev->pdata;
|
||||
const struct sof_dev_desc *desc = sof_pdata->desc;
|
||||
struct snd_sof_of_mach *mach = desc->of_machines;
|
||||
|
||||
if (!mach)
|
||||
return NULL;
|
||||
|
||||
for (; mach->compatible; mach++) {
|
||||
if (of_machine_is_compatible(mach->compatible)) {
|
||||
sof_pdata->tplg_filename = mach->sof_tplg_filename;
|
||||
if (mach->fw_filename)
|
||||
sof_pdata->fw_filename = mach->fw_filename;
|
||||
|
||||
return mach;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* SOF Driver enumeration.
|
||||
*/
|
||||
@ -795,6 +817,7 @@ int sof_machine_check(struct snd_sof_dev *sdev)
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE)) {
|
||||
const struct snd_sof_of_mach *of_mach;
|
||||
|
||||
/* find machine */
|
||||
mach = snd_sof_machine_select(sdev);
|
||||
@ -804,6 +827,12 @@ int sof_machine_check(struct snd_sof_dev *sdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
of_mach = sof_of_machine_select(sdev);
|
||||
if (of_mach) {
|
||||
sof_pdata->of_machine = of_mach;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SND_SOC_SOF_NOCODEC)) {
|
||||
dev_err(sdev->dev, "error: no matching ASoC machine driver found - aborting probe\n");
|
||||
return -ENODEV;
|
||||
|
Loading…
Reference in New Issue
Block a user