Unverified Commit 9ebb50df authored by Mark Brown's avatar Mark Brown
Browse files

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
Loading
Loading
Loading
Loading
+30 −10
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ struct sof_card_private {
	struct snd_soc_jack sof_headset;
	struct list_head hdmi_pcm_list;
	bool common_hdmi_codec_drv;
	bool idisp_codec;
};

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)
	int i = 0;

	/* HDMI is not supported by SOF on Baytrail/CherryTrail */
	if (is_legacy_cpu)
	if (is_legacy_cpu || !ctx->idisp_codec)
		return 0;

	if (list_empty(&ctx->hdmi_pcm_list))
@@ -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,
							  int ssp_codec,
							  int ssp_amp,
							  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 *cpus;
@@ -681,6 +685,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
		if (!links[id].cpus->dai_name)
			goto devm_err;

		if (idisp_codec) {
			idisp_components[i - 1].name = "ehdaudio0D2";
			idisp_components[i - 1].dai_name = devm_kasprintf(dev,
									  GFP_KERNEL,
@@ -688,6 +693,10 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
									  i);
			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].num_codecs = 1;
@@ -843,6 +852,9 @@ static int sof_audio_probe(struct platform_device *pdev)
		/* default number of HDMI DAI's */
		if (!hdmi_num)
			hdmi_num = 3;

		if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
			ctx->idisp_codec = true;
	}

	/* need to get main clock from pmc */
@@ -897,7 +909,7 @@ static int sof_audio_probe(struct platform_device *pdev)
		sof_audio_card_rt5682.num_links++;

	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)
		return -ENOMEM;

@@ -1038,6 +1050,14 @@ static const struct platform_device_id board_ids[] = {
					SOF_BT_OFFLOAD_SSP(2) |
					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);
+6 −0
Original line number Diff line number Diff line
@@ -447,6 +447,12 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
		.sof_fw_filename = "sof-adl.ri",
		.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);