Unverified Commit be3afa12 authored by randerwang's avatar randerwang Committed by Mark Brown
Browse files

ASoC: Intel: sdw_max98373: add card_late_probe support



Disable Left and Right Spk pin after boot so that sof can get
suspended.

This follows the same logic added to another machine driver with
commit 94d2d089 ("ASoC: Intel: Boards: tgl_max98373: add dai_trigger function")

Signed-off-by: default avatarranderwang <rander.wang@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20200708203215.231776-5-pierre-louis.bossart@linux.intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent cb468cd5
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -237,6 +237,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
		.direction = {true, true},
		.dai_name = "max98373-aif1",
		.init = sof_sdw_mx8373_init,
		.codec_card_late_probe = sof_sdw_mx8373_late_probe,
	},
	{
		.id = 0x5682,
@@ -927,13 +928,29 @@ static int sof_card_dai_links_create(struct device *dev,
	return 0;
}

static int sof_sdw_card_late_probe(struct snd_soc_card *card)
{
	int i, ret;

	for (i = 0; i < ARRAY_SIZE(codec_info_list); i++) {
		if (!codec_info_list[i].late_probe)
			continue;

		ret = codec_info_list[i].codec_card_late_probe(card);
		if (ret < 0)
			return ret;
	}

	return sof_sdw_hdmi_card_late_probe(card);
}

/* SoC card */
static const char sdw_card_long_name[] = "Intel Soundwire SOF";

static struct snd_soc_card card_sof_sdw = {
	.name = "soundwire",
	.owner = THIS_MODULE,
	.late_probe = sof_sdw_hdmi_card_late_probe,
	.late_probe = sof_sdw_card_late_probe,
	.codec_conf = codec_conf,
	.num_configs = ARRAY_SIZE(codec_conf),
};
+6 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@

#include <linux/bits.h>
#include <linux/types.h>
#include <sound/soc.h>

#define MAX_NO_PROPS 2
#define MAX_HDMI_NUM 4
@@ -61,6 +62,9 @@ struct sof_sdw_codec_info {
		     struct snd_soc_dai_link *dai_links,
		     struct sof_sdw_codec_info *info,
		     bool playback);

	bool late_probe;
	int (*codec_card_late_probe)(struct snd_soc_card *card);
};

struct mc_private {
@@ -114,6 +118,8 @@ int sof_sdw_mx8373_init(const struct snd_soc_acpi_link_adr *link,
			struct sof_sdw_codec_info *info,
			bool playback);

int sof_sdw_mx8373_late_probe(struct snd_soc_card *card);

/* RT5682 support */
int sof_sdw_rt5682_init(const struct snd_soc_acpi_link_adr *link,
			struct snd_soc_dai_link *dai_links,
+12 −0
Original line number Diff line number Diff line
@@ -68,7 +68,19 @@ int sof_sdw_mx8373_init(const struct snd_soc_acpi_link_adr *link,
	if (info->amp_num == 2)
		dai_links->init = spk_init;

	info->late_probe = true;

	dai_links->ops = &max_98373_sdw_ops;

	return 0;
}

int sof_sdw_mx8373_late_probe(struct snd_soc_card *card)
{
	struct snd_soc_dapm_context *dapm = &card->dapm;

	/* Disable Left and Right Spk pin after boot */
	snd_soc_dapm_disable_pin(dapm, "Left Spk");
	snd_soc_dapm_disable_pin(dapm, "Right Spk");
	return snd_soc_dapm_sync(dapm);
}