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);
|
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
|
* dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not
|
||||||
* @opp: opp for which turbo mode is being verified
|
* @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;
|
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 */
|
/* Check if the OPP supports hardware's hierarchy of versions or not */
|
||||||
if (!_opp_is_supported(dev, opp_table, np)) {
|
if (!_opp_is_supported(dev, opp_table, np)) {
|
||||||
dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate);
|
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
|
* @suspend: true if suspend OPP
|
||||||
* @pstate: Device's power domain's performance state.
|
* @pstate: Device's power domain's performance state.
|
||||||
* @rate: Frequency in hertz
|
* @rate: Frequency in hertz
|
||||||
|
* @level: Performance level
|
||||||
* @supplies: Power supplies voltage/current values
|
* @supplies: Power supplies voltage/current values
|
||||||
* @clock_latency_ns: Latency (in nanoseconds) of switching to this OPP's
|
* @clock_latency_ns: Latency (in nanoseconds) of switching to this OPP's
|
||||||
* frequency from any other OPP's frequency.
|
* frequency from any other OPP's frequency.
|
||||||
|
@ -80,6 +81,7 @@ struct dev_pm_opp {
|
||||||
bool suspend;
|
bool suspend;
|
||||||
unsigned int pstate;
|
unsigned int pstate;
|
||||||
unsigned long rate;
|
unsigned long rate;
|
||||||
|
unsigned int level;
|
||||||
|
|
||||||
struct dev_pm_opp_supply *supplies;
|
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 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);
|
bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp);
|
||||||
|
|
||||||
int dev_pm_opp_get_opp_count(struct device *dev);
|
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;
|
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)
|
static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue