Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64cd64e7 authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Rafael J. Wysocki
Browse files

cpufreq: tegra20: Release clocks properly



Properly put requested clocks in the module init/exit code.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 9b633cb6
Loading
Loading
Loading
Loading
+26 −5
Original line number Original line Diff line number Diff line
@@ -161,24 +161,45 @@ static struct cpufreq_driver tegra_cpufreq_driver = {


static int __init tegra_cpufreq_init(void)
static int __init tegra_cpufreq_init(void)
{
{
	int err;

	cpu_clk = clk_get_sys(NULL, "cclk");
	cpu_clk = clk_get_sys(NULL, "cclk");
	if (IS_ERR(cpu_clk))
	if (IS_ERR(cpu_clk))
		return PTR_ERR(cpu_clk);
		return PTR_ERR(cpu_clk);


	pll_x_clk = clk_get_sys(NULL, "pll_x");
	pll_x_clk = clk_get_sys(NULL, "pll_x");
	if (IS_ERR(pll_x_clk))
	if (IS_ERR(pll_x_clk)) {
		return PTR_ERR(pll_x_clk);
		err = PTR_ERR(pll_x_clk);
		goto put_cpu;
	}


	pll_p_clk = clk_get_sys(NULL, "pll_p");
	pll_p_clk = clk_get_sys(NULL, "pll_p");
	if (IS_ERR(pll_p_clk))
	if (IS_ERR(pll_p_clk)) {
		return PTR_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)
static void __exit tegra_cpufreq_exit(void)
{
{
	cpufreq_unregister_driver(&tegra_cpufreq_driver);
	cpufreq_unregister_driver(&tegra_cpufreq_driver);
	clk_put(pll_p_clk);
	clk_put(pll_x_clk);
	clk_put(cpu_clk);
	clk_put(cpu_clk);
}
}