2 * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
5 * Copyright (C) 2011 Samsung Electronics
6 * MyungJoo Ham <myungjoo.ham@samsung.com>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
13 #include <linux/kernel.h>
14 #include <linux/kmod.h>
15 #include <linux/sched.h>
16 #include <linux/errno.h>
17 #include <linux/err.h>
18 #include <linux/init.h>
19 #include <linux/export.h>
20 #include <linux/slab.h>
21 #include <linux/stat.h>
22 #include <linux/pm_opp.h>
23 #include <linux/devfreq.h>
24 #include <linux/workqueue.h>
25 #include <linux/platform_device.h>
26 #include <linux/list.h>
27 #include <linux/printk.h>
28 #include <linux/hrtimer.h>
32 static struct class *devfreq_class
;
35 * devfreq core provides delayed work based load monitoring helper
36 * functions. Governors can use these or can implement their own
37 * monitoring mechanism.
39 static struct workqueue_struct
*devfreq_wq
;
41 /* The list of all device-devfreq governors */
42 static LIST_HEAD(devfreq_governor_list
);
43 /* The list of all device-devfreq */
44 static LIST_HEAD(devfreq_list
);
45 static DEFINE_MUTEX(devfreq_list_lock
);
48 * find_device_devfreq() - find devfreq struct using device pointer
49 * @dev: device pointer used to lookup device devfreq.
51 * Search the list of device devfreqs and return the matched device's
52 * devfreq info. devfreq_list_lock should be held by the caller.
54 static struct devfreq
*find_device_devfreq(struct device
*dev
)
56 struct devfreq
*tmp_devfreq
;
58 if (IS_ERR_OR_NULL(dev
)) {
59 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__
);
60 return ERR_PTR(-EINVAL
);
62 WARN(!mutex_is_locked(&devfreq_list_lock
),
63 "devfreq_list_lock must be locked.");
65 list_for_each_entry(tmp_devfreq
, &devfreq_list
, node
) {
66 if (tmp_devfreq
->dev
.parent
== dev
)
70 return ERR_PTR(-ENODEV
);
73 static unsigned long find_available_min_freq(struct devfreq
*devfreq
)
75 struct dev_pm_opp
*opp
;
76 unsigned long min_freq
= 0;
78 opp
= dev_pm_opp_find_freq_ceil(devfreq
->dev
.parent
, &min_freq
);
87 static unsigned long find_available_max_freq(struct devfreq
*devfreq
)
89 struct dev_pm_opp
*opp
;
90 unsigned long max_freq
= ULONG_MAX
;
92 opp
= dev_pm_opp_find_freq_floor(devfreq
->dev
.parent
, &max_freq
);
102 * devfreq_get_freq_level() - Lookup freq_table for the frequency
103 * @devfreq: the devfreq instance
104 * @freq: the target frequency
106 static int devfreq_get_freq_level(struct devfreq
*devfreq
, unsigned long freq
)
110 for (lev
= 0; lev
< devfreq
->profile
->max_state
; lev
++)
111 if (freq
== devfreq
->profile
->freq_table
[lev
])
117 static int set_freq_table(struct devfreq
*devfreq
)
119 struct devfreq_dev_profile
*profile
= devfreq
->profile
;
120 struct dev_pm_opp
*opp
;
124 /* Initialize the freq_table from OPP table */
125 count
= dev_pm_opp_get_opp_count(devfreq
->dev
.parent
);
129 profile
->max_state
= count
;
130 profile
->freq_table
= devm_kcalloc(devfreq
->dev
.parent
,
132 sizeof(*profile
->freq_table
),
134 if (!profile
->freq_table
) {
135 profile
->max_state
= 0;
139 for (i
= 0, freq
= 0; i
< profile
->max_state
; i
++, freq
++) {
140 opp
= dev_pm_opp_find_freq_ceil(devfreq
->dev
.parent
, &freq
);
142 devm_kfree(devfreq
->dev
.parent
, profile
->freq_table
);
143 profile
->max_state
= 0;
147 profile
->freq_table
[i
] = freq
;
154 * devfreq_update_status() - Update statistics of devfreq behavior
155 * @devfreq: the devfreq instance
156 * @freq: the update target frequency
158 int devfreq_update_status(struct devfreq
*devfreq
, unsigned long freq
)
160 int lev
, prev_lev
, ret
= 0;
161 unsigned long cur_time
;
165 /* Immediately exit if previous_freq is not initialized yet. */
166 if (!devfreq
->previous_freq
)
169 prev_lev
= devfreq_get_freq_level(devfreq
, devfreq
->previous_freq
);
175 devfreq
->time_in_state
[prev_lev
] +=
176 cur_time
- devfreq
->last_stat_updated
;
178 lev
= devfreq_get_freq_level(devfreq
, freq
);
184 if (lev
!= prev_lev
) {
185 devfreq
->trans_table
[(prev_lev
*
186 devfreq
->profile
->max_state
) + lev
]++;
187 devfreq
->total_trans
++;
191 devfreq
->last_stat_updated
= cur_time
;
194 EXPORT_SYMBOL(devfreq_update_status
);
197 * find_devfreq_governor() - find devfreq governor from name
198 * @name: name of the governor
200 * Search the list of devfreq governors and return the matched
201 * governor's pointer. devfreq_list_lock should be held by the caller.
203 static struct devfreq_governor
*find_devfreq_governor(const char *name
)
205 struct devfreq_governor
*tmp_governor
;
207 if (IS_ERR_OR_NULL(name
)) {
208 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__
);
209 return ERR_PTR(-EINVAL
);
211 WARN(!mutex_is_locked(&devfreq_list_lock
),
212 "devfreq_list_lock must be locked.");
214 list_for_each_entry(tmp_governor
, &devfreq_governor_list
, node
) {
215 if (!strncmp(tmp_governor
->name
, name
, DEVFREQ_NAME_LEN
))
219 return ERR_PTR(-ENODEV
);
223 * try_then_request_governor() - Try to find the governor and request the
224 * module if is not found.
225 * @name: name of the governor
227 * Search the list of devfreq governors and request the module and try again
228 * if is not found. This can happen when both drivers (the governor driver
229 * and the driver that call devfreq_add_device) are built as modules.
230 * devfreq_list_lock should be held by the caller. Returns the matched
231 * governor's pointer.
233 static struct devfreq_governor
*try_then_request_governor(const char *name
)
235 struct devfreq_governor
*governor
;
238 if (IS_ERR_OR_NULL(name
)) {
239 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__
);
240 return ERR_PTR(-EINVAL
);
242 WARN(!mutex_is_locked(&devfreq_list_lock
),
243 "devfreq_list_lock must be locked.");
245 governor
= find_devfreq_governor(name
);
246 if (IS_ERR(governor
)) {
247 mutex_unlock(&devfreq_list_lock
);
249 if (!strncmp(name
, DEVFREQ_GOV_SIMPLE_ONDEMAND
,
251 err
= request_module("governor_%s", "simpleondemand");
253 err
= request_module("governor_%s", name
);
254 /* Restore previous state before return */
255 mutex_lock(&devfreq_list_lock
);
259 governor
= find_devfreq_governor(name
);
265 static int devfreq_notify_transition(struct devfreq
*devfreq
,
266 struct devfreq_freqs
*freqs
, unsigned int state
)
272 case DEVFREQ_PRECHANGE
:
273 srcu_notifier_call_chain(&devfreq
->transition_notifier_list
,
274 DEVFREQ_PRECHANGE
, freqs
);
277 case DEVFREQ_POSTCHANGE
:
278 srcu_notifier_call_chain(&devfreq
->transition_notifier_list
,
279 DEVFREQ_POSTCHANGE
, freqs
);
288 /* Load monitoring helper functions for governors use */
291 * update_devfreq() - Reevaluate the device and configure frequency.
292 * @devfreq: the devfreq instance.
294 * Note: Lock devfreq->lock before calling update_devfreq
295 * This function is exported for governors.
297 int update_devfreq(struct devfreq
*devfreq
)
299 struct devfreq_freqs freqs
;
300 unsigned long freq
, cur_freq
, min_freq
, max_freq
;
304 if (!mutex_is_locked(&devfreq
->lock
)) {
305 WARN(true, "devfreq->lock must be locked by the caller.\n");
309 if (!devfreq
->governor
)
312 /* Reevaluate the proper frequency */
313 err
= devfreq
->governor
->get_target_freq(devfreq
, &freq
);
318 * Adjust the frequency with user freq, QoS and available freq.
320 * List from the highest priority
324 max_freq
= min(devfreq
->scaling_max_freq
, devfreq
->max_freq
);
325 min_freq
= max(devfreq
->scaling_min_freq
, devfreq
->min_freq
);
327 if (freq
< min_freq
) {
329 flags
&= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND
; /* Use GLB */
331 if (freq
> max_freq
) {
333 flags
|= DEVFREQ_FLAG_LEAST_UPPER_BOUND
; /* Use LUB */
336 if (devfreq
->profile
->get_cur_freq
)
337 devfreq
->profile
->get_cur_freq(devfreq
->dev
.parent
, &cur_freq
);
339 cur_freq
= devfreq
->previous_freq
;
341 freqs
.old
= cur_freq
;
343 devfreq_notify_transition(devfreq
, &freqs
, DEVFREQ_PRECHANGE
);
345 err
= devfreq
->profile
->target(devfreq
->dev
.parent
, &freq
, flags
);
347 freqs
.new = cur_freq
;
348 devfreq_notify_transition(devfreq
, &freqs
, DEVFREQ_POSTCHANGE
);
353 devfreq_notify_transition(devfreq
, &freqs
, DEVFREQ_POSTCHANGE
);
355 if (devfreq_update_status(devfreq
, freq
))
356 dev_err(&devfreq
->dev
,
357 "Couldn't update frequency transition information.\n");
359 devfreq
->previous_freq
= freq
;
362 EXPORT_SYMBOL(update_devfreq
);
365 * devfreq_monitor() - Periodically poll devfreq objects.
366 * @work: the work struct used to run devfreq_monitor periodically.
369 static void devfreq_monitor(struct work_struct
*work
)
372 struct devfreq
*devfreq
= container_of(work
,
373 struct devfreq
, work
.work
);
375 mutex_lock(&devfreq
->lock
);
376 err
= update_devfreq(devfreq
);
378 dev_err(&devfreq
->dev
, "dvfs failed with (%d) error\n", err
);
380 queue_delayed_work(devfreq_wq
, &devfreq
->work
,
381 msecs_to_jiffies(devfreq
->profile
->polling_ms
));
382 mutex_unlock(&devfreq
->lock
);
386 * devfreq_monitor_start() - Start load monitoring of devfreq instance
387 * @devfreq: the devfreq instance.
389 * Helper function for starting devfreq device load monitoing. By
390 * default delayed work based monitoring is supported. Function
391 * to be called from governor in response to DEVFREQ_GOV_START
392 * event when device is added to devfreq framework.
394 void devfreq_monitor_start(struct devfreq
*devfreq
)
396 INIT_DEFERRABLE_WORK(&devfreq
->work
, devfreq_monitor
);
397 if (devfreq
->profile
->polling_ms
)
398 queue_delayed_work(devfreq_wq
, &devfreq
->work
,
399 msecs_to_jiffies(devfreq
->profile
->polling_ms
));
401 EXPORT_SYMBOL(devfreq_monitor_start
);
404 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
405 * @devfreq: the devfreq instance.
407 * Helper function to stop devfreq device load monitoing. Function
408 * to be called from governor in response to DEVFREQ_GOV_STOP
409 * event when device is removed from devfreq framework.
411 void devfreq_monitor_stop(struct devfreq
*devfreq
)
413 cancel_delayed_work_sync(&devfreq
->work
);
415 EXPORT_SYMBOL(devfreq_monitor_stop
);
418 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
419 * @devfreq: the devfreq instance.
421 * Helper function to suspend devfreq device load monitoing. Function
422 * to be called from governor in response to DEVFREQ_GOV_SUSPEND
423 * event or when polling interval is set to zero.
425 * Note: Though this function is same as devfreq_monitor_stop(),
426 * intentionally kept separate to provide hooks for collecting
427 * transition statistics.
429 void devfreq_monitor_suspend(struct devfreq
*devfreq
)
431 mutex_lock(&devfreq
->lock
);
432 if (devfreq
->stop_polling
) {
433 mutex_unlock(&devfreq
->lock
);
437 devfreq_update_status(devfreq
, devfreq
->previous_freq
);
438 devfreq
->stop_polling
= true;
439 mutex_unlock(&devfreq
->lock
);
440 cancel_delayed_work_sync(&devfreq
->work
);
442 EXPORT_SYMBOL(devfreq_monitor_suspend
);
445 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
446 * @devfreq: the devfreq instance.
448 * Helper function to resume devfreq device load monitoing. Function
449 * to be called from governor in response to DEVFREQ_GOV_RESUME
450 * event or when polling interval is set to non-zero.
452 void devfreq_monitor_resume(struct devfreq
*devfreq
)
456 mutex_lock(&devfreq
->lock
);
457 if (!devfreq
->stop_polling
)
460 if (!delayed_work_pending(&devfreq
->work
) &&
461 devfreq
->profile
->polling_ms
)
462 queue_delayed_work(devfreq_wq
, &devfreq
->work
,
463 msecs_to_jiffies(devfreq
->profile
->polling_ms
));
465 devfreq
->last_stat_updated
= jiffies
;
466 devfreq
->stop_polling
= false;
468 if (devfreq
->profile
->get_cur_freq
&&
469 !devfreq
->profile
->get_cur_freq(devfreq
->dev
.parent
, &freq
))
470 devfreq
->previous_freq
= freq
;
473 mutex_unlock(&devfreq
->lock
);
475 EXPORT_SYMBOL(devfreq_monitor_resume
);
478 * devfreq_interval_update() - Update device devfreq monitoring interval
479 * @devfreq: the devfreq instance.
480 * @delay: new polling interval to be set.
482 * Helper function to set new load monitoring polling interval. Function
483 * to be called from governor in response to DEVFREQ_GOV_INTERVAL event.
485 void devfreq_interval_update(struct devfreq
*devfreq
, unsigned int *delay
)
487 unsigned int cur_delay
= devfreq
->profile
->polling_ms
;
488 unsigned int new_delay
= *delay
;
490 mutex_lock(&devfreq
->lock
);
491 devfreq
->profile
->polling_ms
= new_delay
;
493 if (devfreq
->stop_polling
)
496 /* if new delay is zero, stop polling */
498 mutex_unlock(&devfreq
->lock
);
499 cancel_delayed_work_sync(&devfreq
->work
);
503 /* if current delay is zero, start polling with new delay */
505 queue_delayed_work(devfreq_wq
, &devfreq
->work
,
506 msecs_to_jiffies(devfreq
->profile
->polling_ms
));
510 /* if current delay is greater than new delay, restart polling */
511 if (cur_delay
> new_delay
) {
512 mutex_unlock(&devfreq
->lock
);
513 cancel_delayed_work_sync(&devfreq
->work
);
514 mutex_lock(&devfreq
->lock
);
515 if (!devfreq
->stop_polling
)
516 queue_delayed_work(devfreq_wq
, &devfreq
->work
,
517 msecs_to_jiffies(devfreq
->profile
->polling_ms
));
520 mutex_unlock(&devfreq
->lock
);
522 EXPORT_SYMBOL(devfreq_interval_update
);
525 * devfreq_notifier_call() - Notify that the device frequency requirements
526 * has been changed out of devfreq framework.
527 * @nb: the notifier_block (supposed to be devfreq->nb)
531 * Called by a notifier that uses devfreq->nb.
533 static int devfreq_notifier_call(struct notifier_block
*nb
, unsigned long type
,
536 struct devfreq
*devfreq
= container_of(nb
, struct devfreq
, nb
);
539 mutex_lock(&devfreq
->lock
);
541 devfreq
->scaling_min_freq
= find_available_min_freq(devfreq
);
542 if (!devfreq
->scaling_min_freq
) {
543 mutex_unlock(&devfreq
->lock
);
547 devfreq
->scaling_max_freq
= find_available_max_freq(devfreq
);
548 if (!devfreq
->scaling_max_freq
) {
549 mutex_unlock(&devfreq
->lock
);
553 ret
= update_devfreq(devfreq
);
554 mutex_unlock(&devfreq
->lock
);
560 * devfreq_dev_release() - Callback for struct device to release the device.
561 * @dev: the devfreq device
563 * Remove devfreq from the list and release its resources.
565 static void devfreq_dev_release(struct device
*dev
)
567 struct devfreq
*devfreq
= to_devfreq(dev
);
569 mutex_lock(&devfreq_list_lock
);
570 if (IS_ERR(find_device_devfreq(devfreq
->dev
.parent
))) {
571 mutex_unlock(&devfreq_list_lock
);
572 dev_warn(&devfreq
->dev
, "releasing devfreq which doesn't exist\n");
575 list_del(&devfreq
->node
);
576 mutex_unlock(&devfreq_list_lock
);
578 if (devfreq
->profile
->exit
)
579 devfreq
->profile
->exit(devfreq
->dev
.parent
);
581 mutex_destroy(&devfreq
->lock
);
586 * devfreq_add_device() - Add devfreq feature to the device
587 * @dev: the device to add devfreq feature.
588 * @profile: device-specific profile to run devfreq.
589 * @governor_name: name of the policy to choose frequency.
590 * @data: private data for the governor. The devfreq framework does not
593 struct devfreq
*devfreq_add_device(struct device
*dev
,
594 struct devfreq_dev_profile
*profile
,
595 const char *governor_name
,
598 struct devfreq
*devfreq
;
599 struct devfreq_governor
*governor
;
600 static atomic_t devfreq_no
= ATOMIC_INIT(-1);
603 if (!dev
|| !profile
|| !governor_name
) {
604 dev_err(dev
, "%s: Invalid parameters.\n", __func__
);
605 return ERR_PTR(-EINVAL
);
608 mutex_lock(&devfreq_list_lock
);
609 devfreq
= find_device_devfreq(dev
);
610 mutex_unlock(&devfreq_list_lock
);
611 if (!IS_ERR(devfreq
)) {
612 dev_err(dev
, "%s: Unable to create devfreq for the device.\n",
618 devfreq
= kzalloc(sizeof(struct devfreq
), GFP_KERNEL
);
624 mutex_init(&devfreq
->lock
);
625 mutex_lock(&devfreq
->lock
);
626 devfreq
->dev
.parent
= dev
;
627 devfreq
->dev
.class = devfreq_class
;
628 devfreq
->dev
.release
= devfreq_dev_release
;
629 devfreq
->profile
= profile
;
630 strncpy(devfreq
->governor_name
, governor_name
, DEVFREQ_NAME_LEN
);
631 devfreq
->previous_freq
= profile
->initial_freq
;
632 devfreq
->last_status
.current_frequency
= profile
->initial_freq
;
633 devfreq
->data
= data
;
634 devfreq
->nb
.notifier_call
= devfreq_notifier_call
;
636 if (!devfreq
->profile
->max_state
&& !devfreq
->profile
->freq_table
) {
637 mutex_unlock(&devfreq
->lock
);
638 err
= set_freq_table(devfreq
);
641 mutex_lock(&devfreq
->lock
);
644 devfreq
->scaling_min_freq
= find_available_min_freq(devfreq
);
645 if (!devfreq
->scaling_min_freq
) {
646 mutex_unlock(&devfreq
->lock
);
650 devfreq
->min_freq
= devfreq
->scaling_min_freq
;
652 devfreq
->scaling_max_freq
= find_available_max_freq(devfreq
);
653 if (!devfreq
->scaling_max_freq
) {
654 mutex_unlock(&devfreq
->lock
);
658 devfreq
->max_freq
= devfreq
->scaling_max_freq
;
660 dev_set_name(&devfreq
->dev
, "devfreq%d",
661 atomic_inc_return(&devfreq_no
));
662 err
= device_register(&devfreq
->dev
);
664 mutex_unlock(&devfreq
->lock
);
665 put_device(&devfreq
->dev
);
669 devfreq
->trans_table
=
670 devm_kzalloc(&devfreq
->dev
,
671 array3_size(sizeof(unsigned int),
672 devfreq
->profile
->max_state
,
673 devfreq
->profile
->max_state
),
675 devfreq
->time_in_state
= devm_kcalloc(&devfreq
->dev
,
676 devfreq
->profile
->max_state
,
677 sizeof(unsigned long),
679 devfreq
->last_stat_updated
= jiffies
;
681 srcu_init_notifier_head(&devfreq
->transition_notifier_list
);
683 mutex_unlock(&devfreq
->lock
);
685 mutex_lock(&devfreq_list_lock
);
687 governor
= try_then_request_governor(devfreq
->governor_name
);
688 if (IS_ERR(governor
)) {
689 dev_err(dev
, "%s: Unable to find governor for the device\n",
691 err
= PTR_ERR(governor
);
695 devfreq
->governor
= governor
;
696 err
= devfreq
->governor
->event_handler(devfreq
, DEVFREQ_GOV_START
,
699 dev_err(dev
, "%s: Unable to start governor for the device\n",
704 list_add(&devfreq
->node
, &devfreq_list
);
706 mutex_unlock(&devfreq_list_lock
);
711 mutex_unlock(&devfreq_list_lock
);
713 devfreq_remove_device(devfreq
);
720 EXPORT_SYMBOL(devfreq_add_device
);
723 * devfreq_remove_device() - Remove devfreq feature from a device.
724 * @devfreq: the devfreq instance to be removed
726 * The opposite of devfreq_add_device().
728 int devfreq_remove_device(struct devfreq
*devfreq
)
733 if (devfreq
->governor
)
734 devfreq
->governor
->event_handler(devfreq
,
735 DEVFREQ_GOV_STOP
, NULL
);
736 device_unregister(&devfreq
->dev
);
740 EXPORT_SYMBOL(devfreq_remove_device
);
742 static int devm_devfreq_dev_match(struct device
*dev
, void *res
, void *data
)
744 struct devfreq
**r
= res
;
746 if (WARN_ON(!r
|| !*r
))
752 static void devm_devfreq_dev_release(struct device
*dev
, void *res
)
754 devfreq_remove_device(*(struct devfreq
**)res
);
758 * devm_devfreq_add_device() - Resource-managed devfreq_add_device()
759 * @dev: the device to add devfreq feature.
760 * @profile: device-specific profile to run devfreq.
761 * @governor_name: name of the policy to choose frequency.
762 * @data: private data for the governor. The devfreq framework does not
765 * This function manages automatically the memory of devfreq device using device
766 * resource management and simplify the free operation for memory of devfreq
769 struct devfreq
*devm_devfreq_add_device(struct device
*dev
,
770 struct devfreq_dev_profile
*profile
,
771 const char *governor_name
,
774 struct devfreq
**ptr
, *devfreq
;
776 ptr
= devres_alloc(devm_devfreq_dev_release
, sizeof(*ptr
), GFP_KERNEL
);
778 return ERR_PTR(-ENOMEM
);
780 devfreq
= devfreq_add_device(dev
, profile
, governor_name
, data
);
781 if (IS_ERR(devfreq
)) {
787 devres_add(dev
, ptr
);
791 EXPORT_SYMBOL(devm_devfreq_add_device
);
795 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
796 * @dev - instance to the given device
797 * @index - index into list of devfreq
799 * return the instance of devfreq device
801 struct devfreq
*devfreq_get_devfreq_by_phandle(struct device
*dev
, int index
)
803 struct device_node
*node
;
804 struct devfreq
*devfreq
;
807 return ERR_PTR(-EINVAL
);
810 return ERR_PTR(-EINVAL
);
812 node
= of_parse_phandle(dev
->of_node
, "devfreq", index
);
814 return ERR_PTR(-ENODEV
);
816 mutex_lock(&devfreq_list_lock
);
817 list_for_each_entry(devfreq
, &devfreq_list
, node
) {
818 if (devfreq
->dev
.parent
819 && devfreq
->dev
.parent
->of_node
== node
) {
820 mutex_unlock(&devfreq_list_lock
);
825 mutex_unlock(&devfreq_list_lock
);
828 return ERR_PTR(-EPROBE_DEFER
);
831 struct devfreq
*devfreq_get_devfreq_by_phandle(struct device
*dev
, int index
)
833 return ERR_PTR(-ENODEV
);
835 #endif /* CONFIG_OF */
836 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle
);
839 * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
840 * @dev: the device to add devfreq feature.
841 * @devfreq: the devfreq instance to be removed
843 void devm_devfreq_remove_device(struct device
*dev
, struct devfreq
*devfreq
)
845 WARN_ON(devres_release(dev
, devm_devfreq_dev_release
,
846 devm_devfreq_dev_match
, devfreq
));
848 EXPORT_SYMBOL(devm_devfreq_remove_device
);
851 * devfreq_suspend_device() - Suspend devfreq of a device.
852 * @devfreq: the devfreq instance to be suspended
854 * This function is intended to be called by the pm callbacks
855 * (e.g., runtime_suspend, suspend) of the device driver that
858 int devfreq_suspend_device(struct devfreq
*devfreq
)
863 if (!devfreq
->governor
)
866 return devfreq
->governor
->event_handler(devfreq
,
867 DEVFREQ_GOV_SUSPEND
, NULL
);
869 EXPORT_SYMBOL(devfreq_suspend_device
);
872 * devfreq_resume_device() - Resume devfreq of a device.
873 * @devfreq: the devfreq instance to be resumed
875 * This function is intended to be called by the pm callbacks
876 * (e.g., runtime_resume, resume) of the device driver that
879 int devfreq_resume_device(struct devfreq
*devfreq
)
884 if (!devfreq
->governor
)
887 return devfreq
->governor
->event_handler(devfreq
,
888 DEVFREQ_GOV_RESUME
, NULL
);
890 EXPORT_SYMBOL(devfreq_resume_device
);
893 * devfreq_add_governor() - Add devfreq governor
894 * @governor: the devfreq governor to be added
896 int devfreq_add_governor(struct devfreq_governor
*governor
)
898 struct devfreq_governor
*g
;
899 struct devfreq
*devfreq
;
903 pr_err("%s: Invalid parameters.\n", __func__
);
907 mutex_lock(&devfreq_list_lock
);
908 g
= find_devfreq_governor(governor
->name
);
910 pr_err("%s: governor %s already registered\n", __func__
,
916 list_add(&governor
->node
, &devfreq_governor_list
);
918 list_for_each_entry(devfreq
, &devfreq_list
, node
) {
920 struct device
*dev
= devfreq
->dev
.parent
;
922 if (!strncmp(devfreq
->governor_name
, governor
->name
,
924 /* The following should never occur */
925 if (devfreq
->governor
) {
927 "%s: Governor %s already present\n",
928 __func__
, devfreq
->governor
->name
);
929 ret
= devfreq
->governor
->event_handler(devfreq
,
930 DEVFREQ_GOV_STOP
, NULL
);
933 "%s: Governor %s stop = %d\n",
935 devfreq
->governor
->name
, ret
);
939 devfreq
->governor
= governor
;
940 ret
= devfreq
->governor
->event_handler(devfreq
,
941 DEVFREQ_GOV_START
, NULL
);
943 dev_warn(dev
, "%s: Governor %s start=%d\n",
944 __func__
, devfreq
->governor
->name
,
951 mutex_unlock(&devfreq_list_lock
);
955 EXPORT_SYMBOL(devfreq_add_governor
);
958 * devfreq_remove_governor() - Remove devfreq feature from a device.
959 * @governor: the devfreq governor to be removed
961 int devfreq_remove_governor(struct devfreq_governor
*governor
)
963 struct devfreq_governor
*g
;
964 struct devfreq
*devfreq
;
968 pr_err("%s: Invalid parameters.\n", __func__
);
972 mutex_lock(&devfreq_list_lock
);
973 g
= find_devfreq_governor(governor
->name
);
975 pr_err("%s: governor %s not registered\n", __func__
,
980 list_for_each_entry(devfreq
, &devfreq_list
, node
) {
982 struct device
*dev
= devfreq
->dev
.parent
;
984 if (!strncmp(devfreq
->governor_name
, governor
->name
,
986 /* we should have a devfreq governor! */
987 if (!devfreq
->governor
) {
988 dev_warn(dev
, "%s: Governor %s NOT present\n",
989 __func__
, governor
->name
);
993 ret
= devfreq
->governor
->event_handler(devfreq
,
994 DEVFREQ_GOV_STOP
, NULL
);
996 dev_warn(dev
, "%s: Governor %s stop=%d\n",
997 __func__
, devfreq
->governor
->name
,
1000 devfreq
->governor
= NULL
;
1004 list_del(&governor
->node
);
1006 mutex_unlock(&devfreq_list_lock
);
1010 EXPORT_SYMBOL(devfreq_remove_governor
);
1012 static ssize_t
governor_show(struct device
*dev
,
1013 struct device_attribute
*attr
, char *buf
)
1015 if (!to_devfreq(dev
)->governor
)
1018 return sprintf(buf
, "%s\n", to_devfreq(dev
)->governor
->name
);
1021 static ssize_t
governor_store(struct device
*dev
, struct device_attribute
*attr
,
1022 const char *buf
, size_t count
)
1024 struct devfreq
*df
= to_devfreq(dev
);
1026 char str_governor
[DEVFREQ_NAME_LEN
+ 1];
1027 struct devfreq_governor
*governor
;
1029 ret
= sscanf(buf
, "%" __stringify(DEVFREQ_NAME_LEN
) "s", str_governor
);
1033 mutex_lock(&devfreq_list_lock
);
1034 governor
= try_then_request_governor(str_governor
);
1035 if (IS_ERR(governor
)) {
1036 ret
= PTR_ERR(governor
);
1039 if (df
->governor
== governor
) {
1042 } else if ((df
->governor
&& df
->governor
->immutable
) ||
1043 governor
->immutable
) {
1049 ret
= df
->governor
->event_handler(df
, DEVFREQ_GOV_STOP
, NULL
);
1051 dev_warn(dev
, "%s: Governor %s not stopped(%d)\n",
1052 __func__
, df
->governor
->name
, ret
);
1056 df
->governor
= governor
;
1057 strncpy(df
->governor_name
, governor
->name
, DEVFREQ_NAME_LEN
);
1058 ret
= df
->governor
->event_handler(df
, DEVFREQ_GOV_START
, NULL
);
1060 dev_warn(dev
, "%s: Governor %s not started(%d)\n",
1061 __func__
, df
->governor
->name
, ret
);
1063 mutex_unlock(&devfreq_list_lock
);
1069 static DEVICE_ATTR_RW(governor
);
1071 static ssize_t
available_governors_show(struct device
*d
,
1072 struct device_attribute
*attr
,
1075 struct devfreq
*df
= to_devfreq(d
);
1078 mutex_lock(&devfreq_list_lock
);
1081 * The devfreq with immutable governor (e.g., passive) shows
1082 * only own governor.
1084 if (df
->governor
->immutable
) {
1085 count
= scnprintf(&buf
[count
], DEVFREQ_NAME_LEN
,
1086 "%s ", df
->governor_name
);
1088 * The devfreq device shows the registered governor except for
1089 * immutable governors such as passive governor .
1092 struct devfreq_governor
*governor
;
1094 list_for_each_entry(governor
, &devfreq_governor_list
, node
) {
1095 if (governor
->immutable
)
1097 count
+= scnprintf(&buf
[count
], (PAGE_SIZE
- count
- 2),
1098 "%s ", governor
->name
);
1102 mutex_unlock(&devfreq_list_lock
);
1104 /* Truncate the trailing space */
1108 count
+= sprintf(&buf
[count
], "\n");
1112 static DEVICE_ATTR_RO(available_governors
);
1114 static ssize_t
cur_freq_show(struct device
*dev
, struct device_attribute
*attr
,
1118 struct devfreq
*devfreq
= to_devfreq(dev
);
1120 if (devfreq
->profile
->get_cur_freq
&&
1121 !devfreq
->profile
->get_cur_freq(devfreq
->dev
.parent
, &freq
))
1122 return sprintf(buf
, "%lu\n", freq
);
1124 return sprintf(buf
, "%lu\n", devfreq
->previous_freq
);
1126 static DEVICE_ATTR_RO(cur_freq
);
1128 static ssize_t
target_freq_show(struct device
*dev
,
1129 struct device_attribute
*attr
, char *buf
)
1131 return sprintf(buf
, "%lu\n", to_devfreq(dev
)->previous_freq
);
1133 static DEVICE_ATTR_RO(target_freq
);
1135 static ssize_t
polling_interval_show(struct device
*dev
,
1136 struct device_attribute
*attr
, char *buf
)
1138 return sprintf(buf
, "%d\n", to_devfreq(dev
)->profile
->polling_ms
);
1141 static ssize_t
polling_interval_store(struct device
*dev
,
1142 struct device_attribute
*attr
,
1143 const char *buf
, size_t count
)
1145 struct devfreq
*df
= to_devfreq(dev
);
1152 ret
= sscanf(buf
, "%u", &value
);
1156 df
->governor
->event_handler(df
, DEVFREQ_GOV_INTERVAL
, &value
);
1161 static DEVICE_ATTR_RW(polling_interval
);
1163 static ssize_t
min_freq_store(struct device
*dev
, struct device_attribute
*attr
,
1164 const char *buf
, size_t count
)
1166 struct devfreq
*df
= to_devfreq(dev
);
1167 unsigned long value
;
1170 ret
= sscanf(buf
, "%lu", &value
);
1174 mutex_lock(&df
->lock
);
1177 if (value
> df
->max_freq
) {
1182 unsigned long *freq_table
= df
->profile
->freq_table
;
1184 /* Get minimum frequency according to sorting order */
1185 if (freq_table
[0] < freq_table
[df
->profile
->max_state
- 1])
1186 value
= freq_table
[0];
1188 value
= freq_table
[df
->profile
->max_state
- 1];
1191 df
->min_freq
= value
;
1195 mutex_unlock(&df
->lock
);
1199 static ssize_t
min_freq_show(struct device
*dev
, struct device_attribute
*attr
,
1202 struct devfreq
*df
= to_devfreq(dev
);
1204 return sprintf(buf
, "%lu\n", max(df
->scaling_min_freq
, df
->min_freq
));
1207 static ssize_t
max_freq_store(struct device
*dev
, struct device_attribute
*attr
,
1208 const char *buf
, size_t count
)
1210 struct devfreq
*df
= to_devfreq(dev
);
1211 unsigned long value
;
1214 ret
= sscanf(buf
, "%lu", &value
);
1218 mutex_lock(&df
->lock
);
1221 if (value
< df
->min_freq
) {
1226 unsigned long *freq_table
= df
->profile
->freq_table
;
1228 /* Get maximum frequency according to sorting order */
1229 if (freq_table
[0] < freq_table
[df
->profile
->max_state
- 1])
1230 value
= freq_table
[df
->profile
->max_state
- 1];
1232 value
= freq_table
[0];
1235 df
->max_freq
= value
;
1239 mutex_unlock(&df
->lock
);
1242 static DEVICE_ATTR_RW(min_freq
);
1244 static ssize_t
max_freq_show(struct device
*dev
, struct device_attribute
*attr
,
1247 struct devfreq
*df
= to_devfreq(dev
);
1249 return sprintf(buf
, "%lu\n", min(df
->scaling_max_freq
, df
->max_freq
));
1251 static DEVICE_ATTR_RW(max_freq
);
1253 static ssize_t
available_frequencies_show(struct device
*d
,
1254 struct device_attribute
*attr
,
1257 struct devfreq
*df
= to_devfreq(d
);
1261 mutex_lock(&df
->lock
);
1263 for (i
= 0; i
< df
->profile
->max_state
; i
++)
1264 count
+= scnprintf(&buf
[count
], (PAGE_SIZE
- count
- 2),
1265 "%lu ", df
->profile
->freq_table
[i
]);
1267 mutex_unlock(&df
->lock
);
1268 /* Truncate the trailing space */
1272 count
+= sprintf(&buf
[count
], "\n");
1276 static DEVICE_ATTR_RO(available_frequencies
);
1278 static ssize_t
trans_stat_show(struct device
*dev
,
1279 struct device_attribute
*attr
, char *buf
)
1281 struct devfreq
*devfreq
= to_devfreq(dev
);
1284 unsigned int max_state
= devfreq
->profile
->max_state
;
1286 if (!devfreq
->stop_polling
&&
1287 devfreq_update_status(devfreq
, devfreq
->previous_freq
))
1290 return sprintf(buf
, "Not Supported.\n");
1292 len
= sprintf(buf
, " From : To\n");
1293 len
+= sprintf(buf
+ len
, " :");
1294 for (i
= 0; i
< max_state
; i
++)
1295 len
+= sprintf(buf
+ len
, "%10lu",
1296 devfreq
->profile
->freq_table
[i
]);
1298 len
+= sprintf(buf
+ len
, " time(ms)\n");
1300 for (i
= 0; i
< max_state
; i
++) {
1301 if (devfreq
->profile
->freq_table
[i
]
1302 == devfreq
->previous_freq
) {
1303 len
+= sprintf(buf
+ len
, "*");
1305 len
+= sprintf(buf
+ len
, " ");
1307 len
+= sprintf(buf
+ len
, "%10lu:",
1308 devfreq
->profile
->freq_table
[i
]);
1309 for (j
= 0; j
< max_state
; j
++)
1310 len
+= sprintf(buf
+ len
, "%10u",
1311 devfreq
->trans_table
[(i
* max_state
) + j
]);
1312 len
+= sprintf(buf
+ len
, "%10u\n",
1313 jiffies_to_msecs(devfreq
->time_in_state
[i
]));
1316 len
+= sprintf(buf
+ len
, "Total transition : %u\n",
1317 devfreq
->total_trans
);
1320 static DEVICE_ATTR_RO(trans_stat
);
1322 static struct attribute
*devfreq_attrs
[] = {
1323 &dev_attr_governor
.attr
,
1324 &dev_attr_available_governors
.attr
,
1325 &dev_attr_cur_freq
.attr
,
1326 &dev_attr_available_frequencies
.attr
,
1327 &dev_attr_target_freq
.attr
,
1328 &dev_attr_polling_interval
.attr
,
1329 &dev_attr_min_freq
.attr
,
1330 &dev_attr_max_freq
.attr
,
1331 &dev_attr_trans_stat
.attr
,
1334 ATTRIBUTE_GROUPS(devfreq
);
1336 static int __init
devfreq_init(void)
1338 devfreq_class
= class_create(THIS_MODULE
, "devfreq");
1339 if (IS_ERR(devfreq_class
)) {
1340 pr_err("%s: couldn't create class\n", __FILE__
);
1341 return PTR_ERR(devfreq_class
);
1344 devfreq_wq
= create_freezable_workqueue("devfreq_wq");
1346 class_destroy(devfreq_class
);
1347 pr_err("%s: couldn't create workqueue\n", __FILE__
);
1350 devfreq_class
->dev_groups
= devfreq_groups
;
1354 subsys_initcall(devfreq_init
);
1357 * The following are helper functions for devfreq user device drivers with
1362 * devfreq_recommended_opp() - Helper function to get proper OPP for the
1363 * freq value given to target callback.
1364 * @dev: The devfreq user device. (parent of devfreq)
1365 * @freq: The frequency given to target function
1366 * @flags: Flags handed from devfreq framework.
1368 * The callers are required to call dev_pm_opp_put() for the returned OPP after
1371 struct dev_pm_opp
*devfreq_recommended_opp(struct device
*dev
,
1372 unsigned long *freq
,
1375 struct dev_pm_opp
*opp
;
1377 if (flags
& DEVFREQ_FLAG_LEAST_UPPER_BOUND
) {
1378 /* The freq is an upper bound. opp should be lower */
1379 opp
= dev_pm_opp_find_freq_floor(dev
, freq
);
1381 /* If not available, use the closest opp */
1382 if (opp
== ERR_PTR(-ERANGE
))
1383 opp
= dev_pm_opp_find_freq_ceil(dev
, freq
);
1385 /* The freq is an lower bound. opp should be higher */
1386 opp
= dev_pm_opp_find_freq_ceil(dev
, freq
);
1388 /* If not available, use the closest opp */
1389 if (opp
== ERR_PTR(-ERANGE
))
1390 opp
= dev_pm_opp_find_freq_floor(dev
, freq
);
1395 EXPORT_SYMBOL(devfreq_recommended_opp
);
1398 * devfreq_register_opp_notifier() - Helper function to get devfreq notified
1399 * for any changes in the OPP availability
1401 * @dev: The devfreq user device. (parent of devfreq)
1402 * @devfreq: The devfreq object.
1404 int devfreq_register_opp_notifier(struct device
*dev
, struct devfreq
*devfreq
)
1406 return dev_pm_opp_register_notifier(dev
, &devfreq
->nb
);
1408 EXPORT_SYMBOL(devfreq_register_opp_notifier
);
1411 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
1412 * notified for any changes in the OPP
1413 * availability changes anymore.
1414 * @dev: The devfreq user device. (parent of devfreq)
1415 * @devfreq: The devfreq object.
1417 * At exit() callback of devfreq_dev_profile, this must be included if
1418 * devfreq_recommended_opp is used.
1420 int devfreq_unregister_opp_notifier(struct device
*dev
, struct devfreq
*devfreq
)
1422 return dev_pm_opp_unregister_notifier(dev
, &devfreq
->nb
);
1424 EXPORT_SYMBOL(devfreq_unregister_opp_notifier
);
1426 static void devm_devfreq_opp_release(struct device
*dev
, void *res
)
1428 devfreq_unregister_opp_notifier(dev
, *(struct devfreq
**)res
);
1432 * devm_ devfreq_register_opp_notifier()
1433 * - Resource-managed devfreq_register_opp_notifier()
1434 * @dev: The devfreq user device. (parent of devfreq)
1435 * @devfreq: The devfreq object.
1437 int devm_devfreq_register_opp_notifier(struct device
*dev
,
1438 struct devfreq
*devfreq
)
1440 struct devfreq
**ptr
;
1443 ptr
= devres_alloc(devm_devfreq_opp_release
, sizeof(*ptr
), GFP_KERNEL
);
1447 ret
= devfreq_register_opp_notifier(dev
, devfreq
);
1454 devres_add(dev
, ptr
);
1458 EXPORT_SYMBOL(devm_devfreq_register_opp_notifier
);
1461 * devm_devfreq_unregister_opp_notifier()
1462 * - Resource-managed devfreq_unregister_opp_notifier()
1463 * @dev: The devfreq user device. (parent of devfreq)
1464 * @devfreq: The devfreq object.
1466 void devm_devfreq_unregister_opp_notifier(struct device
*dev
,
1467 struct devfreq
*devfreq
)
1469 WARN_ON(devres_release(dev
, devm_devfreq_opp_release
,
1470 devm_devfreq_dev_match
, devfreq
));
1472 EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier
);
1475 * devfreq_register_notifier() - Register a driver with devfreq
1476 * @devfreq: The devfreq object.
1477 * @nb: The notifier block to register.
1478 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1480 int devfreq_register_notifier(struct devfreq
*devfreq
,
1481 struct notifier_block
*nb
,
1490 case DEVFREQ_TRANSITION_NOTIFIER
:
1491 ret
= srcu_notifier_chain_register(
1492 &devfreq
->transition_notifier_list
, nb
);
1500 EXPORT_SYMBOL(devfreq_register_notifier
);
1503 * devfreq_unregister_notifier() - Unregister a driver with devfreq
1504 * @devfreq: The devfreq object.
1505 * @nb: The notifier block to be unregistered.
1506 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1508 int devfreq_unregister_notifier(struct devfreq
*devfreq
,
1509 struct notifier_block
*nb
,
1518 case DEVFREQ_TRANSITION_NOTIFIER
:
1519 ret
= srcu_notifier_chain_unregister(
1520 &devfreq
->transition_notifier_list
, nb
);
1528 EXPORT_SYMBOL(devfreq_unregister_notifier
);
1530 struct devfreq_notifier_devres
{
1531 struct devfreq
*devfreq
;
1532 struct notifier_block
*nb
;
1536 static void devm_devfreq_notifier_release(struct device
*dev
, void *res
)
1538 struct devfreq_notifier_devres
*this = res
;
1540 devfreq_unregister_notifier(this->devfreq
, this->nb
, this->list
);
1544 * devm_devfreq_register_notifier()
1545 - Resource-managed devfreq_register_notifier()
1546 * @dev: The devfreq user device. (parent of devfreq)
1547 * @devfreq: The devfreq object.
1548 * @nb: The notifier block to be unregistered.
1549 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1551 int devm_devfreq_register_notifier(struct device
*dev
,
1552 struct devfreq
*devfreq
,
1553 struct notifier_block
*nb
,
1556 struct devfreq_notifier_devres
*ptr
;
1559 ptr
= devres_alloc(devm_devfreq_notifier_release
, sizeof(*ptr
),
1564 ret
= devfreq_register_notifier(devfreq
, nb
, list
);
1570 ptr
->devfreq
= devfreq
;
1573 devres_add(dev
, ptr
);
1577 EXPORT_SYMBOL(devm_devfreq_register_notifier
);
1580 * devm_devfreq_unregister_notifier()
1581 - Resource-managed devfreq_unregister_notifier()
1582 * @dev: The devfreq user device. (parent of devfreq)
1583 * @devfreq: The devfreq object.
1584 * @nb: The notifier block to be unregistered.
1585 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1587 void devm_devfreq_unregister_notifier(struct device
*dev
,
1588 struct devfreq
*devfreq
,
1589 struct notifier_block
*nb
,
1592 WARN_ON(devres_release(dev
, devm_devfreq_notifier_release
,
1593 devm_devfreq_dev_match
, devfreq
));
1595 EXPORT_SYMBOL(devm_devfreq_unregister_notifier
);