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: Dmitry Osipenko <dmitry.osipenko@collabora.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
a6db3b9232
commit
25a18559b8
|
@ -107,36 +107,46 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev,
|
|||
{
|
||||
u32 hw_version;
|
||||
int err;
|
||||
/*
|
||||
* The clk's connection id to set is NULL and this is a NULL terminated
|
||||
* array, hence two NULL entries.
|
||||
*/
|
||||
const char *clk_names[] = { NULL, NULL };
|
||||
struct dev_pm_opp_config config = {
|
||||
/*
|
||||
* 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
|
||||
* table is only capable of doing clk_set_rate() on invocation
|
||||
* of dev_pm_opp_set_rate() and doesn't provide any other
|
||||
* functionality.
|
||||
*/
|
||||
.clk_names = clk_names,
|
||||
};
|
||||
|
||||
if (of_machine_is_compatible("nvidia,tegra20")) {
|
||||
hw_version = BIT(tegra_sku_info.soc_process_id);
|
||||
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);
|
||||
config.supported_hw = &hw_version;
|
||||
config.supported_hw_count = 1;
|
||||
}
|
||||
|
||||
err = devm_pm_opp_set_config(dev, &config);
|
||||
if (err) {
|
||||
dev_err(dev, "failed to set OPP config: %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 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.
|
||||
* Tegra114+ doesn't support OPP yet, return early for non tegra20/30
|
||||
* case.
|
||||
*/
|
||||
err = devm_pm_opp_set_clkname(dev, NULL);
|
||||
if (err) {
|
||||
dev_err(dev, "failed to set OPP clk: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Tegra114+ doesn't support OPP yet */
|
||||
if (!of_machine_is_compatible("nvidia,tegra20") &&
|
||||
!of_machine_is_compatible("nvidia,tegra30"))
|
||||
if (!config.supported_hw)
|
||||
return -ENODEV;
|
||||
|
||||
if (of_machine_is_compatible("nvidia,tegra20"))
|
||||
hw_version = BIT(tegra_sku_info.soc_process_id);
|
||||
else
|
||||
hw_version = BIT(tegra_sku_info.soc_speedo_id);
|
||||
|
||||
err = devm_pm_opp_set_supported_hw(dev, &hw_version, 1);
|
||||
if (err) {
|
||||
dev_err(dev, "failed to set OPP supported HW: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Older device-trees have an empty OPP table, we will get
|
||||
* -ENODEV from devm_pm_opp_of_add_table() in this case.
|
||||
|
|
Loading…
Reference in New Issue