Lines Matching refs:devfreq

67 static struct devfreq *find_device_devfreq(struct device *dev)  in find_device_devfreq()
69 struct devfreq *tmp_devfreq; in find_device_devfreq()
86 static unsigned long find_available_min_freq(struct devfreq *devfreq) in find_available_min_freq() argument
91 opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &min_freq, 0); in find_available_min_freq()
100 static unsigned long find_available_max_freq(struct devfreq *devfreq) in find_available_max_freq() argument
105 opp = dev_pm_opp_find_freq_floor_indexed(devfreq->dev.parent, &max_freq, 0); in find_available_max_freq()
122 void devfreq_get_freq_range(struct devfreq *devfreq, in devfreq_get_freq_range() argument
126 unsigned long *freq_table = devfreq->freq_table; in devfreq_get_freq_range()
129 lockdep_assert_held(&devfreq->lock); in devfreq_get_freq_range()
136 if (freq_table[0] < freq_table[devfreq->max_state - 1]) { in devfreq_get_freq_range()
138 *max_freq = freq_table[devfreq->max_state - 1]; in devfreq_get_freq_range()
140 *min_freq = freq_table[devfreq->max_state - 1]; in devfreq_get_freq_range()
145 qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent, in devfreq_get_freq_range()
147 qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent, in devfreq_get_freq_range()
155 *max_freq = clamp(*max_freq, devfreq->scaling_min_freq, devfreq->scaling_max_freq); in devfreq_get_freq_range()
156 *min_freq = clamp(*min_freq, devfreq->scaling_min_freq, *max_freq); in devfreq_get_freq_range()
165 static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq) in devfreq_get_freq_level() argument
169 for (lev = 0; lev < devfreq->max_state; lev++) in devfreq_get_freq_level()
170 if (freq == devfreq->freq_table[lev]) in devfreq_get_freq_level()
176 static int set_freq_table(struct devfreq *devfreq) in set_freq_table() argument
183 count = dev_pm_opp_get_opp_count(devfreq->dev.parent); in set_freq_table()
187 devfreq->max_state = count; in set_freq_table()
188 devfreq->freq_table = devm_kcalloc(devfreq->dev.parent, in set_freq_table()
189 devfreq->max_state, in set_freq_table()
190 sizeof(*devfreq->freq_table), in set_freq_table()
192 if (!devfreq->freq_table) in set_freq_table()
195 for (i = 0, freq = 0; i < devfreq->max_state; i++, freq++) { in set_freq_table()
196 opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &freq, 0); in set_freq_table()
198 devm_kfree(devfreq->dev.parent, devfreq->freq_table); in set_freq_table()
202 devfreq->freq_table[i] = freq; in set_freq_table()
213 int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) in devfreq_update_status() argument
218 lockdep_assert_held(&devfreq->lock); in devfreq_update_status()
222 if (!devfreq->previous_freq) in devfreq_update_status()
225 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq); in devfreq_update_status()
231 devfreq->stats.time_in_state[prev_lev] += in devfreq_update_status()
232 cur_time - devfreq->stats.last_update; in devfreq_update_status()
234 lev = devfreq_get_freq_level(devfreq, freq); in devfreq_update_status()
241 devfreq->stats.trans_table[ in devfreq_update_status()
242 (prev_lev * devfreq->max_state) + lev]++; in devfreq_update_status()
243 devfreq->stats.total_trans++; in devfreq_update_status()
247 devfreq->stats.last_update = cur_time; in devfreq_update_status()
321 static int devfreq_notify_transition(struct devfreq *devfreq, in devfreq_notify_transition() argument
324 if (!devfreq) in devfreq_notify_transition()
329 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
334 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
344 static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq, in devfreq_set_target() argument
351 if (devfreq->profile->get_cur_freq) in devfreq_set_target()
352 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq); in devfreq_set_target()
354 cur_freq = devfreq->previous_freq; in devfreq_set_target()
358 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE); in devfreq_set_target()
360 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags); in devfreq_set_target()
363 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in devfreq_set_target()
373 trace_devfreq_frequency(devfreq, new_freq, cur_freq); in devfreq_set_target()
376 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in devfreq_set_target()
378 if (devfreq_update_status(devfreq, new_freq)) in devfreq_set_target()
379 dev_warn(&devfreq->dev, in devfreq_set_target()
382 devfreq->previous_freq = new_freq; in devfreq_set_target()
384 if (devfreq->suspend_freq) in devfreq_set_target()
385 devfreq->resume_freq = new_freq; in devfreq_set_target()
400 int devfreq_update_target(struct devfreq *devfreq, unsigned long freq) in devfreq_update_target() argument
406 lockdep_assert_held(&devfreq->lock); in devfreq_update_target()
408 if (!devfreq->governor) in devfreq_update_target()
412 err = devfreq->governor->get_target_freq(devfreq, &freq); in devfreq_update_target()
415 devfreq_get_freq_range(devfreq, &min_freq, &max_freq); in devfreq_update_target()
426 return devfreq_set_target(devfreq, freq, flags); in devfreq_update_target()
439 int update_devfreq(struct devfreq *devfreq) in update_devfreq() argument
441 return devfreq_update_target(devfreq, 0L); in update_devfreq()
453 struct devfreq *devfreq = container_of(work, in devfreq_monitor() local
454 struct devfreq, work.work); in devfreq_monitor()
456 mutex_lock(&devfreq->lock); in devfreq_monitor()
457 err = update_devfreq(devfreq); in devfreq_monitor()
459 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err); in devfreq_monitor()
461 if (devfreq->stop_polling) in devfreq_monitor()
464 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor()
465 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor()
468 mutex_unlock(&devfreq->lock); in devfreq_monitor()
469 trace_devfreq_monitor(devfreq); in devfreq_monitor()
482 void devfreq_monitor_start(struct devfreq *devfreq) in devfreq_monitor_start() argument
484 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_start()
487 mutex_lock(&devfreq->lock); in devfreq_monitor_start()
488 if (delayed_work_pending(&devfreq->work)) in devfreq_monitor_start()
491 switch (devfreq->profile->timer) { in devfreq_monitor_start()
493 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); in devfreq_monitor_start()
496 INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor); in devfreq_monitor_start()
502 if (devfreq->profile->polling_ms) in devfreq_monitor_start()
503 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_start()
504 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_start()
507 devfreq->stop_polling = false; in devfreq_monitor_start()
508 mutex_unlock(&devfreq->lock); in devfreq_monitor_start()
520 void devfreq_monitor_stop(struct devfreq *devfreq) in devfreq_monitor_stop() argument
522 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_stop()
525 mutex_lock(&devfreq->lock); in devfreq_monitor_stop()
526 if (devfreq->stop_polling) { in devfreq_monitor_stop()
527 mutex_unlock(&devfreq->lock); in devfreq_monitor_stop()
531 devfreq->stop_polling = true; in devfreq_monitor_stop()
532 mutex_unlock(&devfreq->lock); in devfreq_monitor_stop()
533 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_stop()
549 void devfreq_monitor_suspend(struct devfreq *devfreq) in devfreq_monitor_suspend() argument
551 mutex_lock(&devfreq->lock); in devfreq_monitor_suspend()
552 if (devfreq->stop_polling) { in devfreq_monitor_suspend()
553 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
557 devfreq_update_status(devfreq, devfreq->previous_freq); in devfreq_monitor_suspend()
558 devfreq->stop_polling = true; in devfreq_monitor_suspend()
559 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
561 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_suspend()
564 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_suspend()
576 void devfreq_monitor_resume(struct devfreq *devfreq) in devfreq_monitor_resume() argument
580 mutex_lock(&devfreq->lock); in devfreq_monitor_resume()
582 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_resume()
585 if (!devfreq->stop_polling) in devfreq_monitor_resume()
588 if (!delayed_work_pending(&devfreq->work) && in devfreq_monitor_resume()
589 devfreq->profile->polling_ms) in devfreq_monitor_resume()
590 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_resume()
591 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_resume()
594 devfreq->stats.last_update = get_jiffies_64(); in devfreq_monitor_resume()
595 devfreq->stop_polling = false; in devfreq_monitor_resume()
597 if (devfreq->profile->get_cur_freq && in devfreq_monitor_resume()
598 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) in devfreq_monitor_resume()
599 devfreq->previous_freq = freq; in devfreq_monitor_resume()
602 mutex_unlock(&devfreq->lock); in devfreq_monitor_resume()
614 void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay) in devfreq_update_interval() argument
616 unsigned int cur_delay = devfreq->profile->polling_ms; in devfreq_update_interval()
619 mutex_lock(&devfreq->lock); in devfreq_update_interval()
620 devfreq->profile->polling_ms = new_delay; in devfreq_update_interval()
622 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_update_interval()
625 if (devfreq->stop_polling) in devfreq_update_interval()
630 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
631 cancel_delayed_work_sync(&devfreq->work); in devfreq_update_interval()
637 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_update_interval()
638 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_update_interval()
644 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
645 cancel_delayed_work_sync(&devfreq->work); in devfreq_update_interval()
646 mutex_lock(&devfreq->lock); in devfreq_update_interval()
647 if (!devfreq->stop_polling) in devfreq_update_interval()
648 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_update_interval()
649 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_update_interval()
652 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
668 struct devfreq *devfreq = container_of(nb, struct devfreq, nb); in devfreq_notifier_call() local
671 mutex_lock(&devfreq->lock); in devfreq_notifier_call()
673 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_notifier_call()
674 if (!devfreq->scaling_min_freq) in devfreq_notifier_call()
677 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_notifier_call()
678 if (!devfreq->scaling_max_freq) { in devfreq_notifier_call()
679 devfreq->scaling_max_freq = ULONG_MAX; in devfreq_notifier_call()
683 err = update_devfreq(devfreq); in devfreq_notifier_call()
686 mutex_unlock(&devfreq->lock); in devfreq_notifier_call()
688 dev_err(devfreq->dev.parent, in devfreq_notifier_call()
699 static int qos_notifier_call(struct devfreq *devfreq) in qos_notifier_call() argument
703 mutex_lock(&devfreq->lock); in qos_notifier_call()
704 err = update_devfreq(devfreq); in qos_notifier_call()
705 mutex_unlock(&devfreq->lock); in qos_notifier_call()
707 dev_err(devfreq->dev.parent, in qos_notifier_call()
723 return qos_notifier_call(container_of(nb, struct devfreq, nb_min)); in qos_min_notifier_call()
735 return qos_notifier_call(container_of(nb, struct devfreq, nb_max)); in qos_max_notifier_call()
746 struct devfreq *devfreq = to_devfreq(dev); in devfreq_dev_release() local
750 list_del(&devfreq->node); in devfreq_dev_release()
753 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max, in devfreq_dev_release()
758 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min, in devfreq_dev_release()
764 if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) { in devfreq_dev_release()
765 err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req); in devfreq_dev_release()
770 if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) { in devfreq_dev_release()
771 err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req); in devfreq_dev_release()
777 if (devfreq->profile->exit) in devfreq_dev_release()
778 devfreq->profile->exit(devfreq->dev.parent); in devfreq_dev_release()
780 if (devfreq->opp_table) in devfreq_dev_release()
781 dev_pm_opp_put_opp_table(devfreq->opp_table); in devfreq_dev_release()
783 mutex_destroy(&devfreq->lock); in devfreq_dev_release()
784 srcu_cleanup_notifier_head(&devfreq->transition_notifier_list); in devfreq_dev_release()
785 kfree(devfreq); in devfreq_dev_release()
788 static void create_sysfs_files(struct devfreq *devfreq,
790 static void remove_sysfs_files(struct devfreq *devfreq,
800 struct devfreq *devfreq_add_device(struct device *dev, in devfreq_add_device()
805 struct devfreq *devfreq; in devfreq_add_device() local
815 devfreq = find_device_devfreq(dev); in devfreq_add_device()
817 if (!IS_ERR(devfreq)) { in devfreq_add_device()
824 devfreq = kzalloc_obj(struct devfreq); in devfreq_add_device()
825 if (!devfreq) { in devfreq_add_device()
830 mutex_init(&devfreq->lock); in devfreq_add_device()
831 mutex_lock(&devfreq->lock); in devfreq_add_device()
832 devfreq->dev.parent = dev; in devfreq_add_device()
833 devfreq->dev.class = devfreq_class; in devfreq_add_device()
834 devfreq->dev.groups = profile->dev_groups; in devfreq_add_device()
835 devfreq->dev.release = devfreq_dev_release; in devfreq_add_device()
836 INIT_LIST_HEAD(&devfreq->node); in devfreq_add_device()
837 devfreq->profile = profile; in devfreq_add_device()
838 devfreq->previous_freq = profile->initial_freq; in devfreq_add_device()
839 devfreq->last_status.current_frequency = profile->initial_freq; in devfreq_add_device()
840 devfreq->data = data; in devfreq_add_device()
841 devfreq->nb.notifier_call = devfreq_notifier_call; in devfreq_add_device()
843 if (devfreq->profile->timer < 0 in devfreq_add_device()
844 || devfreq->profile->timer >= DEVFREQ_TIMER_NUM) { in devfreq_add_device()
845 mutex_unlock(&devfreq->lock); in devfreq_add_device()
850 if (!devfreq->profile->max_state || !devfreq->profile->freq_table) { in devfreq_add_device()
851 mutex_unlock(&devfreq->lock); in devfreq_add_device()
852 err = set_freq_table(devfreq); in devfreq_add_device()
855 mutex_lock(&devfreq->lock); in devfreq_add_device()
857 devfreq->freq_table = devfreq->profile->freq_table; in devfreq_add_device()
858 devfreq->max_state = devfreq->profile->max_state; in devfreq_add_device()
861 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_add_device()
862 if (!devfreq->scaling_min_freq) { in devfreq_add_device()
863 mutex_unlock(&devfreq->lock); in devfreq_add_device()
868 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_add_device()
869 if (!devfreq->scaling_max_freq) { in devfreq_add_device()
870 mutex_unlock(&devfreq->lock); in devfreq_add_device()
875 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); in devfreq_add_device()
876 devfreq->opp_table = dev_pm_opp_get_opp_table(dev); in devfreq_add_device()
877 if (IS_ERR(devfreq->opp_table)) in devfreq_add_device()
878 devfreq->opp_table = NULL; in devfreq_add_device()
880 atomic_set(&devfreq->suspend_count, 0); in devfreq_add_device()
882 dev_set_name(&devfreq->dev, "%s", dev_name(dev)); in devfreq_add_device()
883 err = device_register(&devfreq->dev); in devfreq_add_device()
885 mutex_unlock(&devfreq->lock); in devfreq_add_device()
886 put_device(&devfreq->dev); in devfreq_add_device()
890 devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev, in devfreq_add_device()
892 devfreq->max_state, in devfreq_add_device()
893 devfreq->max_state), in devfreq_add_device()
895 if (!devfreq->stats.trans_table) { in devfreq_add_device()
896 mutex_unlock(&devfreq->lock); in devfreq_add_device()
901 devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev, in devfreq_add_device()
902 devfreq->max_state, in devfreq_add_device()
903 sizeof(*devfreq->stats.time_in_state), in devfreq_add_device()
905 if (!devfreq->stats.time_in_state) { in devfreq_add_device()
906 mutex_unlock(&devfreq->lock); in devfreq_add_device()
911 devfreq->stats.total_trans = 0; in devfreq_add_device()
912 devfreq->stats.last_update = get_jiffies_64(); in devfreq_add_device()
914 srcu_init_notifier_head(&devfreq->transition_notifier_list); in devfreq_add_device()
916 mutex_unlock(&devfreq->lock); in devfreq_add_device()
918 err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req, in devfreq_add_device()
922 err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req, in devfreq_add_device()
928 devfreq->nb_min.notifier_call = qos_min_notifier_call; in devfreq_add_device()
929 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_min, in devfreq_add_device()
934 devfreq->nb_max.notifier_call = qos_max_notifier_call; in devfreq_add_device()
935 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_max, in devfreq_add_device()
950 devfreq->governor = governor; in devfreq_add_device()
951 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, in devfreq_add_device()
959 create_sysfs_files(devfreq, devfreq->governor); in devfreq_add_device()
961 list_add(&devfreq->node, &devfreq_list); in devfreq_add_device()
965 if (devfreq->profile->is_cooling_device) { in devfreq_add_device()
966 devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); in devfreq_add_device()
967 if (IS_ERR(devfreq->cdev)) in devfreq_add_device()
968 devfreq->cdev = NULL; in devfreq_add_device()
971 return devfreq; in devfreq_add_device()
976 devfreq_remove_device(devfreq); in devfreq_add_device()
977 devfreq = NULL; in devfreq_add_device()
979 kfree(devfreq); in devfreq_add_device()
991 int devfreq_remove_device(struct devfreq *devfreq) in devfreq_remove_device() argument
993 if (!devfreq) in devfreq_remove_device()
996 devfreq_cooling_unregister(devfreq->cdev); in devfreq_remove_device()
998 if (devfreq->governor) { in devfreq_remove_device()
999 devfreq->governor->event_handler(devfreq, in devfreq_remove_device()
1001 remove_sysfs_files(devfreq, devfreq->governor); in devfreq_remove_device()
1004 device_unregister(&devfreq->dev); in devfreq_remove_device()
1012 struct devfreq **r = res; in devm_devfreq_dev_match()
1022 devfreq_remove_device(*(struct devfreq **)res); in devm_devfreq_dev_release()
1036 struct devfreq *devm_devfreq_add_device(struct device *dev, in devm_devfreq_add_device()
1041 struct devfreq **ptr, *devfreq; in devm_devfreq_add_device() local
1047 devfreq = devfreq_add_device(dev, profile, governor_name, data); in devm_devfreq_add_device()
1048 if (IS_ERR(devfreq)) { in devm_devfreq_add_device()
1050 return devfreq; in devm_devfreq_add_device()
1053 *ptr = devfreq; in devm_devfreq_add_device()
1056 return devfreq; in devm_devfreq_add_device()
1067 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) in devfreq_get_devfreq_by_node()
1069 struct devfreq *devfreq; in devfreq_get_devfreq_by_node() local
1075 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_get_devfreq_by_node()
1076 if (devfreq->dev.parent in devfreq_get_devfreq_by_node()
1077 && device_match_of_node(devfreq->dev.parent, node)) { in devfreq_get_devfreq_by_node()
1079 return devfreq; in devfreq_get_devfreq_by_node()
1095 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, in devfreq_get_devfreq_by_phandle()
1099 struct devfreq *devfreq; in devfreq_get_devfreq_by_phandle() local
1111 devfreq = devfreq_get_devfreq_by_node(node); in devfreq_get_devfreq_by_phandle()
1114 return devfreq; in devfreq_get_devfreq_by_phandle()
1118 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) in devfreq_get_devfreq_by_node()
1123 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, in devfreq_get_devfreq_by_phandle()
1137 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq) in devm_devfreq_remove_device() argument
1140 devm_devfreq_dev_match, devfreq)); in devm_devfreq_remove_device()
1152 int devfreq_suspend_device(struct devfreq *devfreq) in devfreq_suspend_device() argument
1156 if (!devfreq) in devfreq_suspend_device()
1159 if (atomic_inc_return(&devfreq->suspend_count) > 1) in devfreq_suspend_device()
1162 if (devfreq->governor) { in devfreq_suspend_device()
1163 ret = devfreq->governor->event_handler(devfreq, in devfreq_suspend_device()
1169 if (devfreq->suspend_freq) { in devfreq_suspend_device()
1170 mutex_lock(&devfreq->lock); in devfreq_suspend_device()
1171 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0); in devfreq_suspend_device()
1172 mutex_unlock(&devfreq->lock); in devfreq_suspend_device()
1189 int devfreq_resume_device(struct devfreq *devfreq) in devfreq_resume_device() argument
1193 if (!devfreq) in devfreq_resume_device()
1196 if (atomic_dec_return(&devfreq->suspend_count) >= 1) in devfreq_resume_device()
1199 if (devfreq->resume_freq) { in devfreq_resume_device()
1200 mutex_lock(&devfreq->lock); in devfreq_resume_device()
1201 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0); in devfreq_resume_device()
1202 mutex_unlock(&devfreq->lock); in devfreq_resume_device()
1207 if (devfreq->governor) { in devfreq_resume_device()
1208 ret = devfreq->governor->event_handler(devfreq, in devfreq_resume_device()
1228 struct devfreq *devfreq; in devfreq_suspend() local
1232 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_suspend()
1233 ret = devfreq_suspend_device(devfreq); in devfreq_suspend()
1235 dev_err(&devfreq->dev, in devfreq_suspend()
1249 struct devfreq *devfreq; in devfreq_resume() local
1253 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_resume()
1254 ret = devfreq_resume_device(devfreq); in devfreq_resume()
1256 dev_warn(&devfreq->dev, in devfreq_resume()
1269 struct devfreq *devfreq; in devfreq_add_governor() local
1288 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_add_governor()
1290 struct device *dev = devfreq->dev.parent; in devfreq_add_governor()
1292 if (!strncmp(devfreq->governor->name, governor->name, in devfreq_add_governor()
1295 if (devfreq->governor) { in devfreq_add_governor()
1298 __func__, devfreq->governor->name); in devfreq_add_governor()
1299 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
1305 devfreq->governor->name, ret); in devfreq_add_governor()
1309 devfreq->governor = governor; in devfreq_add_governor()
1310 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
1314 __func__, devfreq->governor->name, in devfreq_add_governor()
1360 struct devfreq *devfreq; in devfreq_remove_governor() local
1376 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_remove_governor()
1378 struct device *dev = devfreq->dev.parent; in devfreq_remove_governor()
1380 if (!devfreq->governor) in devfreq_remove_governor()
1383 if (!strncmp(devfreq->governor->name, governor->name, in devfreq_remove_governor()
1385 ret = devfreq->governor->event_handler(devfreq, in devfreq_remove_governor()
1389 __func__, devfreq->governor->name, in devfreq_remove_governor()
1392 devfreq->governor = NULL; in devfreq_remove_governor()
1407 struct devfreq *df = to_devfreq(dev); in name_show()
1415 struct devfreq *df = to_devfreq(dev); in governor_show()
1426 struct devfreq *df = to_devfreq(dev); in governor_store()
1507 struct devfreq *df = to_devfreq(d); in available_governors_show()
1553 struct devfreq *df = to_devfreq(dev); in cur_freq_show()
1569 struct devfreq *df = to_devfreq(dev); in target_freq_show()
1578 struct devfreq *df = to_devfreq(dev); in min_freq_store()
1605 struct devfreq *df = to_devfreq(dev); in min_freq_show()
1619 struct devfreq *df = to_devfreq(dev); in max_freq_store()
1659 struct devfreq *df = to_devfreq(dev); in max_freq_show()
1674 struct devfreq *df = to_devfreq(d); in available_frequencies_show()
1701 struct devfreq *df = to_devfreq(dev); in trans_stat_show()
1771 struct devfreq *df = to_devfreq(dev); in trans_stat_store()
1810 ATTRIBUTE_GROUPS(devfreq);
1815 struct devfreq *df = to_devfreq(dev); in polling_interval_show()
1827 struct devfreq *df = to_devfreq(dev); in polling_interval_store()
1848 struct devfreq *df = to_devfreq(dev); in timer_show()
1859 struct devfreq *df = to_devfreq(dev); in timer_store()
1919 static void create_sysfs_files(struct devfreq *devfreq, in create_sysfs_files() argument
1923 CREATE_SYSFS_FILE(devfreq, polling_interval); in create_sysfs_files()
1925 CREATE_SYSFS_FILE(devfreq, timer); in create_sysfs_files()
1929 static void remove_sysfs_files(struct devfreq *devfreq, in remove_sysfs_files() argument
1933 sysfs_remove_file(&devfreq->dev.kobj, in remove_sysfs_files()
1936 sysfs_remove_file(&devfreq->dev.kobj, &dev_attr_timer.attr); in remove_sysfs_files()
1951 struct devfreq *devfreq; in devfreq_summary_show() local
1952 struct devfreq *p_devfreq = NULL; in devfreq_summary_show()
1978 list_for_each_entry_reverse(devfreq, &devfreq_list, node) { in devfreq_summary_show()
1980 if (!strncmp(devfreq->governor->name, DEVFREQ_GOV_PASSIVE, in devfreq_summary_show()
1982 struct devfreq_passive_data *data = devfreq->data; in devfreq_summary_show()
1991 mutex_lock(&devfreq->lock); in devfreq_summary_show()
1992 cur_freq = devfreq->previous_freq; in devfreq_summary_show()
1993 devfreq_get_freq_range(devfreq, &min_freq, &max_freq); in devfreq_summary_show()
1994 timer = devfreq->profile->timer; in devfreq_summary_show()
1996 if (IS_SUPPORTED_ATTR(devfreq->governor->attrs, POLLING_INTERVAL)) in devfreq_summary_show()
1997 polling_ms = devfreq->profile->polling_ms; in devfreq_summary_show()
2000 mutex_unlock(&devfreq->lock); in devfreq_summary_show()
2004 dev_name(&devfreq->dev), in devfreq_summary_show()
2006 devfreq->governor->name, in devfreq_summary_show()
2093 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_register_opp_notifier() argument
2095 return dev_pm_opp_register_notifier(dev, &devfreq->nb); in devfreq_register_opp_notifier()
2109 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_unregister_opp_notifier() argument
2111 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb); in devfreq_unregister_opp_notifier()
2117 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); in devm_devfreq_opp_release()
2127 struct devfreq *devfreq) in devm_devfreq_register_opp_notifier() argument
2129 struct devfreq **ptr; in devm_devfreq_register_opp_notifier()
2136 ret = devfreq_register_opp_notifier(dev, devfreq); in devm_devfreq_register_opp_notifier()
2142 *ptr = devfreq; in devm_devfreq_register_opp_notifier()
2156 struct devfreq *devfreq) in devm_devfreq_unregister_opp_notifier() argument
2159 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_opp_notifier()
2169 int devfreq_register_notifier(struct devfreq *devfreq, in devfreq_register_notifier() argument
2175 if (!devfreq) in devfreq_register_notifier()
2181 &devfreq->transition_notifier_list, nb); in devfreq_register_notifier()
2197 int devfreq_unregister_notifier(struct devfreq *devfreq, in devfreq_unregister_notifier() argument
2203 if (!devfreq) in devfreq_unregister_notifier()
2209 &devfreq->transition_notifier_list, nb); in devfreq_unregister_notifier()
2220 struct devfreq *devfreq; member
2229 devfreq_unregister_notifier(this->devfreq, this->nb, this->list); in devm_devfreq_notifier_release()
2241 struct devfreq *devfreq, in devm_devfreq_register_notifier() argument
2253 ret = devfreq_register_notifier(devfreq, nb, list); in devm_devfreq_register_notifier()
2259 ptr->devfreq = devfreq; in devm_devfreq_register_notifier()
2277 struct devfreq *devfreq, in devm_devfreq_unregister_notifier() argument
2282 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_notifier()