diff options
| -rw-r--r-- | drivers/base/power/qos.c | 25 | ||||
| -rw-r--r-- | include/linux/pm_qos.h | 5 | 
2 files changed, 30 insertions, 0 deletions
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c index 86de6c50fc4..edf7687615e 100644 --- a/drivers/base/power/qos.c +++ b/drivers/base/power/qos.c @@ -412,3 +412,28 @@ int dev_pm_qos_remove_global_notifier(struct notifier_block *notifier)  	return blocking_notifier_chain_unregister(&dev_pm_notifiers, notifier);  }  EXPORT_SYMBOL_GPL(dev_pm_qos_remove_global_notifier); + +/** + * dev_pm_qos_add_ancestor_request - Add PM QoS request for device's ancestor. + * @dev: Device whose ancestor to add the request for. + * @req: Pointer to the preallocated handle. + * @value: Constraint latency value. + */ +int dev_pm_qos_add_ancestor_request(struct device *dev, +				    struct dev_pm_qos_request *req, s32 value) +{ +	struct device *ancestor = dev->parent; +	int error = -ENODEV; + +	while (ancestor && !ancestor->power.ignore_children) +		ancestor = ancestor->parent; + +	if (ancestor) +		error = dev_pm_qos_add_request(ancestor, req, value); + +	if (error) +		req->dev = NULL; + +	return error; +} +EXPORT_SYMBOL_GPL(dev_pm_qos_add_ancestor_request); diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 83b0ea302a8..fe247b33652 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -91,6 +91,8 @@ int dev_pm_qos_add_global_notifier(struct notifier_block *notifier);  int dev_pm_qos_remove_global_notifier(struct notifier_block *notifier);  void dev_pm_qos_constraints_init(struct device *dev);  void dev_pm_qos_constraints_destroy(struct device *dev); +int dev_pm_qos_add_ancestor_request(struct device *dev, +				    struct dev_pm_qos_request *req, s32 value);  #else  static inline int pm_qos_update_target(struct pm_qos_constraints *c,  				       struct plist_node *node, @@ -150,6 +152,9 @@ static inline void dev_pm_qos_constraints_destroy(struct device *dev)  {  	dev->power.power_state = PMSG_INVALID;  } +static inline int dev_pm_qos_add_ancestor_request(struct device *dev, +				    struct dev_pm_qos_request *req, s32 value) +			{ return 0; }  #endif  #endif  |