diff options
author | Stephen Warren <swarren@nvidia.com> | 2011-04-19 17:25:09 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-04-20 08:49:55 -0400 |
commit | 075413966a6ea389f78f4cc2e957708c1d6db8c5 (patch) | |
tree | 7f67ad032800ff3469d772c214885778bf9e41d5 | |
parent | acb8303f15768c72796f3f95bb32a955333e0fbc (diff) |
ASoC: Tegra: Don't return mclk_changed from utils_set_rate
Only the clock programming code needs to know whether the clocks changed,
and that is encapsulated within tegra_asoc_utils_set_rate(). The machine
driver's call to snd_soc_dai_set_sysclk(codec_dai, ...) is safe
irrespective of whether the clocks changed.
(Applying Mark's TrimSlice review comments to the existing driver)
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/tegra/tegra_asoc_utils.c | 9 | ||||
-rw-r--r-- | sound/soc/tegra/tegra_asoc_utils.h | 2 | ||||
-rw-r--r-- | sound/soc/tegra/tegra_wm8903.c | 17 |
3 files changed, 13 insertions, 15 deletions
diff --git a/sound/soc/tegra/tegra_asoc_utils.c b/sound/soc/tegra/tegra_asoc_utils.c index 52f0a3f9ce40..dfa85cbb05c8 100644 --- a/sound/soc/tegra/tegra_asoc_utils.c +++ b/sound/soc/tegra/tegra_asoc_utils.c | |||
@@ -28,9 +28,10 @@ | |||
28 | #include "tegra_asoc_utils.h" | 28 | #include "tegra_asoc_utils.h" |
29 | 29 | ||
30 | int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate, | 30 | int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate, |
31 | int mclk, int *mclk_change) | 31 | int mclk) |
32 | { | 32 | { |
33 | int new_baseclock; | 33 | int new_baseclock; |
34 | bool clk_change; | ||
34 | int err; | 35 | int err; |
35 | 36 | ||
36 | switch (srate) { | 37 | switch (srate) { |
@@ -52,10 +53,10 @@ int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate, | |||
52 | return -EINVAL; | 53 | return -EINVAL; |
53 | } | 54 | } |
54 | 55 | ||
55 | *mclk_change = ((new_baseclock != data->set_baseclock) || | 56 | clk_change = ((new_baseclock != data->set_baseclock) || |
56 | (mclk != data->set_mclk)); | 57 | (mclk != data->set_mclk)); |
57 | if (!*mclk_change) | 58 | if (!clk_change) |
58 | return 0; | 59 | return 0; |
59 | 60 | ||
60 | data->set_baseclock = 0; | 61 | data->set_baseclock = 0; |
61 | data->set_mclk = 0; | 62 | data->set_mclk = 0; |
diff --git a/sound/soc/tegra/tegra_asoc_utils.h b/sound/soc/tegra/tegra_asoc_utils.h index bbba7afdfc2c..4818195da25c 100644 --- a/sound/soc/tegra/tegra_asoc_utils.h +++ b/sound/soc/tegra/tegra_asoc_utils.h | |||
@@ -36,7 +36,7 @@ struct tegra_asoc_utils_data { | |||
36 | }; | 36 | }; |
37 | 37 | ||
38 | int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate, | 38 | int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate, |
39 | int mclk, int *mclk_change); | 39 | int mclk); |
40 | int tegra_asoc_utils_init(struct tegra_asoc_utils_data *data, | 40 | int tegra_asoc_utils_init(struct tegra_asoc_utils_data *data, |
41 | struct device *dev); | 41 | struct device *dev); |
42 | void tegra_asoc_utils_fini(struct tegra_asoc_utils_data *data); | 42 | void tegra_asoc_utils_fini(struct tegra_asoc_utils_data *data); |
diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c index b12b1fd1cb6e..988ff504dd59 100644 --- a/sound/soc/tegra/tegra_wm8903.c +++ b/sound/soc/tegra/tegra_wm8903.c | |||
@@ -72,7 +72,7 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream, | |||
72 | struct snd_soc_codec *codec = rtd->codec; | 72 | struct snd_soc_codec *codec = rtd->codec; |
73 | struct snd_soc_card *card = codec->card; | 73 | struct snd_soc_card *card = codec->card; |
74 | struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card); | 74 | struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card); |
75 | int srate, mclk, mclk_change; | 75 | int srate, mclk; |
76 | int err; | 76 | int err; |
77 | 77 | ||
78 | srate = params_rate(params); | 78 | srate = params_rate(params); |
@@ -90,8 +90,7 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream, | |||
90 | while (mclk < 6000000) | 90 | while (mclk < 6000000) |
91 | mclk *= 2; | 91 | mclk *= 2; |
92 | 92 | ||
93 | err = tegra_asoc_utils_set_rate(&machine->util_data, srate, mclk, | 93 | err = tegra_asoc_utils_set_rate(&machine->util_data, srate, mclk); |
94 | &mclk_change); | ||
95 | if (err < 0) { | 94 | if (err < 0) { |
96 | dev_err(card->dev, "Can't configure clocks\n"); | 95 | dev_err(card->dev, "Can't configure clocks\n"); |
97 | return err; | 96 | return err; |
@@ -115,13 +114,11 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream, | |||
115 | return err; | 114 | return err; |
116 | } | 115 | } |
117 | 116 | ||
118 | if (mclk_change) { | 117 | err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, |
119 | err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, | 118 | SND_SOC_CLOCK_IN); |
120 | SND_SOC_CLOCK_IN); | 119 | if (err < 0) { |
121 | if (err < 0) { | 120 | dev_err(card->dev, "codec_dai clock not set\n"); |
122 | dev_err(card->dev, "codec_dai clock not set\n"); | 121 | return err; |
123 | return err; | ||
124 | } | ||
125 | } | 122 | } |
126 | 123 | ||
127 | return 0; | 124 | return 0; |