diff options
author | Dmitry Osipenko <digetx@gmail.com> | 2018-05-18 16:06:36 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-05-21 07:44:24 -0400 |
commit | 64cd64e72bc26e60457094b93d93eaeee08ddd47 (patch) | |
tree | f172d150b08e0226163a0c10c2b48a63a78a4475 | |
parent | 9b633cb621bf0fb4eae961a0a52f573d171d7e3e (diff) |
cpufreq: tegra20: Release clocks properly
Properly put requested clocks in the module init/exit code.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | drivers/cpufreq/tegra20-cpufreq.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/drivers/cpufreq/tegra20-cpufreq.c b/drivers/cpufreq/tegra20-cpufreq.c index 4b09a8b410c4..ea186d3f0faf 100644 --- a/drivers/cpufreq/tegra20-cpufreq.c +++ b/drivers/cpufreq/tegra20-cpufreq.c | |||
@@ -161,24 +161,45 @@ static struct cpufreq_driver tegra_cpufreq_driver = { | |||
161 | 161 | ||
162 | static int __init tegra_cpufreq_init(void) | 162 | static int __init tegra_cpufreq_init(void) |
163 | { | 163 | { |
164 | int err; | ||
165 | |||
164 | cpu_clk = clk_get_sys(NULL, "cclk"); | 166 | cpu_clk = clk_get_sys(NULL, "cclk"); |
165 | if (IS_ERR(cpu_clk)) | 167 | if (IS_ERR(cpu_clk)) |
166 | return PTR_ERR(cpu_clk); | 168 | return PTR_ERR(cpu_clk); |
167 | 169 | ||
168 | pll_x_clk = clk_get_sys(NULL, "pll_x"); | 170 | pll_x_clk = clk_get_sys(NULL, "pll_x"); |
169 | if (IS_ERR(pll_x_clk)) | 171 | if (IS_ERR(pll_x_clk)) { |
170 | return PTR_ERR(pll_x_clk); | 172 | err = PTR_ERR(pll_x_clk); |
173 | goto put_cpu; | ||
174 | } | ||
171 | 175 | ||
172 | pll_p_clk = clk_get_sys(NULL, "pll_p"); | 176 | pll_p_clk = clk_get_sys(NULL, "pll_p"); |
173 | if (IS_ERR(pll_p_clk)) | 177 | if (IS_ERR(pll_p_clk)) { |
174 | return PTR_ERR(pll_p_clk); | 178 | err = PTR_ERR(pll_p_clk); |
179 | goto put_pll_x; | ||
180 | } | ||
181 | |||
182 | err = cpufreq_register_driver(&tegra_cpufreq_driver); | ||
183 | if (err) | ||
184 | goto put_pll_p; | ||
185 | |||
186 | return 0; | ||
187 | |||
188 | put_pll_p: | ||
189 | clk_put(pll_p_clk); | ||
190 | put_pll_x: | ||
191 | clk_put(pll_x_clk); | ||
192 | put_cpu: | ||
193 | clk_put(cpu_clk); | ||
175 | 194 | ||
176 | return cpufreq_register_driver(&tegra_cpufreq_driver); | 195 | return err; |
177 | } | 196 | } |
178 | 197 | ||
179 | static void __exit tegra_cpufreq_exit(void) | 198 | static void __exit tegra_cpufreq_exit(void) |
180 | { | 199 | { |
181 | cpufreq_unregister_driver(&tegra_cpufreq_driver); | 200 | cpufreq_unregister_driver(&tegra_cpufreq_driver); |
201 | clk_put(pll_p_clk); | ||
202 | clk_put(pll_x_clk); | ||
182 | clk_put(cpu_clk); | 203 | clk_put(cpu_clk); |
183 | } | 204 | } |
184 | 205 | ||