summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorNitin Pai <npai@nvidia.com>2012-05-24 17:16:03 +0530
committerSimone Willett <swillett@nvidia.com>2012-06-06 17:23:10 -0700
commitf9417ad159c43ae90f25c0ef978e2c37294d27a1 (patch)
tree4f24b1969c6bb8cd47d570cb67bdc2faab187b90 /sound
parent50053b22fb5605eac717c8657c16fdf85a9c5b5e (diff)
asoc: tegra: Fix setting rate for clk_audio_2x
- For slave mode, clk_audio_2x needs to be programmed to bitclock value. Setting this frequency is not possible if the parent clock has different frequency. Hence change the parent of this clock to i2s_sync clock first before setting the rate. - Fixed setting uninitialized variables. Bug 948478 Change-Id: Ieb4656e6e114d3a9b815f44003a476c4b9892059 Signed-off-by: Nitin Pai <npai@nvidia.com> Reviewed-on: http://git-master/r/104445 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Bob Johnston <bjohnston@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Scott Peterson <speterson@nvidia.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/tegra/tegra30_i2s.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/soc/tegra/tegra30_i2s.c b/sound/soc/tegra/tegra30_i2s.c
index 8be00b840fb5..a50b853135ae 100644
--- a/sound/soc/tegra/tegra30_i2s.c
+++ b/sound/soc/tegra/tegra30_i2s.c
@@ -346,6 +346,7 @@ static int tegra30_i2s_tdm_setup_clocks(struct device *dev,
dev_err(dev, "Can't set parent of I2S clock\n");
return ret;
}
+
ret = clk_set_rate(i2s->clk_i2s, *i2sclock);
if (ret) {
dev_err(dev, "Can't set I2S clock rate: %d\n", ret);
@@ -359,6 +360,13 @@ static int tegra30_i2s_tdm_setup_clocks(struct device *dev,
return ret;
}
+ ret = clk_set_parent(clk_get_parent(i2s->clk_audio_2x),
+ i2s->clk_i2s_sync);
+ if (ret) {
+ dev_err(dev, "Can't set parent of audio2x clock\n");
+ return ret;
+ }
+
ret = clk_set_rate(i2s->clk_audio_2x, *i2sclock);
if (ret) {
dev_err(dev, "Can't set audio2x clock rate\n");
@@ -367,7 +375,7 @@ static int tegra30_i2s_tdm_setup_clocks(struct device *dev,
ret = clk_set_parent(i2s->clk_i2s, i2s->clk_audio_2x);
if (ret) {
- dev_err(dev, "Can't set parent of audio2x clock\n");
+ dev_err(dev, "Can't set parent of i2s clock\n");
return ret;
}
}
@@ -382,7 +390,8 @@ static int tegra30_i2s_tdm_hw_params(struct snd_pcm_substream *substream,
struct device *dev = substream->pcm->card->dev;
struct tegra30_i2s *i2s = snd_soc_dai_get_drvdata(dai);
u32 val;
- int i2s_client_ch, i2s_audio_ch, i2s_audio_bits, i2s_client_bits;
+ int i2s_client_ch, i2s_audio_ch;
+ int i2s_audio_bits = 0, i2s_client_bits = 0;
int i2sclock, srate;
int ret;