Merge "asoc: sdm845: check sound card status before sending AFE config"
This commit is contained in:
commit
3a6d24603e
1 changed files with 24 additions and 11 deletions
|
@ -3641,31 +3641,44 @@ static void msm_afe_clear_config(void)
|
|||
afe_clear_config(AFE_SLIMBUS_SLAVE_CONFIG);
|
||||
}
|
||||
|
||||
static int msm_adsp_power_up_config(struct snd_soc_codec *codec)
|
||||
static int msm_adsp_power_up_config(struct snd_soc_codec *codec,
|
||||
struct snd_card *card)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned long timeout;
|
||||
int adsp_ready = 0;
|
||||
bool snd_card_online = 0;
|
||||
|
||||
timeout = jiffies +
|
||||
msecs_to_jiffies(ADSP_STATE_READY_TIMEOUT_MS);
|
||||
|
||||
do {
|
||||
if (q6core_is_adsp_ready()) {
|
||||
pr_debug("%s: ADSP Audio is ready\n", __func__);
|
||||
adsp_ready = 1;
|
||||
break;
|
||||
if (!snd_card_online) {
|
||||
snd_card_online = snd_card_is_online_state(card);
|
||||
pr_debug("%s: Sound card is %s\n", __func__,
|
||||
snd_card_online ? "Online" : "Offline");
|
||||
}
|
||||
if (!adsp_ready) {
|
||||
adsp_ready = q6core_is_adsp_ready();
|
||||
pr_debug("%s: ADSP Audio is %s\n", __func__,
|
||||
adsp_ready ? "ready" : "not ready");
|
||||
}
|
||||
if (snd_card_online && adsp_ready)
|
||||
break;
|
||||
|
||||
/*
|
||||
* ADSP will be coming up after subsystem restart and
|
||||
* Sound card/ADSP will be coming up after subsystem restart and
|
||||
* it might not be fully up when the control reaches
|
||||
* here. So, wait for 50msec before checking ADSP state
|
||||
*/
|
||||
msleep(50);
|
||||
} while (time_after(timeout, jiffies));
|
||||
|
||||
if (!adsp_ready) {
|
||||
pr_err("%s: timed out waiting for ADSP Audio\n", __func__);
|
||||
if (!snd_card_online || !adsp_ready) {
|
||||
pr_err("%s: Timeout. Sound card is %s, ADSP Audio is %s\n",
|
||||
__func__,
|
||||
snd_card_online ? "Online" : "Offline",
|
||||
adsp_ready ? "ready" : "not ready");
|
||||
ret = -ETIMEDOUT;
|
||||
goto err;
|
||||
}
|
||||
|
@ -3723,7 +3736,7 @@ static int sdm845_notifier_service_cb(struct notifier_block *this,
|
|||
}
|
||||
codec = rtd->codec;
|
||||
|
||||
ret = msm_adsp_power_up_config(codec);
|
||||
ret = msm_adsp_power_up_config(codec, card->snd_card);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev,
|
||||
"%s: msm_adsp_power_up_config failed ret = %d!\n",
|
||||
|
@ -3821,7 +3834,7 @@ static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd)
|
|||
|
||||
msm_codec_fn.get_afe_config_fn = tavil_get_afe_config;
|
||||
|
||||
ret = msm_adsp_power_up_config(codec);
|
||||
ret = msm_adsp_power_up_config(codec, rtd->card->snd_card);
|
||||
if (ret) {
|
||||
pr_err("%s: Failed to set AFE config %d\n", __func__, ret);
|
||||
goto err;
|
||||
|
@ -7069,6 +7082,7 @@ static int msm_asoc_machine_remove(struct platform_device *pdev)
|
|||
struct msm_asoc_mach_data *pdata =
|
||||
snd_soc_card_get_drvdata(card);
|
||||
|
||||
audio_notifier_deregister("sdm845");
|
||||
if (pdata->us_euro_gpio > 0) {
|
||||
gpio_free(pdata->us_euro_gpio);
|
||||
pdata->us_euro_gpio = 0;
|
||||
|
@ -7077,7 +7091,6 @@ static int msm_asoc_machine_remove(struct platform_device *pdev)
|
|||
|
||||
msm_release_pinctrl(pdev);
|
||||
snd_soc_unregister_card(card);
|
||||
audio_notifier_deregister("sdm845");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue