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(devfreq->dev.parent, &min_freq); 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(devfreq->dev.parent, &max_freq); in find_available_max_freq()
122 static void get_freq_range(struct devfreq *devfreq, in get_freq_range() argument
126 unsigned long *freq_table = devfreq->profile->freq_table; in get_freq_range()
129 lockdep_assert_held(&devfreq->lock); in get_freq_range()
136 if (freq_table[0] < freq_table[devfreq->profile->max_state - 1]) { in get_freq_range()
138 *max_freq = freq_table[devfreq->profile->max_state - 1]; in get_freq_range()
140 *min_freq = freq_table[devfreq->profile->max_state - 1]; in get_freq_range()
145 qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent, in get_freq_range()
147 qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent, in get_freq_range()
155 *min_freq = max(*min_freq, devfreq->scaling_min_freq); in get_freq_range()
156 *max_freq = min(*max_freq, devfreq->scaling_max_freq); in get_freq_range()
167 static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq) in devfreq_get_freq_level() argument
171 for (lev = 0; lev < devfreq->profile->max_state; lev++) in devfreq_get_freq_level()
172 if (freq == devfreq->profile->freq_table[lev]) in devfreq_get_freq_level()
178 static int set_freq_table(struct devfreq *devfreq) in set_freq_table() argument
180 struct devfreq_dev_profile *profile = devfreq->profile; in set_freq_table()
186 count = dev_pm_opp_get_opp_count(devfreq->dev.parent); in set_freq_table()
191 profile->freq_table = devm_kcalloc(devfreq->dev.parent, in set_freq_table()
201 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq); in set_freq_table()
203 devm_kfree(devfreq->dev.parent, profile->freq_table); in set_freq_table()
219 int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) in devfreq_update_status() argument
224 lockdep_assert_held(&devfreq->lock); in devfreq_update_status()
228 if (!devfreq->previous_freq) in devfreq_update_status()
231 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq); in devfreq_update_status()
237 devfreq->stats.time_in_state[prev_lev] += in devfreq_update_status()
238 cur_time - devfreq->stats.last_update; in devfreq_update_status()
240 lev = devfreq_get_freq_level(devfreq, freq); in devfreq_update_status()
247 devfreq->stats.trans_table[ in devfreq_update_status()
248 (prev_lev * devfreq->profile->max_state) + lev]++; in devfreq_update_status()
249 devfreq->stats.total_trans++; in devfreq_update_status()
253 devfreq->stats.last_update = cur_time; in devfreq_update_status()
327 static int devfreq_notify_transition(struct devfreq *devfreq, in devfreq_notify_transition() argument
330 if (!devfreq) in devfreq_notify_transition()
335 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
340 srcu_notifier_call_chain(&devfreq->transition_notifier_list, in devfreq_notify_transition()
350 static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq, in devfreq_set_target() argument
357 if (devfreq->profile->get_cur_freq) in devfreq_set_target()
358 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq); in devfreq_set_target()
360 cur_freq = devfreq->previous_freq; in devfreq_set_target()
364 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE); in devfreq_set_target()
366 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags); in devfreq_set_target()
369 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in devfreq_set_target()
379 trace_devfreq_frequency(devfreq, new_freq, cur_freq); in devfreq_set_target()
382 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); in devfreq_set_target()
384 if (devfreq_update_status(devfreq, new_freq)) in devfreq_set_target()
385 dev_err(&devfreq->dev, in devfreq_set_target()
388 devfreq->previous_freq = new_freq; in devfreq_set_target()
390 if (devfreq->suspend_freq) in devfreq_set_target()
391 devfreq->resume_freq = new_freq; in devfreq_set_target()
406 int devfreq_update_target(struct devfreq *devfreq, unsigned long freq) in devfreq_update_target() argument
412 lockdep_assert_held(&devfreq->lock); in devfreq_update_target()
414 if (!devfreq->governor) in devfreq_update_target()
418 err = devfreq->governor->get_target_freq(devfreq, &freq); in devfreq_update_target()
421 get_freq_range(devfreq, &min_freq, &max_freq); in devfreq_update_target()
432 return devfreq_set_target(devfreq, freq, flags); in devfreq_update_target()
445 int update_devfreq(struct devfreq *devfreq) in update_devfreq() argument
447 return devfreq_update_target(devfreq, 0L); in update_devfreq()
459 struct devfreq *devfreq = container_of(work, in devfreq_monitor() local
460 struct devfreq, work.work); in devfreq_monitor()
462 mutex_lock(&devfreq->lock); in devfreq_monitor()
463 err = update_devfreq(devfreq); in devfreq_monitor()
465 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err); in devfreq_monitor()
467 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor()
468 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor()
469 mutex_unlock(&devfreq->lock); in devfreq_monitor()
471 trace_devfreq_monitor(devfreq); in devfreq_monitor()
483 void devfreq_monitor_start(struct devfreq *devfreq) in devfreq_monitor_start() argument
485 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_start()
488 switch (devfreq->profile->timer) { in devfreq_monitor_start()
490 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); in devfreq_monitor_start()
493 INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor); in devfreq_monitor_start()
499 if (devfreq->profile->polling_ms) in devfreq_monitor_start()
500 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_start()
501 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_start()
513 void devfreq_monitor_stop(struct devfreq *devfreq) in devfreq_monitor_stop() argument
515 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_stop()
518 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_stop()
534 void devfreq_monitor_suspend(struct devfreq *devfreq) in devfreq_monitor_suspend() argument
536 mutex_lock(&devfreq->lock); in devfreq_monitor_suspend()
537 if (devfreq->stop_polling) { in devfreq_monitor_suspend()
538 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
542 devfreq_update_status(devfreq, devfreq->previous_freq); in devfreq_monitor_suspend()
543 devfreq->stop_polling = true; in devfreq_monitor_suspend()
544 mutex_unlock(&devfreq->lock); in devfreq_monitor_suspend()
546 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_suspend()
549 cancel_delayed_work_sync(&devfreq->work); in devfreq_monitor_suspend()
561 void devfreq_monitor_resume(struct devfreq *devfreq) in devfreq_monitor_resume() argument
565 mutex_lock(&devfreq->lock); in devfreq_monitor_resume()
567 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_monitor_resume()
570 if (!devfreq->stop_polling) in devfreq_monitor_resume()
573 if (!delayed_work_pending(&devfreq->work) && in devfreq_monitor_resume()
574 devfreq->profile->polling_ms) in devfreq_monitor_resume()
575 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_monitor_resume()
576 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_monitor_resume()
579 devfreq->stats.last_update = get_jiffies_64(); in devfreq_monitor_resume()
580 devfreq->stop_polling = false; in devfreq_monitor_resume()
582 if (devfreq->profile->get_cur_freq && in devfreq_monitor_resume()
583 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) in devfreq_monitor_resume()
584 devfreq->previous_freq = freq; in devfreq_monitor_resume()
587 mutex_unlock(&devfreq->lock); in devfreq_monitor_resume()
599 void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay) in devfreq_update_interval() argument
601 unsigned int cur_delay = devfreq->profile->polling_ms; in devfreq_update_interval()
604 mutex_lock(&devfreq->lock); in devfreq_update_interval()
605 devfreq->profile->polling_ms = new_delay; in devfreq_update_interval()
607 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) in devfreq_update_interval()
610 if (devfreq->stop_polling) in devfreq_update_interval()
615 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
616 cancel_delayed_work_sync(&devfreq->work); in devfreq_update_interval()
622 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_update_interval()
623 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_update_interval()
629 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
630 cancel_delayed_work_sync(&devfreq->work); in devfreq_update_interval()
631 mutex_lock(&devfreq->lock); in devfreq_update_interval()
632 if (!devfreq->stop_polling) in devfreq_update_interval()
633 queue_delayed_work(devfreq_wq, &devfreq->work, in devfreq_update_interval()
634 msecs_to_jiffies(devfreq->profile->polling_ms)); in devfreq_update_interval()
637 mutex_unlock(&devfreq->lock); in devfreq_update_interval()
653 struct devfreq *devfreq = container_of(nb, struct devfreq, nb); in devfreq_notifier_call() local
656 mutex_lock(&devfreq->lock); in devfreq_notifier_call()
658 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_notifier_call()
659 if (!devfreq->scaling_min_freq) in devfreq_notifier_call()
662 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_notifier_call()
663 if (!devfreq->scaling_max_freq) { in devfreq_notifier_call()
664 devfreq->scaling_max_freq = ULONG_MAX; in devfreq_notifier_call()
668 err = update_devfreq(devfreq); in devfreq_notifier_call()
671 mutex_unlock(&devfreq->lock); in devfreq_notifier_call()
673 dev_err(devfreq->dev.parent, in devfreq_notifier_call()
684 static int qos_notifier_call(struct devfreq *devfreq) in qos_notifier_call() argument
688 mutex_lock(&devfreq->lock); in qos_notifier_call()
689 err = update_devfreq(devfreq); in qos_notifier_call()
690 mutex_unlock(&devfreq->lock); in qos_notifier_call()
692 dev_err(devfreq->dev.parent, in qos_notifier_call()
706 return qos_notifier_call(container_of(nb, struct devfreq, nb_min)); in qos_min_notifier_call()
716 return qos_notifier_call(container_of(nb, struct devfreq, nb_max)); in qos_max_notifier_call()
727 struct devfreq *devfreq = to_devfreq(dev); in devfreq_dev_release() local
731 list_del(&devfreq->node); in devfreq_dev_release()
734 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max, in devfreq_dev_release()
739 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min, in devfreq_dev_release()
745 if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) { in devfreq_dev_release()
746 err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req); in devfreq_dev_release()
751 if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) { in devfreq_dev_release()
752 err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req); in devfreq_dev_release()
758 if (devfreq->profile->exit) in devfreq_dev_release()
759 devfreq->profile->exit(devfreq->dev.parent); in devfreq_dev_release()
761 if (devfreq->opp_table) in devfreq_dev_release()
762 dev_pm_opp_put_opp_table(devfreq->opp_table); in devfreq_dev_release()
764 mutex_destroy(&devfreq->lock); in devfreq_dev_release()
765 kfree(devfreq); in devfreq_dev_release()
768 static void create_sysfs_files(struct devfreq *devfreq,
770 static void remove_sysfs_files(struct devfreq *devfreq,
781 struct devfreq *devfreq_add_device(struct device *dev, in devfreq_add_device()
786 struct devfreq *devfreq; in devfreq_add_device() local
796 devfreq = find_device_devfreq(dev); in devfreq_add_device()
798 if (!IS_ERR(devfreq)) { in devfreq_add_device()
805 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL); in devfreq_add_device()
806 if (!devfreq) { in devfreq_add_device()
811 mutex_init(&devfreq->lock); in devfreq_add_device()
812 mutex_lock(&devfreq->lock); in devfreq_add_device()
813 devfreq->dev.parent = dev; in devfreq_add_device()
814 devfreq->dev.class = devfreq_class; in devfreq_add_device()
815 devfreq->dev.release = devfreq_dev_release; in devfreq_add_device()
816 INIT_LIST_HEAD(&devfreq->node); in devfreq_add_device()
817 devfreq->profile = profile; in devfreq_add_device()
818 devfreq->previous_freq = profile->initial_freq; in devfreq_add_device()
819 devfreq->last_status.current_frequency = profile->initial_freq; in devfreq_add_device()
820 devfreq->data = data; in devfreq_add_device()
821 devfreq->nb.notifier_call = devfreq_notifier_call; in devfreq_add_device()
823 if (devfreq->profile->timer < 0 in devfreq_add_device()
824 || devfreq->profile->timer >= DEVFREQ_TIMER_NUM) { in devfreq_add_device()
825 mutex_unlock(&devfreq->lock); in devfreq_add_device()
830 if (!devfreq->profile->max_state || !devfreq->profile->freq_table) { in devfreq_add_device()
831 mutex_unlock(&devfreq->lock); in devfreq_add_device()
832 err = set_freq_table(devfreq); in devfreq_add_device()
835 mutex_lock(&devfreq->lock); in devfreq_add_device()
838 devfreq->scaling_min_freq = find_available_min_freq(devfreq); in devfreq_add_device()
839 if (!devfreq->scaling_min_freq) { in devfreq_add_device()
840 mutex_unlock(&devfreq->lock); in devfreq_add_device()
845 devfreq->scaling_max_freq = find_available_max_freq(devfreq); in devfreq_add_device()
846 if (!devfreq->scaling_max_freq) { in devfreq_add_device()
847 mutex_unlock(&devfreq->lock); in devfreq_add_device()
852 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); in devfreq_add_device()
853 devfreq->opp_table = dev_pm_opp_get_opp_table(dev); in devfreq_add_device()
854 if (IS_ERR(devfreq->opp_table)) in devfreq_add_device()
855 devfreq->opp_table = NULL; in devfreq_add_device()
857 atomic_set(&devfreq->suspend_count, 0); in devfreq_add_device()
859 dev_set_name(&devfreq->dev, "%s", dev_name(dev)); in devfreq_add_device()
860 err = device_register(&devfreq->dev); in devfreq_add_device()
862 mutex_unlock(&devfreq->lock); in devfreq_add_device()
863 put_device(&devfreq->dev); in devfreq_add_device()
867 devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev, in devfreq_add_device()
869 devfreq->profile->max_state, in devfreq_add_device()
870 devfreq->profile->max_state), in devfreq_add_device()
872 if (!devfreq->stats.trans_table) { in devfreq_add_device()
873 mutex_unlock(&devfreq->lock); in devfreq_add_device()
878 devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev, in devfreq_add_device()
879 devfreq->profile->max_state, in devfreq_add_device()
880 sizeof(*devfreq->stats.time_in_state), in devfreq_add_device()
882 if (!devfreq->stats.time_in_state) { in devfreq_add_device()
883 mutex_unlock(&devfreq->lock); in devfreq_add_device()
888 devfreq->stats.total_trans = 0; in devfreq_add_device()
889 devfreq->stats.last_update = get_jiffies_64(); in devfreq_add_device()
891 srcu_init_notifier_head(&devfreq->transition_notifier_list); in devfreq_add_device()
893 mutex_unlock(&devfreq->lock); in devfreq_add_device()
895 err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req, in devfreq_add_device()
899 err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req, in devfreq_add_device()
905 devfreq->nb_min.notifier_call = qos_min_notifier_call; in devfreq_add_device()
906 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_min, in devfreq_add_device()
911 devfreq->nb_max.notifier_call = qos_max_notifier_call; in devfreq_add_device()
912 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_max, in devfreq_add_device()
927 devfreq->governor = governor; in devfreq_add_device()
928 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, in devfreq_add_device()
935 create_sysfs_files(devfreq, devfreq->governor); in devfreq_add_device()
937 list_add(&devfreq->node, &devfreq_list); in devfreq_add_device()
941 if (devfreq->profile->is_cooling_device) { in devfreq_add_device()
942 devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); in devfreq_add_device()
943 if (IS_ERR(devfreq->cdev)) in devfreq_add_device()
944 devfreq->cdev = NULL; in devfreq_add_device()
947 return devfreq; in devfreq_add_device()
952 devfreq_remove_device(devfreq); in devfreq_add_device()
953 devfreq = NULL; in devfreq_add_device()
955 kfree(devfreq); in devfreq_add_device()
967 int devfreq_remove_device(struct devfreq *devfreq) in devfreq_remove_device() argument
969 if (!devfreq) in devfreq_remove_device()
972 devfreq_cooling_unregister(devfreq->cdev); in devfreq_remove_device()
974 if (devfreq->governor) { in devfreq_remove_device()
975 devfreq->governor->event_handler(devfreq, in devfreq_remove_device()
977 remove_sysfs_files(devfreq, devfreq->governor); in devfreq_remove_device()
980 device_unregister(&devfreq->dev); in devfreq_remove_device()
988 struct devfreq **r = res; in devm_devfreq_dev_match()
998 devfreq_remove_device(*(struct devfreq **)res); in devm_devfreq_dev_release()
1013 struct devfreq *devm_devfreq_add_device(struct device *dev, in devm_devfreq_add_device()
1018 struct devfreq **ptr, *devfreq; in devm_devfreq_add_device() local
1024 devfreq = devfreq_add_device(dev, profile, governor_name, data); in devm_devfreq_add_device()
1025 if (IS_ERR(devfreq)) { in devm_devfreq_add_device()
1027 return devfreq; in devm_devfreq_add_device()
1030 *ptr = devfreq; in devm_devfreq_add_device()
1033 return devfreq; in devm_devfreq_add_device()
1044 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) in devfreq_get_devfreq_by_node()
1046 struct devfreq *devfreq; in devfreq_get_devfreq_by_node() local
1052 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_get_devfreq_by_node()
1053 if (devfreq->dev.parent in devfreq_get_devfreq_by_node()
1054 && devfreq->dev.parent->of_node == node) { in devfreq_get_devfreq_by_node()
1056 return devfreq; in devfreq_get_devfreq_by_node()
1072 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, in devfreq_get_devfreq_by_phandle()
1076 struct devfreq *devfreq; in devfreq_get_devfreq_by_phandle() local
1088 devfreq = devfreq_get_devfreq_by_node(node); in devfreq_get_devfreq_by_phandle()
1091 return devfreq; in devfreq_get_devfreq_by_phandle()
1095 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) in devfreq_get_devfreq_by_node()
1100 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, in devfreq_get_devfreq_by_phandle()
1114 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq) in devm_devfreq_remove_device() argument
1117 devm_devfreq_dev_match, devfreq)); in devm_devfreq_remove_device()
1129 int devfreq_suspend_device(struct devfreq *devfreq) in devfreq_suspend_device() argument
1133 if (!devfreq) in devfreq_suspend_device()
1136 if (atomic_inc_return(&devfreq->suspend_count) > 1) in devfreq_suspend_device()
1139 if (devfreq->governor) { in devfreq_suspend_device()
1140 ret = devfreq->governor->event_handler(devfreq, in devfreq_suspend_device()
1146 if (devfreq->suspend_freq) { in devfreq_suspend_device()
1147 mutex_lock(&devfreq->lock); in devfreq_suspend_device()
1148 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0); in devfreq_suspend_device()
1149 mutex_unlock(&devfreq->lock); in devfreq_suspend_device()
1166 int devfreq_resume_device(struct devfreq *devfreq) in devfreq_resume_device() argument
1170 if (!devfreq) in devfreq_resume_device()
1173 if (atomic_dec_return(&devfreq->suspend_count) >= 1) in devfreq_resume_device()
1176 if (devfreq->resume_freq) { in devfreq_resume_device()
1177 mutex_lock(&devfreq->lock); in devfreq_resume_device()
1178 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0); in devfreq_resume_device()
1179 mutex_unlock(&devfreq->lock); in devfreq_resume_device()
1184 if (devfreq->governor) { in devfreq_resume_device()
1185 ret = devfreq->governor->event_handler(devfreq, in devfreq_resume_device()
1205 struct devfreq *devfreq; in devfreq_suspend() local
1209 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_suspend()
1210 ret = devfreq_suspend_device(devfreq); in devfreq_suspend()
1212 dev_err(&devfreq->dev, in devfreq_suspend()
1226 struct devfreq *devfreq; in devfreq_resume() local
1230 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_resume()
1231 ret = devfreq_resume_device(devfreq); in devfreq_resume()
1233 dev_warn(&devfreq->dev, in devfreq_resume()
1246 struct devfreq *devfreq; in devfreq_add_governor() local
1265 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_add_governor()
1267 struct device *dev = devfreq->dev.parent; in devfreq_add_governor()
1269 if (!strncmp(devfreq->governor->name, governor->name, in devfreq_add_governor()
1272 if (devfreq->governor) { in devfreq_add_governor()
1275 __func__, devfreq->governor->name); in devfreq_add_governor()
1276 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
1282 devfreq->governor->name, ret); in devfreq_add_governor()
1286 devfreq->governor = governor; in devfreq_add_governor()
1287 ret = devfreq->governor->event_handler(devfreq, in devfreq_add_governor()
1291 __func__, devfreq->governor->name, in devfreq_add_governor()
1337 struct devfreq *devfreq; in devfreq_remove_governor() local
1353 list_for_each_entry(devfreq, &devfreq_list, node) { in devfreq_remove_governor()
1355 struct device *dev = devfreq->dev.parent; in devfreq_remove_governor()
1357 if (!strncmp(devfreq->governor->name, governor->name, in devfreq_remove_governor()
1360 if (!devfreq->governor) { in devfreq_remove_governor()
1366 ret = devfreq->governor->event_handler(devfreq, in devfreq_remove_governor()
1370 __func__, devfreq->governor->name, in devfreq_remove_governor()
1373 devfreq->governor = NULL; in devfreq_remove_governor()
1388 struct devfreq *df = to_devfreq(dev); in name_show()
1396 struct devfreq *df = to_devfreq(dev); in governor_show()
1407 struct devfreq *df = to_devfreq(dev); in governor_store()
1488 struct devfreq *df = to_devfreq(d); in available_governors_show()
1534 struct devfreq *df = to_devfreq(dev); in cur_freq_show()
1550 struct devfreq *df = to_devfreq(dev); in target_freq_show()
1559 struct devfreq *df = to_devfreq(dev); in min_freq_store()
1586 struct devfreq *df = to_devfreq(dev); in min_freq_show()
1600 struct devfreq *df = to_devfreq(dev); in max_freq_store()
1640 struct devfreq *df = to_devfreq(dev); in max_freq_show()
1655 struct devfreq *df = to_devfreq(d); in available_frequencies_show()
1682 struct devfreq *df = to_devfreq(dev); in trans_stat_show()
1736 struct devfreq *df = to_devfreq(dev); in trans_stat_store()
1775 ATTRIBUTE_GROUPS(devfreq);
1780 struct devfreq *df = to_devfreq(dev); in polling_interval_show()
1792 struct devfreq *df = to_devfreq(dev); in polling_interval_store()
1813 struct devfreq *df = to_devfreq(dev); in timer_show()
1824 struct devfreq *df = to_devfreq(dev); in timer_store()
1884 static void create_sysfs_files(struct devfreq *devfreq, in create_sysfs_files() argument
1888 CREATE_SYSFS_FILE(devfreq, polling_interval); in create_sysfs_files()
1890 CREATE_SYSFS_FILE(devfreq, timer); in create_sysfs_files()
1894 static void remove_sysfs_files(struct devfreq *devfreq, in remove_sysfs_files() argument
1898 sysfs_remove_file(&devfreq->dev.kobj, in remove_sysfs_files()
1901 sysfs_remove_file(&devfreq->dev.kobj, &dev_attr_timer.attr); in remove_sysfs_files()
1916 struct devfreq *devfreq; in devfreq_summary_show() local
1917 struct devfreq *p_devfreq = NULL; in devfreq_summary_show()
1943 list_for_each_entry_reverse(devfreq, &devfreq_list, node) { in devfreq_summary_show()
1945 if (!strncmp(devfreq->governor->name, DEVFREQ_GOV_PASSIVE, in devfreq_summary_show()
1947 struct devfreq_passive_data *data = devfreq->data; in devfreq_summary_show()
1956 mutex_lock(&devfreq->lock); in devfreq_summary_show()
1957 cur_freq = devfreq->previous_freq; in devfreq_summary_show()
1958 get_freq_range(devfreq, &min_freq, &max_freq); in devfreq_summary_show()
1959 timer = devfreq->profile->timer; in devfreq_summary_show()
1961 if (IS_SUPPORTED_ATTR(devfreq->governor->attrs, POLLING_INTERVAL)) in devfreq_summary_show()
1962 polling_ms = devfreq->profile->polling_ms; in devfreq_summary_show()
1965 mutex_unlock(&devfreq->lock); in devfreq_summary_show()
1969 dev_name(&devfreq->dev), in devfreq_summary_show()
1971 devfreq->governor->name, in devfreq_summary_show()
2058 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_register_opp_notifier() argument
2060 return dev_pm_opp_register_notifier(dev, &devfreq->nb); in devfreq_register_opp_notifier()
2074 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) in devfreq_unregister_opp_notifier() argument
2076 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb); in devfreq_unregister_opp_notifier()
2082 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); in devm_devfreq_opp_release()
2092 struct devfreq *devfreq) in devm_devfreq_register_opp_notifier() argument
2094 struct devfreq **ptr; in devm_devfreq_register_opp_notifier()
2101 ret = devfreq_register_opp_notifier(dev, devfreq); in devm_devfreq_register_opp_notifier()
2107 *ptr = devfreq; in devm_devfreq_register_opp_notifier()
2121 struct devfreq *devfreq) in devm_devfreq_unregister_opp_notifier() argument
2124 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_opp_notifier()
2134 int devfreq_register_notifier(struct devfreq *devfreq, in devfreq_register_notifier() argument
2140 if (!devfreq) in devfreq_register_notifier()
2146 &devfreq->transition_notifier_list, nb); in devfreq_register_notifier()
2162 int devfreq_unregister_notifier(struct devfreq *devfreq, in devfreq_unregister_notifier() argument
2168 if (!devfreq) in devfreq_unregister_notifier()
2174 &devfreq->transition_notifier_list, nb); in devfreq_unregister_notifier()
2185 struct devfreq *devfreq; member
2194 devfreq_unregister_notifier(this->devfreq, this->nb, this->list); in devm_devfreq_notifier_release()
2206 struct devfreq *devfreq, in devm_devfreq_register_notifier() argument
2218 ret = devfreq_register_notifier(devfreq, nb, list); in devm_devfreq_register_notifier()
2224 ptr->devfreq = devfreq; in devm_devfreq_register_notifier()
2242 struct devfreq *devfreq, in devm_devfreq_unregister_notifier() argument
2247 devm_devfreq_dev_match, devfreq)); in devm_devfreq_unregister_notifier()