diff --git a/asoc/gvm_auto_spf_dummy.c b/asoc/gvm_auto_spf_dummy.c old mode 100755 new mode 100644 index d017ee36573b..7905edfa1462 --- a/asoc/gvm_auto_spf_dummy.c +++ b/asoc/gvm_auto_spf_dummy.c @@ -29,6 +29,8 @@ #include #include #include "msm_dailink.h" +#include +#include #define DRV_NAME "spf-asoc-snd" @@ -823,6 +825,31 @@ void msm_common_set_pdata(struct snd_soc_card *card, pdata->common_pdata = common_pdata; } +static int auto_spf_dummy_ssr_cb(struct notifier_block *this, + unsigned long code, + void *data) +{ + struct snd_soc_card *card = platform_get_drvdata(spdev); + + switch (code) { + case SUBSYS_BEFORE_SHUTDOWN: + snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE + dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); + break; + case SUBSYS_AFTER_POWERUP: + snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE + dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); + break; + default: + break; + } + return 0; +} + +static struct notifier_block auto_spf_dummy_ssr_notifier = { + .notifier_call = auto_spf_dummy_ssr_cb, +}; + static int msm_asoc_machine_probe(struct platform_device *pdev) { struct snd_soc_card *card; @@ -883,6 +910,9 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) pr_err("Sound card %s registered\n", card->name); spdev = pdev; + subsys_notif_register_notifier("adsp", &auto_spf_dummy_ssr_notifier); + dev_info(&pdev->dev, "Audio driver register for SSR complete\n"); + return 0; err: devm_kfree(&pdev->dev, pdata);