Lines Matching refs:opp
101 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) in dev_pm_opp_get_voltage() argument
103 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_voltage()
108 return opp->supplies[0].u_volt; in dev_pm_opp_get_voltage()
119 unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) in dev_pm_opp_get_freq() argument
121 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_get_freq()
126 return opp->rate; in dev_pm_opp_get_freq()
137 unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp) in dev_pm_opp_get_level() argument
139 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_get_level()
144 return opp->level; in dev_pm_opp_get_level()
158 bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) in dev_pm_opp_is_turbo() argument
160 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_is_turbo()
165 return opp->turbo; in dev_pm_opp_is_turbo()
201 struct dev_pm_opp *opp; in dev_pm_opp_get_max_volt_latency() local
230 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_get_max_volt_latency()
231 if (!opp->available) in dev_pm_opp_get_max_volt_latency()
234 if (opp->supplies[i].u_volt_min < uV[i].min) in dev_pm_opp_get_max_volt_latency()
235 uV[i].min = opp->supplies[i].u_volt_min; in dev_pm_opp_get_max_volt_latency()
236 if (opp->supplies[i].u_volt_max > uV[i].max) in dev_pm_opp_get_max_volt_latency()
237 uV[i].max = opp->supplies[i].u_volt_max; in dev_pm_opp_get_max_volt_latency()
304 struct dev_pm_opp *opp; in _get_opp_count() local
309 list_for_each_entry(opp, &opp_table->opp_list, node) { in _get_opp_count()
310 if (opp->available) in _get_opp_count()
374 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_exact() local
389 opp = temp_opp; in dev_pm_opp_find_freq_exact()
392 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_exact()
400 return opp; in dev_pm_opp_find_freq_exact()
423 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_level_exact() local
437 opp = temp_opp; in dev_pm_opp_find_level_exact()
440 dev_pm_opp_get(opp); in dev_pm_opp_find_level_exact()
448 return opp; in dev_pm_opp_find_level_exact()
455 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in _find_freq_ceil() local
461 opp = temp_opp; in _find_freq_ceil()
462 *freq = opp->rate; in _find_freq_ceil()
465 dev_pm_opp_get(opp); in _find_freq_ceil()
472 return opp; in _find_freq_ceil()
497 struct dev_pm_opp *opp; in dev_pm_opp_find_freq_ceil() local
508 opp = _find_freq_ceil(opp_table, freq); in dev_pm_opp_find_freq_ceil()
512 return opp; in dev_pm_opp_find_freq_ceil()
538 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_floor() local
557 opp = temp_opp; in dev_pm_opp_find_freq_floor()
562 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_floor()
563 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_floor()
567 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_floor()
568 *freq = opp->rate; in dev_pm_opp_find_freq_floor()
570 return opp; in dev_pm_opp_find_freq_floor()
595 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_ceil_by_volt() local
613 opp = temp_opp; in dev_pm_opp_find_freq_ceil_by_volt()
618 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_ceil_by_volt()
619 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_ceil_by_volt()
624 return opp; in dev_pm_opp_find_freq_ceil_by_volt()
747 struct dev_pm_opp *opp) in _set_required_opps() argument
759 pstate = likely(opp) ? opp->required_opps[0]->pstate : 0; in _set_required_opps()
777 pstate = likely(opp) ? opp->required_opps[i]->pstate : 0; in _set_required_opps()
809 struct dev_pm_opp *old_opp, *opp; in dev_pm_opp_set_rate() local
860 opp = _find_freq_ceil(opp_table, &temp_freq); in dev_pm_opp_set_rate()
861 if (IS_ERR(opp)) { in dev_pm_opp_set_rate()
862 ret = PTR_ERR(opp); in dev_pm_opp_set_rate()
873 ret = _set_required_opps(dev, opp_table, opp); in dev_pm_opp_set_rate()
881 opp->supplies); in dev_pm_opp_set_rate()
885 opp->supplies); in dev_pm_opp_set_rate()
893 ret = _set_required_opps(dev, opp_table, opp); in dev_pm_opp_set_rate()
899 dev_pm_opp_put(opp); in dev_pm_opp_set_rate()
1077 struct dev_pm_opp *opp, *tmp; in _opp_remove_all_static() local
1079 list_for_each_entry_safe(opp, tmp, &opp_table->opp_list, node) { in _opp_remove_all_static()
1080 if (!opp->dynamic) in _opp_remove_all_static()
1081 dev_pm_opp_put(opp); in _opp_remove_all_static()
1109 void _opp_free(struct dev_pm_opp *opp) in _opp_free() argument
1111 kfree(opp); in _opp_free()
1114 static void _opp_kref_release(struct dev_pm_opp *opp, in _opp_kref_release() argument
1121 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_REMOVE, opp); in _opp_kref_release()
1122 _of_opp_free_required_opps(opp_table, opp); in _opp_kref_release()
1123 opp_debug_remove_one(opp); in _opp_kref_release()
1124 list_del(&opp->node); in _opp_kref_release()
1125 kfree(opp); in _opp_kref_release()
1130 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release_unlocked() local
1131 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release_unlocked()
1133 _opp_kref_release(opp, opp_table); in _opp_kref_release_unlocked()
1138 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release_locked() local
1139 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release_locked()
1141 _opp_kref_release(opp, opp_table); in _opp_kref_release_locked()
1145 void dev_pm_opp_get(struct dev_pm_opp *opp) in dev_pm_opp_get() argument
1147 kref_get(&opp->kref); in dev_pm_opp_get()
1150 void dev_pm_opp_put(struct dev_pm_opp *opp) in dev_pm_opp_put() argument
1152 kref_put_mutex(&opp->kref, _opp_kref_release_locked, in dev_pm_opp_put()
1153 &opp->opp_table->lock); in dev_pm_opp_put()
1157 static void dev_pm_opp_put_unlocked(struct dev_pm_opp *opp) in dev_pm_opp_put_unlocked() argument
1159 kref_put(&opp->kref, _opp_kref_release_unlocked); in dev_pm_opp_put_unlocked()
1171 struct dev_pm_opp *opp; in dev_pm_opp_remove() local
1181 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_remove()
1182 if (opp->rate == freq) { in dev_pm_opp_remove()
1191 dev_pm_opp_put(opp); in dev_pm_opp_remove()
1214 struct dev_pm_opp *opp, *temp; in dev_pm_opp_remove_all_dynamic() local
1222 list_for_each_entry_safe(opp, temp, &opp_table->opp_list, node) { in dev_pm_opp_remove_all_dynamic()
1223 if (opp->dynamic) { in dev_pm_opp_remove_all_dynamic()
1224 dev_pm_opp_put_unlocked(opp); in dev_pm_opp_remove_all_dynamic()
1241 struct dev_pm_opp *opp; in _opp_allocate() local
1246 supply_size = sizeof(*opp->supplies) * count; in _opp_allocate()
1249 opp = kzalloc(sizeof(*opp) + supply_size, GFP_KERNEL); in _opp_allocate()
1250 if (!opp) in _opp_allocate()
1254 opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); in _opp_allocate()
1255 INIT_LIST_HEAD(&opp->node); in _opp_allocate()
1257 return opp; in _opp_allocate()
1260 static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, in _opp_supported_by_regulators() argument
1273 opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1274 opp->supplies[i].u_volt_max)) { in _opp_supported_by_regulators()
1276 __func__, opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1277 opp->supplies[i].u_volt_max); in _opp_supported_by_regulators()
1289 struct dev_pm_opp *opp; in _opp_is_duplicate() local
1299 list_for_each_entry(opp, &opp_table->opp_list, node) { in _opp_is_duplicate()
1300 if (new_opp->rate > opp->rate) { in _opp_is_duplicate()
1301 *head = &opp->node; in _opp_is_duplicate()
1305 if (new_opp->rate < opp->rate) in _opp_is_duplicate()
1310 __func__, opp->rate, opp->supplies[0].u_volt, in _opp_is_duplicate()
1311 opp->available, new_opp->rate, in _opp_is_duplicate()
1315 return opp->available && in _opp_is_duplicate()
1316 new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST; in _opp_is_duplicate()
1952 struct dev_pm_opp *opp; in dev_pm_opp_xlate_performance_state() local
1982 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_performance_state()
1983 if (opp->pstate == pstate) { in dev_pm_opp_xlate_performance_state()
1984 dest_pstate = opp->required_opps[i]->pstate; in dev_pm_opp_xlate_performance_state()
2052 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); in _opp_set_availability() local
2068 opp = tmp_opp; in _opp_set_availability()
2073 if (IS_ERR(opp)) { in _opp_set_availability()
2074 r = PTR_ERR(opp); in _opp_set_availability()
2079 if (opp->available == availability_req) in _opp_set_availability()
2082 opp->available = availability_req; in _opp_set_availability()
2084 dev_pm_opp_get(opp); in _opp_set_availability()
2090 opp); in _opp_set_availability()
2093 OPP_EVENT_DISABLE, opp); in _opp_set_availability()
2095 dev_pm_opp_put(opp); in _opp_set_availability()