diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-09-03 18:06:34 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-09-03 18:06:34 -0400 |
commit | 835f12819ba7e51c21ae8370e8be337bf82d8de4 (patch) | |
tree | 0b8190b443a05646a943ce60d5aacb5ad4d84376 | |
parent | 7b01463e51f6849d0787b24d06a62efcb243dd44 (diff) | |
parent | 0a9f429ffbac64b6d1b7c478f9c049cd3badbaa1 (diff) |
Merge branch 'pm-devfreq'
* pm-devfreq:
PM / devfreq: Fix memory leak when fail to register device
PM / devfreq: Add dependency on PM_OPP
PM / devfreq: Move private devfreq_update_stats() into devfreq
PM / devfreq: Convert to using %pOF instead of full_name
-rw-r--r-- | drivers/devfreq/Kconfig | 1 | ||||
-rw-r--r-- | drivers/devfreq/devfreq-event.c | 4 | ||||
-rw-r--r-- | drivers/devfreq/devfreq.c | 5 | ||||
-rw-r--r-- | drivers/devfreq/governor.h | 4 | ||||
-rw-r--r-- | include/linux/devfreq.h | 13 |
5 files changed, 11 insertions, 16 deletions
diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 41254e702f1e..6a172d338f6d 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | menuconfig PM_DEVFREQ | 1 | menuconfig PM_DEVFREQ |
2 | bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support" | 2 | bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support" |
3 | select SRCU | 3 | select SRCU |
4 | select PM_OPP | ||
4 | help | 5 | help |
5 | A device may have a list of frequencies and voltages available. | 6 | A device may have a list of frequencies and voltages available. |
6 | devfreq, a generic DVFS framework can be registered for a device | 7 | devfreq, a generic DVFS framework can be registered for a device |
diff --git a/drivers/devfreq/devfreq-event.c b/drivers/devfreq/devfreq-event.c index 8648b32ebc89..d67242d87744 100644 --- a/drivers/devfreq/devfreq-event.c +++ b/drivers/devfreq/devfreq-event.c | |||
@@ -277,8 +277,8 @@ int devfreq_event_get_edev_count(struct device *dev) | |||
277 | sizeof(u32)); | 277 | sizeof(u32)); |
278 | if (count < 0) { | 278 | if (count < 0) { |
279 | dev_err(dev, | 279 | dev_err(dev, |
280 | "failed to get the count of devfreq-event in %s node\n", | 280 | "failed to get the count of devfreq-event in %pOF node\n", |
281 | dev->of_node->full_name); | 281 | dev->of_node); |
282 | return count; | 282 | return count; |
283 | } | 283 | } |
284 | 284 | ||
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index dea04871b50d..a1c4ee818614 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c | |||
@@ -564,7 +564,7 @@ struct devfreq *devfreq_add_device(struct device *dev, | |||
564 | err = device_register(&devfreq->dev); | 564 | err = device_register(&devfreq->dev); |
565 | if (err) { | 565 | if (err) { |
566 | mutex_unlock(&devfreq->lock); | 566 | mutex_unlock(&devfreq->lock); |
567 | goto err_out; | 567 | goto err_dev; |
568 | } | 568 | } |
569 | 569 | ||
570 | devfreq->trans_table = devm_kzalloc(&devfreq->dev, | 570 | devfreq->trans_table = devm_kzalloc(&devfreq->dev, |
@@ -610,6 +610,9 @@ err_init: | |||
610 | mutex_unlock(&devfreq_list_lock); | 610 | mutex_unlock(&devfreq_list_lock); |
611 | 611 | ||
612 | device_unregister(&devfreq->dev); | 612 | device_unregister(&devfreq->dev); |
613 | err_dev: | ||
614 | if (devfreq) | ||
615 | kfree(devfreq); | ||
613 | err_out: | 616 | err_out: |
614 | return ERR_PTR(err); | 617 | return ERR_PTR(err); |
615 | } | 618 | } |
diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/governor.h index a4f2fa1091e4..cfc50a61a90d 100644 --- a/drivers/devfreq/governor.h +++ b/drivers/devfreq/governor.h | |||
@@ -69,4 +69,8 @@ extern int devfreq_remove_governor(struct devfreq_governor *governor); | |||
69 | 69 | ||
70 | extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); | 70 | extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); |
71 | 71 | ||
72 | static inline int devfreq_update_stats(struct devfreq *df) | ||
73 | { | ||
74 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); | ||
75 | } | ||
72 | #endif /* _GOVERNOR_H */ | 76 | #endif /* _GOVERNOR_H */ |
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index 6c220e4ebb6b..597294e0cc40 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h | |||
@@ -214,19 +214,6 @@ extern void devm_devfreq_unregister_notifier(struct device *dev, | |||
214 | extern struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, | 214 | extern struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, |
215 | int index); | 215 | int index); |
216 | 216 | ||
217 | /** | ||
218 | * devfreq_update_stats() - update the last_status pointer in struct devfreq | ||
219 | * @df: the devfreq instance whose status needs updating | ||
220 | * | ||
221 | * Governors are recommended to use this function along with last_status, | ||
222 | * which allows other entities to reuse the last_status without affecting | ||
223 | * the values fetched later by governors. | ||
224 | */ | ||
225 | static inline int devfreq_update_stats(struct devfreq *df) | ||
226 | { | ||
227 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); | ||
228 | } | ||
229 | |||
230 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) | 217 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) |
231 | /** | 218 | /** |
232 | * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq | 219 | * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq |