Unverified Commit 224be454 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Intel: machine driver updates for 6.6

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

Lots of small cleanups coming from Bard Liao and Charles Keepax for
SoundWire platforms, and minor additions for RVPs and Chromebooks.
parents d09fd7eb a60ed3b7
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -671,14 +671,15 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
	select SND_SOC_RT711_SDCA_SDW
	select SND_SOC_RT712_SDCA_SDW
	select SND_SOC_RT712_SDCA_DMIC_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	select SND_SOC_RT1308_SDW
	select SND_SOC_RT1308
	select SND_SOC_RT1316_SDW
	select SND_SOC_RT1318_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	select SND_SOC_RT5682_SDW
	select SND_SOC_CS42L42_SDW
	select SND_SOC_CS35L56_SDW
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ snd-soc-sof-sdw-objs += sof_sdw.o \
			sof_sdw_rt711.o sof_sdw_rt_sdca_jack_common.o	\
			sof_sdw_rt712_sdca.o sof_sdw_rt715.o	\
			sof_sdw_rt715_sdca.o sof_sdw_dmic.o	\
			sof_sdw_cs42l42.o \
			sof_sdw_cs42l42.o sof_sdw_cs_amp.o	\
			sof_sdw_hdmi.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH) += snd-soc-sof_rt5682.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH) += snd-soc-sof_cs42l42.o
+55 −0
Original line number Diff line number Diff line
@@ -62,6 +62,11 @@
#define SOF_RT1019_SPEAKER_AMP_PRESENT	BIT(26)
#define SOF_RT5650_HEADPHONE_CODEC_PRESENT	BIT(27)

/* HDMI capture*/
#define SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT  27
#define SOF_SSP_HDMI_CAPTURE_PRESENT_MASK (GENMASK(30, 27))
#define SOF_HDMI_CAPTURE_SSP_MASK(quirk)   \
	(((quirk) << SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT) & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK)

/* Default: MCLK on, MCLK 19.2M, SSP0  */
static unsigned long sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
@@ -670,6 +675,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
	struct snd_soc_dai_link_component *cpus;
	struct snd_soc_dai_link *links;
	int i, id = 0;
	int hdmi_id_offset = 0;

	links = devm_kcalloc(dev, sof_audio_card_rt5682.num_links,
			    sizeof(struct snd_soc_dai_link), GFP_KERNEL);
@@ -891,6 +897,34 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
		links[id].num_cpus = 1;
	}

	/* HDMI-In SSP */
	if (sof_rt5682_quirk & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK) {
		unsigned long hdmi_in_ssp = (sof_rt5682_quirk &
				SOF_SSP_HDMI_CAPTURE_PRESENT_MASK) >>
				SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT;
		int port = 0;

		for_each_set_bit(port, &hdmi_in_ssp, 32) {
			links[id].cpus = &cpus[id];
			links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
								  "SSP%d Pin", port);
			if (!links[id].cpus->dai_name)
				return NULL;
			links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-HDMI", port);
			if (!links[id].name)
				return NULL;
			links[id].id = id + hdmi_id_offset;
			links[id].codecs = &asoc_dummy_dlc;
			links[id].num_codecs = 1;
			links[id].platforms = platform_component;
			links[id].num_platforms = ARRAY_SIZE(platform_component);
			links[id].dpcm_capture = 1;
			links[id].no_pcm = 1;
			links[id].num_cpus = 1;
			id++;
		}
	}

	return links;
devm_err:
	return NULL;
@@ -997,6 +1031,11 @@ static int sof_audio_probe(struct platform_device *pdev)
	if (sof_rt5682_quirk & SOF_SSP_BT_OFFLOAD_PRESENT)
		sof_audio_card_rt5682.num_links++;

	if (sof_rt5682_quirk & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK)
		sof_audio_card_rt5682.num_links +=
			hweight32((sof_rt5682_quirk & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK) >>
					SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT);

	dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp,
					      dmic_be_num, hdmi_num, ctx->idisp_codec);
	if (!dai_links)
@@ -1163,6 +1202,22 @@ static const struct platform_device_id board_ids[] = {
					SOF_BT_OFFLOAD_SSP(2) |
					SOF_SSP_BT_OFFLOAD_PRESENT),
	},
	{
		.name = "adl_rt5682_c1_h02",
		.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
					SOF_RT5682_SSP_CODEC(1) |
					SOF_RT5682_NUM_HDMIDEV(3) |
					/* SSP 0 and SSP 2 are used for HDMI IN */
					SOF_HDMI_CAPTURE_SSP_MASK(0x5)),
	},
	{
		.name = "rpl_mx98357_rt5682",
		.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
					SOF_RT5682_SSP_CODEC(0) |
					SOF_SPEAKER_AMP_PRESENT |
					SOF_RT5682_SSP_AMP(2) |
					SOF_RT5682_NUM_HDMIDEV(4)),
	},
	{
		.name = "rpl_mx98360_rt5682",
		.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
+194 −208

File changed.

Preview size limit exceeded, changes collapsed.

+7 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ struct sof_sdw_dai_info {
struct sof_sdw_codec_info {
	const int part_id;
	const int version_id;
	const char *codec_name;
	int amp_num;
	const u8 acpi_id[ACPI_ID_LEN];
	const bool ignore_pch_dmic;
@@ -205,4 +206,10 @@ int sof_sdw_cs42l42_init(struct snd_soc_card *card,
			 struct sof_sdw_codec_info *info,
			 bool playback);

/* CS AMP support */
int sof_sdw_cs_amp_init(struct snd_soc_card *card,
			const struct snd_soc_acpi_link_adr *link,
			struct snd_soc_dai_link *dai_links,
			struct sof_sdw_codec_info *info,
			bool playback);
#endif
Loading