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 94d2d08974 ("ASoC: Intel: Boards: tgl_max98373: add dai_trigger function")

Signed-off-by: randerwang <rander.wang@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard 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: Mark Brown <broonie@kernel.org>
This commit is contained in:
randerwang 2020-07-08 15:32:15 -05:00 коммит произвёл Mark Brown
Родитель cb468cd5b9
Коммит be3afa120c
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 24D68B725D5487D0
3 изменённых файлов: 36 добавлений и 1 удалений

Просмотреть файл

@ -237,6 +237,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
.direction = {true, true}, .direction = {true, true},
.dai_name = "max98373-aif1", .dai_name = "max98373-aif1",
.init = sof_sdw_mx8373_init, .init = sof_sdw_mx8373_init,
.codec_card_late_probe = sof_sdw_mx8373_late_probe,
}, },
{ {
.id = 0x5682, .id = 0x5682,
@ -927,13 +928,29 @@ DMIC:
return 0; 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 */ /* SoC card */
static const char sdw_card_long_name[] = "Intel Soundwire SOF"; static const char sdw_card_long_name[] = "Intel Soundwire SOF";
static struct snd_soc_card card_sof_sdw = { static struct snd_soc_card card_sof_sdw = {
.name = "soundwire", .name = "soundwire",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.late_probe = sof_sdw_hdmi_card_late_probe, .late_probe = sof_sdw_card_late_probe,
.codec_conf = codec_conf, .codec_conf = codec_conf,
.num_configs = ARRAY_SIZE(codec_conf), .num_configs = ARRAY_SIZE(codec_conf),
}; };

Просмотреть файл

@ -11,6 +11,7 @@
#include <linux/bits.h> #include <linux/bits.h>
#include <linux/types.h> #include <linux/types.h>
#include <sound/soc.h>
#define MAX_NO_PROPS 2 #define MAX_NO_PROPS 2
#define MAX_HDMI_NUM 4 #define MAX_HDMI_NUM 4
@ -61,6 +62,9 @@ struct sof_sdw_codec_info {
struct snd_soc_dai_link *dai_links, struct snd_soc_dai_link *dai_links,
struct sof_sdw_codec_info *info, struct sof_sdw_codec_info *info,
bool playback); bool playback);
bool late_probe;
int (*codec_card_late_probe)(struct snd_soc_card *card);
}; };
struct mc_private { 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, struct sof_sdw_codec_info *info,
bool playback); bool playback);
int sof_sdw_mx8373_late_probe(struct snd_soc_card *card);
/* RT5682 support */ /* RT5682 support */
int sof_sdw_rt5682_init(const struct snd_soc_acpi_link_adr *link, int sof_sdw_rt5682_init(const struct snd_soc_acpi_link_adr *link,
struct snd_soc_dai_link *dai_links, struct snd_soc_dai_link *dai_links,

Просмотреть файл

@ -68,7 +68,19 @@ int sof_sdw_mx8373_init(const struct snd_soc_acpi_link_adr *link,
if (info->amp_num == 2) if (info->amp_num == 2)
dai_links->init = spk_init; dai_links->init = spk_init;
info->late_probe = true;
dai_links->ops = &max_98373_sdw_ops; dai_links->ops = &max_98373_sdw_ops;
return 0; 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);
}