• Home
  • Raw
  • Download

Lines Matching full:devfreq

2  * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
23 #include <linux/devfreq.h>
38 * devfreq core provides delayed work based load monitoring helper
44 /* The list of all device-devfreq governors */
46 /* The list of all device-devfreq */
51 * find_device_devfreq() - find devfreq struct using device pointer
52 * @dev: device pointer used to lookup device devfreq.
55 * devfreq info. devfreq_list_lock should be held by the caller.
57 static struct devfreq *find_device_devfreq(struct device *dev) in find_device_devfreq()
59 struct devfreq *tmp_devfreq; in find_device_devfreq()
62 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); in find_device_devfreq()
76 static unsigned long find_available_min_freq(struct devfreq *devfreq) in find_available_min_freq() argument
81 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq); in find_available_min_freq()
90 static unsigned long find_available_max_freq(struct devfreq *devfreq) in find_available_max_freq() argument
95 opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq); in find_available_max_freq()
106 * @devfreq: the devfreq instance
109 static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq) in devfreq_get_freq_level() argument
113 for (lev = 0; lev < devfreq->profile->max_state; lev++) in devfreq_get_freq_level()
114 if (freq == devfreq->profile->freq_table[lev]) in devfreq_get_freq_level()
120 static int set_freq_table(struct devfreq *devfreq) in set_freq_table() argument
122 struct devfreq_dev_profile *profile = devfreq->profile; in set_freq_table()
128 count = dev_pm_opp_get_opp_count(devfreq->dev.parent); in set_freq_table()
133 profile->freq_table = devm_kcalloc(devfreq->dev.parent, in set_freq_table()
143 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq); in set_freq_table()
145 devm_kfree(devfreq->dev.parent, profile->freq_table); in set_freq_table()
157 * devfreq_update_status() - Update statistics of devfreq behavior
158 * @devfreq: the devfreq instance
161 int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) in devfreq_update_status() argument
166 lockdep_assert_held(&devfreq->lock); in devfreq_update_status()
170 if (!devfreq->previous_freq) in devfreq_update_status()
173 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq); in devfreq_update_status()
179 devfreq->time_in_state[prev_lev] += in devfreq_update_status()
180 cur_time - devfreq->last_stat_updated; in devfreq_update_status()
182 lev = devfreq_get_freq_level(devfreq, freq); in devfreq_update_status()
189 devfreq->trans_table[(prev_lev * in devfreq_update_status()
190 devfreq->profile->max_state) + lev]++; in devfreq_update_status()
191 devfreq->total_trans++; in devfreq_update_status()
195 devfreq->last_stat_updated = cur_time; in devfreq_update_status()
201 * find_devfreq_governor() - find devfreq governor from name
204 * Search the list of devfreq governors and return the matched
212 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); in find_devfreq_governor()
231 * Search the list of devfreq governors and request the module and try again
243 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); in try_then_request_governor()
269 static int devfreq_notify_transition(struct devfreq *devfreq, in devfreq_notify_transition() argument
272 if (!devfreq) in devfreq_notify_transition()
277 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
282 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
296 * @devfreq: the devfreq instance.
298 * Note: Lock devfreq->lock before calling update_devfreq
301 int update_devfreq(struct devfreq *devfreq) in update_devfreq() argument
308 if (!mutex_is_locked(&devfreq->lock)) { in update_devfreq()
309 WARN(true, "devfreq->lock must be locked by the caller.\n"); in update_devfreq()
313 if (!devfreq->governor) in update_devfreq()
317 err = devfreq->governor->get_target_freq(devfreq, &freq); in update_devfreq()
328 max_freq = MIN(devfreq->scaling_max_freq, devfreq->max_freq); in update_devfreq()
329 min_freq = MAX(devfreq->scaling_min_freq, devfreq->min_freq); in update_devfreq()
340 if (devfreq->profile->get_cur_freq) in update_devfreq()
341 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq); in update_devfreq()
343 cur_freq = devfreq->previous_freq; in update_devfreq()
347 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE); in update_devfreq()
349 err = devfreq->profile->target(devfreq->dev.parent, &freq, flags); in update_devfreq()
352 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in update_devfreq()
357 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in update_devfreq()
359 if (devfreq_update_status(devfreq, freq)) in update_devfreq()
360 dev_err(&devfreq->dev, in update_devfreq()
363 devfreq->previous_freq = freq; in update_devfreq()
369 * devfreq_monitor() - Periodically poll devfreq objects.
376 struct devfreq *devfreq = container_of(work, in devfreq_monitor() local
377 struct devfreq, work.work); in devfreq_monitor()
379 mutex_lock(&devfreq->lock); in devfreq_monitor()
380 err = update_devfreq(devfreq); in devfreq_monitor()
382 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err); in devfreq_monitor()
384 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor()
385 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor()
386 mutex_unlock(&devfreq->lock); in devfreq_monitor()
390 * devfreq_monitor_start() - Start load monitoring of devfreq instance
391 * @devfreq: the devfreq instance.
393 * Helper function for starting devfreq device load monitoing. By
396 * event when device is added to devfreq framework.
398 void devfreq_monitor_start(struct devfreq *devfreq) in devfreq_monitor_start() argument
400 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); in devfreq_monitor_start()
401 if (devfreq->profile->polling_ms) in devfreq_monitor_start()
402 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_start()
403 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_start()
408 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
409 * @devfreq: the devfreq instance.
411 * Helper function to stop devfreq device load monitoing. Function
413 * event when device is removed from devfreq framework.
415 void devfreq_monitor_stop(struct devfreq *devfreq) in devfreq_monitor_stop() argument
417 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_stop()
422 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
423 * @devfreq: the devfreq instance.
425 * Helper function to suspend devfreq device load monitoing. Function
433 void devfreq_monitor_suspend(struct devfreq *devfreq) in devfreq_monitor_suspend() argument
435 mutex_lock(&devfreq->lock); in devfreq_monitor_suspend()
436 if (devfreq->stop_polling) { in devfreq_monitor_suspend()
437 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
441 devfreq_update_status(devfreq, devfreq->previous_freq); in devfreq_monitor_suspend()
442 devfreq->stop_polling = true; in devfreq_monitor_suspend()
443 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
444 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_suspend()
449 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
450 * @devfreq: the devfreq instance.
452 * Helper function to resume devfreq device load monitoing. Function
456 void devfreq_monitor_resume(struct devfreq *devfreq) in devfreq_monitor_resume() argument
460 mutex_lock(&devfreq->lock); in devfreq_monitor_resume()
461 if (!devfreq->stop_polling) in devfreq_monitor_resume()
464 if (!delayed_work_pending(&devfreq->work) && in devfreq_monitor_resume()
465 devfreq->profile->polling_ms) in devfreq_monitor_resume()
466 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_resume()
467 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_resume()
469 devfreq->last_stat_updated = jiffies; in devfreq_monitor_resume()
470 devfreq->stop_polling = false; in devfreq_monitor_resume()
472 if (devfreq->profile->get_cur_freq && in devfreq_monitor_resume()
473 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) in devfreq_monitor_resume()
474 devfreq->previous_freq = freq; in devfreq_monitor_resume()
477 mutex_unlock(&devfreq->lock); in devfreq_monitor_resume()
482 * devfreq_interval_update() - Update device devfreq monitoring interval
483 * @devfreq: the devfreq instance.
489 void devfreq_interval_update(struct devfreq *devfreq, unsigned int *delay) in devfreq_interval_update() argument
491 unsigned int cur_delay = devfreq->profile->polling_ms; in devfreq_interval_update()
494 mutex_lock(&devfreq->lock); in devfreq_interval_update()
495 devfreq->profile->polling_ms = new_delay; in devfreq_interval_update()
497 if (devfreq->stop_polling) in devfreq_interval_update()
502 mutex_unlock(&devfreq->lock); in devfreq_interval_update()
503 cancel_delayed_work_sync(&devfreq->work); in devfreq_interval_update()
509 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_interval_update()
510 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_interval_update()
516 mutex_unlock(&devfreq->lock); in devfreq_interval_update()
517 cancel_delayed_work_sync(&devfreq->work); in devfreq_interval_update()
518 mutex_lock(&devfreq->lock); in devfreq_interval_update()
519 if (!devfreq->stop_polling) in devfreq_interval_update()
520 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_interval_update()
521 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_interval_update()
524 mutex_unlock(&devfreq->lock); in devfreq_interval_update()
530 * has been changed out of devfreq framework.
531 * @nb: the notifier_block (supposed to be devfreq->nb)
535 * Called by a notifier that uses devfreq->nb.
540 struct devfreq *devfreq = container_of(nb, struct devfreq, nb); in devfreq_notifier_call() local
543 mutex_lock(&devfreq->lock); in devfreq_notifier_call()
545 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_notifier_call()
546 if (!devfreq->scaling_min_freq) in devfreq_notifier_call()
549 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_notifier_call()
550 if (!devfreq->scaling_max_freq) { in devfreq_notifier_call()
551 devfreq->scaling_max_freq = ULONG_MAX; in devfreq_notifier_call()
555 err = update_devfreq(devfreq); in devfreq_notifier_call()
558 mutex_unlock(&devfreq->lock); in devfreq_notifier_call()
560 dev_err(devfreq->dev.parent, in devfreq_notifier_call()
569 * @dev: the devfreq device
571 * Remove devfreq from the list and release its resources.
575 struct devfreq *devfreq = to_devfreq(dev); in devfreq_dev_release() local
578 list_del(&devfreq->node); in devfreq_dev_release()
581 if (devfreq->profile->exit) in devfreq_dev_release()
582 devfreq->profile->exit(devfreq->dev.parent); in devfreq_dev_release()
584 mutex_destroy(&devfreq->lock); in devfreq_dev_release()
585 kfree(devfreq); in devfreq_dev_release()
589 * devfreq_add_device() - Add devfreq feature to the device
590 * @dev: the device to add devfreq feature.
591 * @profile: device-specific profile to run devfreq.
593 * @data: private data for the governor. The devfreq framework does not
596 struct devfreq *devfreq_add_device(struct device *dev, in devfreq_add_device()
601 struct devfreq *devfreq; in devfreq_add_device() local
611 devfreq = find_device_devfreq(dev); in devfreq_add_device()
613 if (!IS_ERR(devfreq)) { in devfreq_add_device()
614 dev_err(dev, "%s: Unable to create devfreq for the device.\n", in devfreq_add_device()
620 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL); in devfreq_add_device()
621 if (!devfreq) { in devfreq_add_device()
626 mutex_init(&devfreq->lock); in devfreq_add_device()
627 mutex_lock(&devfreq->lock); in devfreq_add_device()
628 devfreq->dev.parent = dev; in devfreq_add_device()
629 devfreq->dev.class = devfreq_class; in devfreq_add_device()
630 devfreq->dev.release = devfreq_dev_release; in devfreq_add_device()
631 INIT_LIST_HEAD(&devfreq->node); in devfreq_add_device()
632 devfreq->profile = profile; in devfreq_add_device()
633 strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN); in devfreq_add_device()
634 devfreq->previous_freq = profile->initial_freq; in devfreq_add_device()
635 devfreq->last_status.current_frequency = profile->initial_freq; in devfreq_add_device()
636 devfreq->data = data; in devfreq_add_device()
637 devfreq->nb.notifier_call = devfreq_notifier_call; in devfreq_add_device()
639 if (!devfreq->profile->max_state && !devfreq->profile->freq_table) { in devfreq_add_device()
640 mutex_unlock(&devfreq->lock); in devfreq_add_device()
641 err = set_freq_table(devfreq); in devfreq_add_device()
644 mutex_lock(&devfreq->lock); in devfreq_add_device()
647 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_add_device()
648 if (!devfreq->scaling_min_freq) { in devfreq_add_device()
649 mutex_unlock(&devfreq->lock); in devfreq_add_device()
653 devfreq->min_freq = devfreq->scaling_min_freq; in devfreq_add_device()
655 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_add_device()
656 if (!devfreq->scaling_max_freq) { in devfreq_add_device()
657 mutex_unlock(&devfreq->lock); in devfreq_add_device()
661 devfreq->max_freq = devfreq->scaling_max_freq; in devfreq_add_device()
663 dev_set_name(&devfreq->dev, "%s", dev_name(dev)); in devfreq_add_device()
664 err = device_register(&devfreq->dev); in devfreq_add_device()
666 mutex_unlock(&devfreq->lock); in devfreq_add_device()
667 put_device(&devfreq->dev); in devfreq_add_device()
671 devfreq->trans_table = in devfreq_add_device()
672 devm_kzalloc(&devfreq->dev, in devfreq_add_device()
674 devfreq->profile->max_state, in devfreq_add_device()
675 devfreq->profile->max_state), in devfreq_add_device()
677 devfreq->time_in_state = devm_kcalloc(&devfreq->dev, in devfreq_add_device()
678 devfreq->profile->max_state, in devfreq_add_device()
681 devfreq->last_stat_updated = jiffies; in devfreq_add_device()
683 srcu_init_notifier_head(&devfreq->transition_notifier_list); in devfreq_add_device()
685 mutex_unlock(&devfreq->lock); in devfreq_add_device()
689 governor = try_then_request_governor(devfreq->governor_name); in devfreq_add_device()
697 devfreq->governor = governor; in devfreq_add_device()
698 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, in devfreq_add_device()
706 list_add(&devfreq->node, &devfreq_list); in devfreq_add_device()
710 return devfreq; in devfreq_add_device()
715 devfreq_remove_device(devfreq); in devfreq_add_device()
716 devfreq = NULL; in devfreq_add_device()
718 if (devfreq) in devfreq_add_device()
719 kfree(devfreq); in devfreq_add_device()
726 * devfreq_remove_device() - Remove devfreq feature from a device.
727 * @devfreq: the devfreq instance to be removed
731 int devfreq_remove_device(struct devfreq *devfreq) in devfreq_remove_device() argument
733 if (!devfreq) in devfreq_remove_device()
736 if (devfreq->governor) in devfreq_remove_device()
737 devfreq->governor->event_handler(devfreq, in devfreq_remove_device()
739 device_unregister(&devfreq->dev); in devfreq_remove_device()
747 struct devfreq **r = res; in devm_devfreq_dev_match()
757 devfreq_remove_device(*(struct devfreq **)res); in devm_devfreq_dev_release()
762 * @dev: the device to add devfreq feature.
763 * @profile: device-specific profile to run devfreq.
765 * @data: private data for the governor. The devfreq framework does not
768 * This function manages automatically the memory of devfreq device using device
769 * resource management and simplify the free operation for memory of devfreq
772 struct devfreq *devm_devfreq_add_device(struct device *dev, in devm_devfreq_add_device()
777 struct devfreq **ptr, *devfreq; in devm_devfreq_add_device() local
783 devfreq = devfreq_add_device(dev, profile, governor_name, data); in devm_devfreq_add_device()
784 if (IS_ERR(devfreq)) { in devm_devfreq_add_device()
786 return devfreq; in devm_devfreq_add_device()
789 *ptr = devfreq; in devm_devfreq_add_device()
792 return devfreq; in devm_devfreq_add_device()
798 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
800 * @index - index into list of devfreq
802 * return the instance of devfreq device
804 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index) in devfreq_get_devfreq_by_phandle()
807 struct devfreq *devfreq; in devfreq_get_devfreq_by_phandle() local
815 node = of_parse_phandle(dev->of_node, "devfreq", index); in devfreq_get_devfreq_by_phandle()
820 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_get_devfreq_by_phandle()
821 if (devfreq->dev.parent in devfreq_get_devfreq_by_phandle()
822 && devfreq->dev.parent->of_node == node) { in devfreq_get_devfreq_by_phandle()
825 return devfreq; in devfreq_get_devfreq_by_phandle()
834 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index) in devfreq_get_devfreq_by_phandle()
843 * @dev: the device to add devfreq feature.
844 * @devfreq: the devfreq instance to be removed
846 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq) in devm_devfreq_remove_device() argument
849 devm_devfreq_dev_match, devfreq)); in devm_devfreq_remove_device()
854 * devfreq_suspend_device() - Suspend devfreq of a device.
855 * @devfreq: the devfreq instance to be suspended
859 * holds the devfreq.
861 int devfreq_suspend_device(struct devfreq *devfreq) in devfreq_suspend_device() argument
863 if (!devfreq) in devfreq_suspend_device()
866 if (!devfreq->governor) in devfreq_suspend_device()
869 return devfreq->governor->event_handler(devfreq, in devfreq_suspend_device()
875 * devfreq_resume_device() - Resume devfreq of a device.
876 * @devfreq: the devfreq instance to be resumed
880 * holds the devfreq.
882 int devfreq_resume_device(struct devfreq *devfreq) in devfreq_resume_device() argument
884 if (!devfreq) in devfreq_resume_device()
887 if (!devfreq->governor) in devfreq_resume_device()
890 return devfreq->governor->event_handler(devfreq, in devfreq_resume_device()
896 * devfreq_add_governor() - Add devfreq governor
897 * @governor: the devfreq governor to be added
902 struct devfreq *devfreq; in devfreq_add_governor() local
921 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_add_governor()
923 struct device *dev = devfreq->dev.parent; in devfreq_add_governor()
925 if (!strncmp(devfreq->governor_name, governor->name, in devfreq_add_governor()
928 if (devfreq->governor) { in devfreq_add_governor()
931 __func__, devfreq->governor->name); in devfreq_add_governor()
932 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
938 devfreq->governor->name, ret); in devfreq_add_governor()
942 devfreq->governor = governor; in devfreq_add_governor()
943 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
947 __func__, devfreq->governor->name, in devfreq_add_governor()
961 * devfreq_remove_governor() - Remove devfreq feature from a device.
962 * @governor: the devfreq governor to be removed
967 struct devfreq *devfreq; in devfreq_remove_governor() local
983 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_remove_governor()
985 struct device *dev = devfreq->dev.parent; in devfreq_remove_governor()
987 if (!strncmp(devfreq->governor_name, governor->name, in devfreq_remove_governor()
989 /* we should have a devfreq governor! */ in devfreq_remove_governor()
990 if (!devfreq->governor) { in devfreq_remove_governor()
996 ret = devfreq->governor->event_handler(devfreq, in devfreq_remove_governor()
1000 __func__, devfreq->governor->name, in devfreq_remove_governor()
1003 devfreq->governor = NULL; in devfreq_remove_governor()
1018 struct devfreq *devfreq = to_devfreq(dev); in name_show() local
1019 return sprintf(buf, "%s\n", dev_name(devfreq->dev.parent)); in name_show()
1035 struct devfreq *df = to_devfreq(dev); in governor_store()
1086 struct devfreq *df = to_devfreq(d); in available_governors_show()
1092 * The devfreq with immutable governor (e.g., passive) shows in available_governors_show()
1099 * The devfreq device shows the registered governor except for in available_governors_show()
1129 struct devfreq *devfreq = to_devfreq(dev); in cur_freq_show() local
1131 if (devfreq->profile->get_cur_freq && in cur_freq_show()
1132 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) in cur_freq_show()
1135 return sprintf(buf, "%lu\n", devfreq->previous_freq); in cur_freq_show()
1156 struct devfreq *df = to_devfreq(dev); in polling_interval_store()
1177 struct devfreq *df = to_devfreq(dev); in min_freq_store()
1213 struct devfreq *df = to_devfreq(dev); in min_freq_show()
1221 struct devfreq *df = to_devfreq(dev); in max_freq_store()
1258 struct devfreq *df = to_devfreq(dev); in max_freq_show()
1268 struct devfreq *df = to_devfreq(d); in available_frequencies_show()
1292 struct devfreq *devfreq = to_devfreq(dev); in trans_stat_show() local
1295 unsigned int max_state = devfreq->profile->max_state; in trans_stat_show()
1300 mutex_lock(&devfreq->lock); in trans_stat_show()
1301 if (!devfreq->stop_polling && in trans_stat_show()
1302 devfreq_update_status(devfreq, devfreq->previous_freq)) { in trans_stat_show()
1303 mutex_unlock(&devfreq->lock); in trans_stat_show()
1306 mutex_unlock(&devfreq->lock); in trans_stat_show()
1312 devfreq->profile->freq_table[i]); in trans_stat_show()
1317 if (devfreq->profile->freq_table[i] in trans_stat_show()
1318 == devfreq->previous_freq) { in trans_stat_show()
1324 devfreq->profile->freq_table[i]); in trans_stat_show()
1327 devfreq->trans_table[(i * max_state) + j]); in trans_stat_show()
1329 jiffies_to_msecs(devfreq->time_in_state[i])); in trans_stat_show()
1333 devfreq->total_trans); in trans_stat_show()
1351 ATTRIBUTE_GROUPS(devfreq);
1355 devfreq_class = class_create(THIS_MODULE, "devfreq"); in devfreq_init()
1374 * The following are helper functions for devfreq user device drivers with
1381 * @dev: The devfreq user device. (parent of devfreq)
1383 * @flags: Flags handed from devfreq framework.
1415 * devfreq_register_opp_notifier() - Helper function to get devfreq notified
1418 * @dev: The devfreq user device. (parent of devfreq)
1419 * @devfreq: The devfreq object.
1421 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_register_opp_notifier() argument
1423 return dev_pm_opp_register_notifier(dev, &devfreq->nb); in devfreq_register_opp_notifier()
1428 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
1431 * @dev: The devfreq user device. (parent of devfreq)
1432 * @devfreq: The devfreq object.
1437 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_unregister_opp_notifier() argument
1439 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb); in devfreq_unregister_opp_notifier()
1445 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); in devm_devfreq_opp_release()
1451 * @dev: The devfreq user device. (parent of devfreq)
1452 * @devfreq: The devfreq object.
1455 struct devfreq *devfreq) in devm_devfreq_register_opp_notifier() argument
1457 struct devfreq **ptr; in devm_devfreq_register_opp_notifier()
1464 ret = devfreq_register_opp_notifier(dev, devfreq); in devm_devfreq_register_opp_notifier()
1470 *ptr = devfreq; in devm_devfreq_register_opp_notifier()
1480 * @dev: The devfreq user device. (parent of devfreq)
1481 * @devfreq: The devfreq object.
1484 struct devfreq *devfreq) in devm_devfreq_unregister_opp_notifier() argument
1487 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_opp_notifier()
1492 * devfreq_register_notifier() - Register a driver with devfreq
1493 * @devfreq: The devfreq object.
1497 int devfreq_register_notifier(struct devfreq *devfreq, in devfreq_register_notifier() argument
1503 if (!devfreq) in devfreq_register_notifier()
1509 &devfreq->transition_notifier_list, nb); in devfreq_register_notifier()
1520 * devfreq_unregister_notifier() - Unregister a driver with devfreq
1521 * @devfreq: The devfreq object.
1525 int devfreq_unregister_notifier(struct devfreq *devfreq, in devfreq_unregister_notifier() argument
1531 if (!devfreq) in devfreq_unregister_notifier()
1537 &devfreq->transition_notifier_list, nb); in devfreq_unregister_notifier()
1548 struct devfreq *devfreq; member
1557 devfreq_unregister_notifier(this->devfreq, this->nb, this->list); in devm_devfreq_notifier_release()
1563 * @dev: The devfreq user device. (parent of devfreq)
1564 * @devfreq: The devfreq object.
1569 struct devfreq *devfreq, in devm_devfreq_register_notifier() argument
1581 ret = devfreq_register_notifier(devfreq, nb, list); in devm_devfreq_register_notifier()
1587 ptr->devfreq = devfreq; in devm_devfreq_register_notifier()
1599 * @dev: The devfreq user device. (parent of devfreq)
1600 * @devfreq: The devfreq object.
1605 struct devfreq *devfreq, in devm_devfreq_unregister_notifier() argument
1610 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_notifier()