On 17-05-18, 21:00, Dmitry Osipenko wrote: > Properly put requested clocks in the module init/exit code. > > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> > --- > drivers/cpufreq/tegra20-cpufreq.c | 31 ++++++++++++++++++++++++++----- > 1 file changed, 26 insertions(+), 5 deletions(-) > > diff --git a/drivers/cpufreq/tegra20-cpufreq.c b/drivers/cpufreq/tegra20-cpufreq.c > index 693f9067ba8a..69f033d297e1 100644 > --- a/drivers/cpufreq/tegra20-cpufreq.c > +++ b/drivers/cpufreq/tegra20-cpufreq.c > @@ -165,24 +165,45 @@ static struct cpufreq_driver tegra_cpufreq_driver = { > > static int __init tegra_cpufreq_init(void) > { > + int err; > + > cpu_clk = clk_get_sys(NULL, "cclk"); > if (IS_ERR(cpu_clk)) > return PTR_ERR(cpu_clk); > > pll_x_clk = clk_get_sys(NULL, "pll_x"); > - if (IS_ERR(pll_x_clk)) > - return PTR_ERR(pll_x_clk); > + if (IS_ERR(pll_x_clk)) { > + err = PTR_ERR(pll_x_clk); > + goto put_cpu; > + } > > pll_p_clk = clk_get_sys(NULL, "pll_p"); > - if (IS_ERR(pll_p_clk)) > - return PTR_ERR(pll_p_clk); > + if (IS_ERR(pll_p_clk)) { > + err = PTR_ERR(pll_p_clk); > + goto put_pll_x; > + } > + > + err = cpufreq_register_driver(&tegra_cpufreq_driver); > + if (err) > + goto put_pll_p; > + > + return 0; > + > +put_pll_p: > + clk_put(pll_p_clk); > +put_pll_x: > + clk_put(pll_x_clk); > +put_cpu: > + clk_put(cpu_clk); > > - return cpufreq_register_driver(&tegra_cpufreq_driver); > + return err; > } > > static void __exit tegra_cpufreq_exit(void) > { > cpufreq_unregister_driver(&tegra_cpufreq_driver); > + clk_put(pll_p_clk); > + clk_put(pll_x_clk); > clk_put(cpu_clk); > } Acked-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> -- viresh -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html