OPP: Add support for parsing the 'opp-level' property
Now that the OPP bindings are updated to include an optional 'opp-level' property, add support to parse it from device tree and store it as part of dev_pm_opp structure. Also add and export an helper 'dev_pm_opp_get_level()' that can be used to get the level value read from device tree when present. Reviewed-by: Stephen Boyd <swboyd@chromium.org> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> Signed-off-by: Andy Gross <andy.gross@linaro.org>
This commit is contained in:
parent
cea8e2f393
commit
5b93ac5423
@ -130,6 +130,24 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq);
|
||||
|
||||
/**
|
||||
* dev_pm_opp_get_level() - Gets the level corresponding to an available opp
|
||||
* @opp: opp for which level value has to be returned for
|
||||
*
|
||||
* Return: level read from device tree corresponding to the opp, else
|
||||
* return 0.
|
||||
*/
|
||||
unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp)
|
||||
{
|
||||
if (IS_ERR_OR_NULL(opp) || !opp->available) {
|
||||
pr_err("%s: Invalid parameters\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return opp->level;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_opp_get_level);
|
||||
|
||||
/**
|
||||
* dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not
|
||||
* @opp: opp for which turbo mode is being verified
|
||||
|
@ -594,6 +594,8 @@ static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table,
|
||||
new_opp->rate = (unsigned long)rate;
|
||||
}
|
||||
|
||||
of_property_read_u32(np, "opp-level", &new_opp->level);
|
||||
|
||||
/* Check if the OPP supports hardware's hierarchy of versions or not */
|
||||
if (!_opp_is_supported(dev, opp_table, np)) {
|
||||
dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate);
|
||||
|
@ -60,6 +60,7 @@ extern struct list_head opp_tables;
|
||||
* @suspend: true if suspend OPP
|
||||
* @pstate: Device's power domain's performance state.
|
||||
* @rate: Frequency in hertz
|
||||
* @level: Performance level
|
||||
* @supplies: Power supplies voltage/current values
|
||||
* @clock_latency_ns: Latency (in nanoseconds) of switching to this OPP's
|
||||
* frequency from any other OPP's frequency.
|
||||
@ -80,6 +81,7 @@ struct dev_pm_opp {
|
||||
bool suspend;
|
||||
unsigned int pstate;
|
||||
unsigned long rate;
|
||||
unsigned int level;
|
||||
|
||||
struct dev_pm_opp_supply *supplies;
|
||||
|
||||
|
@ -86,6 +86,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp);
|
||||
|
||||
unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp);
|
||||
|
||||
unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp);
|
||||
|
||||
bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp);
|
||||
|
||||
int dev_pm_opp_get_opp_count(struct device *dev);
|
||||
@ -157,6 +159,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
|
||||
{
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user