diff options
author | Nikesh Oswal <noswal@nvidia.com> | 2011-12-20 16:00:44 +0530 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-22 11:31:40 +0530 |
commit | a73464eeec4b6c45cec7e6652b44719c95dedad6 (patch) | |
tree | 35c3ab020ef278d3ed67d791866f56361c5560d6 /sound/soc/tegra/tegra_max98088.c | |
parent | 47bf25894fc63037ffeac0d80a766b4fb5ac721f (diff) |
ASOC: tegra: voice call support during suspend
during voice call, prevent suspend of codec and audio
modules, whereas for other mode they are allowed to suspend.
Bug: 917672
Change-Id: I1e8ff06fa21084a0187d35258177f22ae112f1ce
Signed-off-by: Nikesh Oswal <noswal@nvidia.com>
Reviewed-on: http://git-master/r/71174
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Reviewed-by: Scott Peterson <speterson@nvidia.com>
Diffstat (limited to 'sound/soc/tegra/tegra_max98088.c')
-rw-r--r-- | sound/soc/tegra/tegra_max98088.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sound/soc/tegra/tegra_max98088.c b/sound/soc/tegra/tegra_max98088.c index ec6a73c0e084..9b2d1e9af478 100644 --- a/sound/soc/tegra/tegra_max98088.c +++ b/sound/soc/tegra/tegra_max98088.c @@ -92,6 +92,7 @@ struct tegra_max98088 { struct codec_config codec_info[NUM_I2S_DEVICES]; #endif enum snd_soc_bias_level bias_level; + struct snd_soc_card *pcard; }; static int tegra_call_mode_info(struct snd_kcontrol *kcontrol, @@ -120,6 +121,7 @@ static int tegra_call_mode_put(struct snd_kcontrol *kcontrol, struct tegra_max98088 *machine = snd_kcontrol_chip(kcontrol); int is_call_mode_new = ucontrol->value.integer.value[0]; int codec_index; + unsigned int i; if (machine->is_call_mode == is_call_mode_new) return 0; @@ -135,6 +137,9 @@ static int tegra_call_mode_put(struct snd_kcontrol *kcontrol, machine->codec_info[codec_index].channels == 0) return -EINVAL; + for (i = 0; i < machine->pcard->num_links; i++) + machine->pcard->dai_link[i].ignore_suspend = 1; + tegra30_make_voice_call_connections( &machine->codec_info[codec_index], &machine->codec_info[BASEBAND]); @@ -144,6 +149,9 @@ static int tegra_call_mode_put(struct snd_kcontrol *kcontrol, tegra30_break_voice_call_connections( &machine->codec_info[codec_index], &machine->codec_info[BASEBAND]); + + for (i = 0; i < machine->pcard->num_links; i++) + machine->pcard->dai_link[i].ignore_suspend = 0; #endif } @@ -800,6 +808,8 @@ static int tegra_max98088_init(struct snd_soc_pcm_runtime *rtd) machine->init_done = true; + machine->pcard = card; + if (gpio_is_valid(pdata->gpio_spkr_en)) { ret = gpio_request(pdata->gpio_spkr_en, "spkr_en"); if (ret) { |