On 11/24, Viresh Kumar wrote:
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c index 99491f4099e5..7c945d5950bf 100644 --- a/drivers/base/power/opp/core.c +++ b/drivers/base/power/opp/core.c @@ -673,6 +673,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) { struct opp_table *opp_table; unsigned long freq, old_freq;
- int (*set_opp)(struct device *dev, struct dev_pm_set_opp_data *data);
Curious why dev is an argument that isn't part of struct dev_pm_set_opp_data here? Is there some benefit to keeping it split out?
struct dev_pm_opp *old_opp, *opp; struct regulator **regulators; struct dev_pm_set_opp_data *data; @@ -1488,7 +1497,7 @@ int dev_pm_opp_set_regulators(struct device *dev, const char * const names[], opp_table->regulator_count = count;
- /* Allocate block only once to pass to ->set_rate() */
- /* Allocate block only once to pass to ->set_opp() */
Ah here it is.
ret = _allocate_set_opp_data(opp_table); if (ret) goto free_regulators; @@ -1563,6 +1572,109 @@ void dev_pm_opp_put_regulators(struct device *dev) EXPORT_SYMBOL_GPL(dev_pm_opp_put_regulators); /**
- dev_pm_opp_register_set_opp_helper() - Register custom OPP set rate helper
s/custom OPP set rate/custom set OPP/ ?
- @dev: Device for which the helper is getting registered.
- @set_opp: Custom set OPP helper.
- This is useful to support complex platforms (like platforms with multiple
- regulators per device), instead of the generic OPP set rate helper.
- This must be called before any OPPs are initialized for the device.
- Locking: The internal opp_table and opp structures are RCU protected.
- Hence this function internally uses RCU updater strategy with mutex locks
- to keep the integrity of the internal data structures. Callers should ensure
- that this function is *NOT* called under RCU protection or in contexts where
- mutex cannot be locked.
- */