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)) { 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()
727 struct dev_pm_opp *opp, struct device *dev, bool remove) in _set_opp_bw() argument
740 avg = opp->bandwidth[i].avg; in _set_opp_bw()
741 peak = opp->bandwidth[i].peak; in _set_opp_bw()
783 struct dev_pm_opp *opp, int i) in _set_required_opp() argument
785 unsigned int pstate = likely(opp) ? opp->required_opps[i]->pstate : 0; in _set_required_opp()
803 struct dev_pm_opp *opp, bool up) in _set_required_opps() argument
814 return _set_required_opp(dev, dev, opp, 0); in _set_required_opps()
827 ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i); in _set_required_opps()
833 ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i); in _set_required_opps()
854 int dev_pm_opp_set_bw(struct device *dev, struct dev_pm_opp *opp) in dev_pm_opp_set_bw() argument
865 if (opp) in dev_pm_opp_set_bw()
866 ret = _set_opp_bw(opp_table, opp, dev, false); in dev_pm_opp_set_bw()
918 struct dev_pm_opp *old_opp, *opp; in dev_pm_opp_set_rate() local
975 opp = _find_freq_ceil(opp_table, &temp_freq); in dev_pm_opp_set_rate()
976 if (IS_ERR(opp)) { in dev_pm_opp_set_rate()
977 ret = PTR_ERR(opp); in dev_pm_opp_set_rate()
988 ret = _set_required_opps(dev, opp_table, opp, true); in dev_pm_opp_set_rate()
996 opp->supplies); in dev_pm_opp_set_rate()
1000 opp->supplies); in dev_pm_opp_set_rate()
1008 ret = _set_required_opps(dev, opp_table, opp, false); in dev_pm_opp_set_rate()
1014 ret = _set_opp_bw(opp_table, opp, dev, false); in dev_pm_opp_set_rate()
1020 dev_pm_opp_put(opp); in dev_pm_opp_set_rate()
1225 void _opp_free(struct dev_pm_opp *opp) in _opp_free() argument
1227 kfree(opp); in _opp_free()
1230 static void _opp_kref_release(struct dev_pm_opp *opp, in _opp_kref_release() argument
1237 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_REMOVE, opp); in _opp_kref_release()
1238 _of_opp_free_required_opps(opp_table, opp); in _opp_kref_release()
1239 opp_debug_remove_one(opp); in _opp_kref_release()
1240 list_del(&opp->node); in _opp_kref_release()
1241 kfree(opp); in _opp_kref_release()
1246 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release_unlocked() local
1247 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release_unlocked()
1249 _opp_kref_release(opp, opp_table); in _opp_kref_release_unlocked()
1254 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release_locked() local
1255 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release_locked()
1257 _opp_kref_release(opp, opp_table); in _opp_kref_release_locked()
1261 void dev_pm_opp_get(struct dev_pm_opp *opp) in dev_pm_opp_get() argument
1263 kref_get(&opp->kref); in dev_pm_opp_get()
1266 void dev_pm_opp_put(struct dev_pm_opp *opp) in dev_pm_opp_put() argument
1268 kref_put_mutex(&opp->kref, _opp_kref_release_locked, in dev_pm_opp_put()
1269 &opp->opp_table->lock); in dev_pm_opp_put()
1273 static void dev_pm_opp_put_unlocked(struct dev_pm_opp *opp) in dev_pm_opp_put_unlocked() argument
1275 kref_put(&opp->kref, _opp_kref_release_unlocked); in dev_pm_opp_put_unlocked()
1287 struct dev_pm_opp *opp; in dev_pm_opp_remove() local
1297 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_remove()
1298 if (opp->rate == freq) { in dev_pm_opp_remove()
1307 dev_pm_opp_put(opp); in dev_pm_opp_remove()
1323 struct dev_pm_opp *opp, *tmp; in _opp_remove_all_static() local
1336 list_for_each_entry_safe(opp, tmp, &opp_table->opp_list, node) { in _opp_remove_all_static()
1337 if (!opp->dynamic) in _opp_remove_all_static()
1338 dev_pm_opp_put_unlocked(opp); in _opp_remove_all_static()
1356 struct dev_pm_opp *opp, *temp; in dev_pm_opp_remove_all_dynamic() local
1364 list_for_each_entry_safe(opp, temp, &opp_table->opp_list, node) { in dev_pm_opp_remove_all_dynamic()
1365 if (opp->dynamic) { in dev_pm_opp_remove_all_dynamic()
1366 dev_pm_opp_put_unlocked(opp); in dev_pm_opp_remove_all_dynamic()
1383 struct dev_pm_opp *opp; in _opp_allocate() local
1388 supply_size = sizeof(*opp->supplies) * supply_count; in _opp_allocate()
1389 icc_size = sizeof(*opp->bandwidth) * table->path_count; in _opp_allocate()
1392 opp = kzalloc(sizeof(*opp) + supply_size + icc_size, GFP_KERNEL); in _opp_allocate()
1394 if (!opp) in _opp_allocate()
1398 opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); in _opp_allocate()
1400 opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); in _opp_allocate()
1401 INIT_LIST_HEAD(&opp->node); in _opp_allocate()
1403 return opp; in _opp_allocate()
1406 static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, in _opp_supported_by_regulators() argument
1419 opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1420 opp->supplies[i].u_volt_max)) { in _opp_supported_by_regulators()
1422 __func__, opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1423 opp->supplies[i].u_volt_max); in _opp_supported_by_regulators()
1447 struct dev_pm_opp *opp; in _opp_is_duplicate() local
1458 list_for_each_entry(opp, &opp_table->opp_list, node) { in _opp_is_duplicate()
1459 opp_cmp = _opp_compare_key(new_opp, opp); in _opp_is_duplicate()
1461 *head = &opp->node; in _opp_is_duplicate()
1470 __func__, opp->rate, opp->supplies[0].u_volt, in _opp_is_duplicate()
1471 opp->available, new_opp->rate, in _opp_is_duplicate()
1475 return opp->available && in _opp_is_duplicate()
1476 new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST; in _opp_is_duplicate()
2117 struct dev_pm_opp *opp; in dev_pm_opp_xlate_performance_state() local
2144 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_performance_state()
2145 if (opp->pstate == pstate) { in dev_pm_opp_xlate_performance_state()
2146 dest_pstate = opp->required_opps[i]->pstate; in dev_pm_opp_xlate_performance_state()
2214 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); in _opp_set_availability() local
2230 opp = tmp_opp; in _opp_set_availability()
2235 if (IS_ERR(opp)) { in _opp_set_availability()
2236 r = PTR_ERR(opp); in _opp_set_availability()
2241 if (opp->available == availability_req) in _opp_set_availability()
2244 opp->available = availability_req; in _opp_set_availability()
2246 dev_pm_opp_get(opp); in _opp_set_availability()
2252 opp); in _opp_set_availability()
2255 OPP_EVENT_DISABLE, opp); in _opp_set_availability()
2257 dev_pm_opp_put(opp); in _opp_set_availability()
2285 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); in dev_pm_opp_adjust_voltage() local
2301 opp = tmp_opp; in dev_pm_opp_adjust_voltage()
2306 if (IS_ERR(opp)) { in dev_pm_opp_adjust_voltage()
2307 r = PTR_ERR(opp); in dev_pm_opp_adjust_voltage()
2312 if (opp->supplies->u_volt == u_volt) in dev_pm_opp_adjust_voltage()
2315 opp->supplies->u_volt = u_volt; in dev_pm_opp_adjust_voltage()
2316 opp->supplies->u_volt_min = u_volt_min; in dev_pm_opp_adjust_voltage()
2317 opp->supplies->u_volt_max = u_volt_max; in dev_pm_opp_adjust_voltage()
2319 dev_pm_opp_get(opp); in dev_pm_opp_adjust_voltage()
2324 opp); in dev_pm_opp_adjust_voltage()
2326 dev_pm_opp_put(opp); in dev_pm_opp_adjust_voltage()