ASoC: Intel: Add suspend_pre and resume_post for Braswell snd_soc_card
authorJin Yao <yao.jin@linux.intel.com>
Tue, 17 Mar 2015 02:23:30 +0000 (10:23 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 17 Mar 2015 12:17:13 +0000 (12:17 +0000)
On Braswell, we need to add some machine specific setting before suspend
and after resume. For example, disable/enable jack detection in codec so
use snd_soc_card suspend_pre and resume_post ops for this purpose.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/cht_bsw_rt5672.c

index 279df4c43de16cdc1de5ce443088255b0e9b4ba6..c41fae3eb9ca8d40dd496db4da87dc8d9d85a70a 100644 (file)
@@ -267,6 +267,35 @@ static struct snd_soc_dai_link cht_dailink[] = {
        },
 };
 
+static int cht_suspend_pre(struct snd_soc_card *card)
+{
+       struct snd_soc_codec *codec;
+
+       list_for_each_entry(codec, &card->codec_dev_list, card_list) {
+               if (!strcmp(codec->component.name, "i2c-10EC5670:00")) {
+                       dev_dbg(codec->dev, "disabling jack detect before going to suspend.\n");
+                       rt5670_jack_suspend(codec);
+                       break;
+               }
+       }
+       return 0;
+}
+
+static int cht_resume_post(struct snd_soc_card *card)
+{
+       struct snd_soc_codec *codec;
+
+       list_for_each_entry(codec, &card->codec_dev_list, card_list) {
+               if (!strcmp(codec->component.name, "i2c-10EC5670:00")) {
+                       dev_dbg(codec->dev, "enabling jack detect for resume.\n");
+                       rt5670_jack_resume(codec);
+                       break;
+               }
+       }
+
+       return 0;
+}
+
 /* SoC card */
 static struct snd_soc_card snd_soc_card_cht = {
        .name = "cherrytrailcraudio",
@@ -278,6 +307,8 @@ static struct snd_soc_card snd_soc_card_cht = {
        .num_dapm_routes = ARRAY_SIZE(cht_audio_map),
        .controls = cht_mc_controls,
        .num_controls = ARRAY_SIZE(cht_mc_controls),
+       .suspend_pre = cht_suspend_pre,
+       .resume_post = cht_resume_post,
 };
 
 static int snd_cht_mc_probe(struct platform_device *pdev)