Commit 25a18559 authored by Viresh Kumar's avatar Viresh Kumar

soc/tegra: Migrate to dev_pm_opp_set_config()

The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().

Lets start using it.
Tested-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent a6db3b92
...@@ -107,36 +107,46 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev, ...@@ -107,36 +107,46 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev,
{ {
u32 hw_version; u32 hw_version;
int err; int err;
/* /*
* For some devices we don't have any OPP table in the DT, and in order * The clk's connection id to set is NULL and this is a NULL terminated
* to use the same code path for all the devices, we create a dummy OPP * array, hence two NULL entries.
* table for them via this call. The dummy OPP table is only capable of
* doing clk_set_rate() on invocation of dev_pm_opp_set_rate() and
* doesn't provide any other functionality.
*/ */
err = devm_pm_opp_set_clkname(dev, NULL); const char *clk_names[] = { NULL, NULL };
if (err) { struct dev_pm_opp_config config = {
dev_err(dev, "failed to set OPP clk: %d\n", err); /*
return err; * For some devices we don't have any OPP table in the DT, and
} * in order to use the same code path for all the devices, we
* create a dummy OPP table for them via this. The dummy OPP
/* Tegra114+ doesn't support OPP yet */ * table is only capable of doing clk_set_rate() on invocation
if (!of_machine_is_compatible("nvidia,tegra20") && * of dev_pm_opp_set_rate() and doesn't provide any other
!of_machine_is_compatible("nvidia,tegra30")) * functionality.
return -ENODEV; */
.clk_names = clk_names,
if (of_machine_is_compatible("nvidia,tegra20")) };
if (of_machine_is_compatible("nvidia,tegra20")) {
hw_version = BIT(tegra_sku_info.soc_process_id); hw_version = BIT(tegra_sku_info.soc_process_id);
else config.supported_hw = &hw_version;
config.supported_hw_count = 1;
} else if (of_machine_is_compatible("nvidia,tegra30")) {
hw_version = BIT(tegra_sku_info.soc_speedo_id); hw_version = BIT(tegra_sku_info.soc_speedo_id);
config.supported_hw = &hw_version;
config.supported_hw_count = 1;
}
err = devm_pm_opp_set_supported_hw(dev, &hw_version, 1); err = devm_pm_opp_set_config(dev, &config);
if (err) { if (err) {
dev_err(dev, "failed to set OPP supported HW: %d\n", err); dev_err(dev, "failed to set OPP config: %d\n", err);
return err; return err;
} }
/*
* Tegra114+ doesn't support OPP yet, return early for non tegra20/30
* case.
*/
if (!config.supported_hw)
return -ENODEV;
/* /*
* Older device-trees have an empty OPP table, we will get * Older device-trees have an empty OPP table, we will get
* -ENODEV from devm_pm_opp_of_add_table() in this case. * -ENODEV from devm_pm_opp_of_add_table() in this case.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment