diff options
Diffstat (limited to 'drivers/devfreq/devfreq.c')
| -rw-r--r-- | drivers/devfreq/devfreq.c | 28 | 
1 files changed, 27 insertions, 1 deletions
| diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 85faa7a5c7d1..7906220d025c 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -827,7 +827,7 @@ struct devfreq *devfreq_add_device(struct device *dev,  		goto err_dev;  	} -	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) { +	if (!devfreq->profile->max_state || !devfreq->profile->freq_table) {  		mutex_unlock(&devfreq->lock);  		err = set_freq_table(devfreq);  		if (err < 0) @@ -1301,6 +1301,32 @@ err_out:  }  EXPORT_SYMBOL(devfreq_add_governor); +static void devm_devfreq_remove_governor(void *governor) +{ +	WARN_ON(devfreq_remove_governor(governor)); +} + +/** + * devm_devfreq_add_governor() - Add devfreq governor + * @dev:	device which adds devfreq governor + * @governor:	the devfreq governor to be added + * + * This is a resource-managed variant of devfreq_add_governor(). + */ +int devm_devfreq_add_governor(struct device *dev, +			      struct devfreq_governor *governor) +{ +	int err; + +	err = devfreq_add_governor(governor); +	if (err) +		return err; + +	return devm_add_action_or_reset(dev, devm_devfreq_remove_governor, +					governor); +} +EXPORT_SYMBOL(devm_devfreq_add_governor); +  /**   * devfreq_remove_governor() - Remove devfreq feature from a device.   * @governor:	the devfreq governor to be removed |