OPP: Provide a simple implementation to configure multiple clocks
This provides a simple implementation to configure multiple clocks for a device. Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
f123ea7451
commit
8174a3a613
@ -843,6 +843,40 @@ _opp_config_clk_single(struct device *dev, struct opp_table *opp_table,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Simple implementation for configuring multiple clocks. Configure clocks in
|
||||||
|
* the order in which they are present in the array while scaling up.
|
||||||
|
*/
|
||||||
|
int dev_pm_opp_config_clks_simple(struct device *dev,
|
||||||
|
struct opp_table *opp_table, struct dev_pm_opp *opp, void *data,
|
||||||
|
bool scaling_down)
|
||||||
|
{
|
||||||
|
int ret, i;
|
||||||
|
|
||||||
|
if (scaling_down) {
|
||||||
|
for (i = opp_table->clk_count - 1; i >= 0; i--) {
|
||||||
|
ret = clk_set_rate(opp_table->clks[i], opp->rates[i]);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "%s: failed to set clock rate: %d\n", __func__,
|
||||||
|
ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < opp_table->clk_count; i++) {
|
||||||
|
ret = clk_set_rate(opp_table->clks[i], opp->rates[i]);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "%s: failed to set clock rate: %d\n", __func__,
|
||||||
|
ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(dev_pm_opp_config_clks_simple);
|
||||||
|
|
||||||
static int _opp_config_regulator_single(struct device *dev,
|
static int _opp_config_regulator_single(struct device *dev,
|
||||||
struct dev_pm_opp *old_opp, struct dev_pm_opp *new_opp,
|
struct dev_pm_opp *old_opp, struct dev_pm_opp *new_opp,
|
||||||
struct regulator **regulators, unsigned int count)
|
struct regulator **regulators, unsigned int count)
|
||||||
|
@ -159,6 +159,9 @@ int dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb
|
|||||||
int dev_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config);
|
int dev_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config);
|
||||||
int devm_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config);
|
int devm_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config);
|
||||||
void dev_pm_opp_clear_config(int token);
|
void dev_pm_opp_clear_config(int token);
|
||||||
|
int dev_pm_opp_config_clks_simple(struct device *dev,
|
||||||
|
struct opp_table *opp_table, struct dev_pm_opp *opp, void *data,
|
||||||
|
bool scaling_down);
|
||||||
|
|
||||||
struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table, struct opp_table *dst_table, struct dev_pm_opp *src_opp);
|
struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table, struct opp_table *dst_table, struct dev_pm_opp *src_opp);
|
||||||
int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate);
|
int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate);
|
||||||
@ -342,6 +345,13 @@ static inline int devm_pm_opp_set_config(struct device *dev, struct dev_pm_opp_c
|
|||||||
|
|
||||||
static inline void dev_pm_opp_clear_config(int token) {}
|
static inline void dev_pm_opp_clear_config(int token) {}
|
||||||
|
|
||||||
|
static inline int dev_pm_opp_config_clks_simple(struct device *dev,
|
||||||
|
struct opp_table *opp_table, struct dev_pm_opp *opp, void *data,
|
||||||
|
bool scaling_down)
|
||||||
|
{
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table,
|
static inline struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table,
|
||||||
struct opp_table *dst_table, struct dev_pm_opp *src_opp)
|
struct opp_table *dst_table, struct dev_pm_opp *src_opp)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user