summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVijay Mali <vmali@nvidia.com>2013-06-11 21:03:24 +0530
committerRiham Haidar <rhaidar@nvidia.com>2013-06-12 18:53:49 -0700
commitc0df5921513d54581b52d4a674079176e0ecde41 (patch)
tree260d4669deebac4903a43dbb80548705a9915d45
parent9d23e972ddde906b0aede0c4ba4f87665230a98f (diff)
ASoC: Tegra: Fix for negative dam ifc during voice call
Check return value of configure_dam function. Add error message and graceful exit path in make_voice_call function when DAM controller allocation fails. Bug 1274653 Change-Id: I9924c256113c73fb3208c1e0e7225cb485022ca4 Signed-off-by: Vijay Mali <vmali@nvidia.com> Reviewed-on: http://git-master/r/237664 Reviewed-by: Ravindra Lokhande <rlokhande@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Scott Peterson <speterson@nvidia.com>
-rw-r--r--sound/soc/tegra/tegra30_i2s.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/sound/soc/tegra/tegra30_i2s.c b/sound/soc/tegra/tegra30_i2s.c
index 22b8f8c17ea5..529670e9324b 100644
--- a/sound/soc/tegra/tegra30_i2s.c
+++ b/sound/soc/tegra/tegra30_i2s.c
@@ -1182,9 +1182,10 @@ static int configure_dam(struct tegra30_i2s *i2s, int out_channel,
if (!i2s->dam_ch_refcount)
i2s->dam_ifc = tegra30_dam_allocate_controller();
- if (i2s->dam_ifc < 0)
+ if (i2s->dam_ifc < 0) {
+ pr_err("Error : Failed to allocate DAM controller\n");
return -ENOENT;
-
+ }
tegra30_dam_allocate_channel(i2s->dam_ifc, TEGRA30_DAM_CHIN0_SRC);
i2s->dam_ch_refcount++;
tegra30_dam_enable_clock(i2s->dam_ifc);
@@ -1226,7 +1227,7 @@ int tegra30_make_voice_call_connections(struct codec_config *codec_info,
{
struct tegra30_i2s *codec_i2s;
struct tegra30_i2s *bb_i2s;
- int reg;
+ int reg, ret;
codec_i2s = &i2scont[codec_info->i2s_id];
bb_i2s = &i2scont[bb_info->i2s_id];
@@ -1293,14 +1294,30 @@ int tegra30_make_voice_call_connections(struct codec_config *codec_info,
} else {
/*configure codec dam*/
- configure_dam(codec_i2s, codec_info->channels,
- codec_info->rate, codec_info->bitsize, bb_info->channels,
- bb_info->rate, bb_info->bitsize);
+ ret = configure_dam(codec_i2s,
+ codec_info->channels,
+ codec_info->rate,
+ codec_info->bitsize,
+ bb_info->channels,
+ bb_info->rate,
+ bb_info->bitsize);
+ if (ret != 0) {
+ pr_err("Error: Failed configure_dam\n");
+ return ret;
+ }
/*configure bb dam*/
- configure_dam(bb_i2s, bb_info->channels,
- bb_info->rate, bb_info->bitsize, codec_info->channels,
- codec_info->rate, codec_info->bitsize);
+ ret = configure_dam(bb_i2s,
+ bb_info->channels,
+ bb_info->rate,
+ bb_info->bitsize,
+ codec_info->channels,
+ codec_info->rate,
+ codec_info->bitsize);
+ if (ret != 0) {
+ pr_err("Error: Failed configure_dam\n");
+ return ret;
+ }
/*make ahub connections*/