Commit 763ec5da authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Viresh Kumar
Browse files

cpufreq: tegra20: Use resource-managed API



Switch cpufreq-tegra20 driver to use resource-managed API.
This removes the need to get opp_table pointer using
dev_pm_opp_get_opp_table() in order to release OPP table that
was requested by dev_pm_opp_set_supported_hw(), making the code
a bit more straightforward.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 5c8fe583
Loading
Loading
Loading
Loading
+22 −23
Original line number Diff line number Diff line
@@ -32,6 +32,16 @@ static bool cpu0_node_has_opp_v2_prop(void)
	return ret;
}

static void tegra20_cpufreq_put_supported_hw(void *opp_table)
{
	dev_pm_opp_put_supported_hw(opp_table);
}

static void tegra20_cpufreq_dt_unregister(void *cpufreq_dt)
{
	platform_device_unregister(cpufreq_dt);
}

static int tegra20_cpufreq_probe(struct platform_device *pdev)
{
	struct platform_device *cpufreq_dt;
@@ -68,42 +78,31 @@ static int tegra20_cpufreq_probe(struct platform_device *pdev)
		return err;
	}

	err = devm_add_action_or_reset(&pdev->dev,
				       tegra20_cpufreq_put_supported_hw,
				       opp_table);
	if (err)
		return err;

	cpufreq_dt = platform_device_register_simple("cpufreq-dt", -1, NULL, 0);
	err = PTR_ERR_OR_ZERO(cpufreq_dt);
	if (err) {
		dev_err(&pdev->dev,
			"failed to create cpufreq-dt device: %d\n", err);
		goto err_put_supported_hw;
	}

	platform_set_drvdata(pdev, cpufreq_dt);

	return 0;

err_put_supported_hw:
	dev_pm_opp_put_supported_hw(opp_table);

		return err;
	}

static int tegra20_cpufreq_remove(struct platform_device *pdev)
{
	struct platform_device *cpufreq_dt;
	struct opp_table *opp_table;

	cpufreq_dt = platform_get_drvdata(pdev);
	platform_device_unregister(cpufreq_dt);

	opp_table = dev_pm_opp_get_opp_table(get_cpu_device(0));
	dev_pm_opp_put_supported_hw(opp_table);
	dev_pm_opp_put_opp_table(opp_table);
	err = devm_add_action_or_reset(&pdev->dev,
				       tegra20_cpufreq_dt_unregister,
				       cpufreq_dt);
	if (err)
		return err;

	return 0;
}

static struct platform_driver tegra20_cpufreq_driver = {
	.probe		= tegra20_cpufreq_probe,
	.remove		= tegra20_cpufreq_remove,
	.driver		= {
		.name	= "tegra20-cpufreq",
	},