diff options
author | Nitin Pai <npai@nvidia.com> | 2012-05-24 17:16:03 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-06-06 17:23:10 -0700 |
commit | f9417ad159c43ae90f25c0ef978e2c37294d27a1 (patch) | |
tree | 4f24b1969c6bb8cd47d570cb67bdc2faab187b90 /sound/soc | |
parent | 50053b22fb5605eac717c8657c16fdf85a9c5b5e (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/soc')
-rw-r--r-- | sound/soc/tegra/tegra30_i2s.c | 13 |
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; |