diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /drivers/base/power/qos.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'drivers/base/power/qos.c')
| -rw-r--r-- | drivers/base/power/qos.c | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c index e56d538d039e..7f3646e459cb 100644 --- a/drivers/base/power/qos.c +++ b/drivers/base/power/qos.c @@ -883,3 +883,40 @@ int dev_pm_qos_update_user_latency_tolerance(struct device *dev, s32 val)  	mutex_unlock(&dev_pm_qos_mtx);  	return ret;  } + +/** + * dev_pm_qos_expose_latency_tolerance - Expose latency tolerance to userspace + * @dev: Device whose latency tolerance to expose + */ +int dev_pm_qos_expose_latency_tolerance(struct device *dev) +{ +	int ret; + +	if (!dev->power.set_latency_tolerance) +		return -EINVAL; + +	mutex_lock(&dev_pm_qos_sysfs_mtx); +	ret = pm_qos_sysfs_add_latency_tolerance(dev); +	mutex_unlock(&dev_pm_qos_sysfs_mtx); + +	return ret; +} +EXPORT_SYMBOL_GPL(dev_pm_qos_expose_latency_tolerance); + +/** + * dev_pm_qos_hide_latency_tolerance - Hide latency tolerance from userspace + * @dev: Device whose latency tolerance to hide + */ +void dev_pm_qos_hide_latency_tolerance(struct device *dev) +{ +	mutex_lock(&dev_pm_qos_sysfs_mtx); +	pm_qos_sysfs_remove_latency_tolerance(dev); +	mutex_unlock(&dev_pm_qos_sysfs_mtx); + +	/* Remove the request from user space now */ +	pm_runtime_get_sync(dev); +	dev_pm_qos_update_user_latency_tolerance(dev, +		PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT); +	pm_runtime_put(dev); +} +EXPORT_SYMBOL_GPL(dev_pm_qos_hide_latency_tolerance);  |