diff options
author | Saravana Kannan <saravanak@google.com> | 2020-05-12 15:53:19 +0300 |
---|---|---|
committer | Viresh Kumar <viresh.kumar@linaro.org> | 2020-05-13 11:48:13 +0530 |
commit | 6c591eec67cbb4db988ab35b944f5cf9013c0714 (patch) | |
tree | 39439a80af14ff00a2e4936275b63929a1fcb062 /drivers/opp/core.c | |
parent | 45a41875fa20836f2839d4dda1f37d119a275542 (diff) | |
download | linux-6c591eec67cbb4db988ab35b944f5cf9013c0714.tar.gz linux-6c591eec67cbb4db988ab35b944f5cf9013c0714.tar.bz2 linux-6c591eec67cbb4db988ab35b944f5cf9013c0714.zip |
OPP: Add helpers for reading the binding properties
The opp-hz DT property is not mandatory and we may use another property
as a key in the OPP table. Add helper functions to simplify the reading
and comparing the keys.
Signed-off-by: Saravana Kannan <saravanak@google.com>
Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Sibi Sankar <sibis@codeaurora.org>
[ Viresh: Removed an unnecessary comment ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'drivers/opp/core.c')
-rw-r--r-- | drivers/opp/core.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/opp/core.c b/drivers/opp/core.c index e4f01e7771a2..ce7e4103ec09 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1286,11 +1286,21 @@ static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, return true; } +int _opp_compare_key(struct dev_pm_opp *opp1, struct dev_pm_opp *opp2) +{ + if (opp1->rate != opp2->rate) + return opp1->rate < opp2->rate ? -1 : 1; + if (opp1->level != opp2->level) + return opp1->level < opp2->level ? -1 : 1; + return 0; +} + static int _opp_is_duplicate(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *opp_table, struct list_head **head) { struct dev_pm_opp *opp; + int opp_cmp; /* * Insert new OPP in order of increasing frequency and discard if @@ -1301,12 +1311,13 @@ static int _opp_is_duplicate(struct device *dev, struct dev_pm_opp *new_opp, * loop. */ list_for_each_entry(opp, &opp_table->opp_list, node) { - if (new_opp->rate > opp->rate) { + opp_cmp = _opp_compare_key(new_opp, opp); + if (opp_cmp > 0) { *head = &opp->node; continue; } - if (new_opp->rate < opp->rate) + if (opp_cmp < 0) return 0; /* Duplicate OPPs */ |