Commit 9ebb50df authored by Mark Brown's avatar Mark Brown

ASoC: Intel: sof_rt5682: add two derivative options

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

Add support for platforms without amplifier (headset codec only) and
without Intel graphics.
parents 2e5a74c6 c8e98eaf
...@@ -81,6 +81,7 @@ struct sof_card_private { ...@@ -81,6 +81,7 @@ struct sof_card_private {
struct snd_soc_jack sof_headset; struct snd_soc_jack sof_headset;
struct list_head hdmi_pcm_list; struct list_head hdmi_pcm_list;
bool common_hdmi_codec_drv; bool common_hdmi_codec_drv;
bool idisp_codec;
}; };
static int sof_rt5682_quirk_cb(const struct dmi_system_id *id) static int sof_rt5682_quirk_cb(const struct dmi_system_id *id)
...@@ -422,7 +423,7 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -422,7 +423,7 @@ static int sof_card_late_probe(struct snd_soc_card *card)
int i = 0; int i = 0;
/* HDMI is not supported by SOF on Baytrail/CherryTrail */ /* HDMI is not supported by SOF on Baytrail/CherryTrail */
if (is_legacy_cpu) if (is_legacy_cpu || !ctx->idisp_codec)
return 0; return 0;
if (list_empty(&ctx->hdmi_pcm_list)) if (list_empty(&ctx->hdmi_pcm_list))
...@@ -563,11 +564,14 @@ static struct snd_soc_dai_link_component dummy_component[] = { ...@@ -563,11 +564,14 @@ static struct snd_soc_dai_link_component dummy_component[] = {
} }
}; };
#define IDISP_CODEC_MASK 0x4
static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
int ssp_codec, int ssp_codec,
int ssp_amp, int ssp_amp,
int dmic_be_num, int dmic_be_num,
int hdmi_num) int hdmi_num,
bool idisp_codec)
{ {
struct snd_soc_dai_link_component *idisp_components; struct snd_soc_dai_link_component *idisp_components;
struct snd_soc_dai_link_component *cpus; struct snd_soc_dai_link_component *cpus;
...@@ -681,13 +685,18 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -681,13 +685,18 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!links[id].cpus->dai_name) if (!links[id].cpus->dai_name)
goto devm_err; goto devm_err;
idisp_components[i - 1].name = "ehdaudio0D2"; if (idisp_codec) {
idisp_components[i - 1].dai_name = devm_kasprintf(dev, idisp_components[i - 1].name = "ehdaudio0D2";
GFP_KERNEL, idisp_components[i - 1].dai_name = devm_kasprintf(dev,
"intel-hdmi-hifi%d", GFP_KERNEL,
i); "intel-hdmi-hifi%d",
if (!idisp_components[i - 1].dai_name) i);
goto devm_err; if (!idisp_components[i - 1].dai_name)
goto devm_err;
} else {
idisp_components[i - 1].name = "snd-soc-dummy";
idisp_components[i - 1].dai_name = "snd-soc-dummy-dai";
}
links[id].codecs = &idisp_components[i - 1]; links[id].codecs = &idisp_components[i - 1];
links[id].num_codecs = 1; links[id].num_codecs = 1;
...@@ -843,6 +852,9 @@ static int sof_audio_probe(struct platform_device *pdev) ...@@ -843,6 +852,9 @@ static int sof_audio_probe(struct platform_device *pdev)
/* default number of HDMI DAI's */ /* default number of HDMI DAI's */
if (!hdmi_num) if (!hdmi_num)
hdmi_num = 3; hdmi_num = 3;
if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
ctx->idisp_codec = true;
} }
/* need to get main clock from pmc */ /* need to get main clock from pmc */
...@@ -897,7 +909,7 @@ static int sof_audio_probe(struct platform_device *pdev) ...@@ -897,7 +909,7 @@ static int sof_audio_probe(struct platform_device *pdev)
sof_audio_card_rt5682.num_links++; sof_audio_card_rt5682.num_links++;
dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp, dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp,
dmic_be_num, hdmi_num); dmic_be_num, hdmi_num, ctx->idisp_codec);
if (!dai_links) if (!dai_links)
return -ENOMEM; return -ENOMEM;
...@@ -1038,6 +1050,14 @@ static const struct platform_device_id board_ids[] = { ...@@ -1038,6 +1050,14 @@ static const struct platform_device_id board_ids[] = {
SOF_BT_OFFLOAD_SSP(2) | SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT), SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{
.name = "adl_rt5682",
.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
SOF_RT5682_SSP_CODEC(0) |
SOF_RT5682_NUM_HDMIDEV(4) |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
},
{ } { }
}; };
MODULE_DEVICE_TABLE(platform, board_ids); MODULE_DEVICE_TABLE(platform, board_ids);
......
...@@ -447,6 +447,12 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -447,6 +447,12 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.sof_fw_filename = "sof-adl.ri", .sof_fw_filename = "sof-adl.ri",
.sof_tplg_filename = "sof-adl-max98390-rt5682.tplg", .sof_tplg_filename = "sof-adl-max98390-rt5682.tplg",
}, },
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682",
.sof_fw_filename = "sof-adl.ri",
.sof_tplg_filename = "sof-adl-rt5682.tplg",
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment