Skip to content

Commit

Permalink
soc/tegra: Migrate to dev_pm_opp_set_config()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Viresh Kumar <[email protected]>
  • Loading branch information
vireshk committed Jul 8, 2022
1 parent a6db3b9 commit 25a1855
Showing 1 changed file with 31 additions and 21 deletions.
52 changes: 31 additions & 21 deletions drivers/soc/tegra/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,36 +107,46 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev,
{
u32 hw_version;
int 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.
* The clk's connection id to set is NULL and this is a NULL terminated
* array, hence two NULL entries.
*/
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"))
return -ENODEV;

if (of_machine_is_compatible("nvidia,tegra20"))
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);
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);
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) {
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;
}

/*
* 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
* -ENODEV from devm_pm_opp_of_add_table() in this case.
Expand Down

0 comments on commit 25a1855

Please sign in to comment.