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:
Родитель
cb468cd5b9
Коммит
be3afa120c
|
@ -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);
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче