Lines Matching refs:opp
105 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) in dev_pm_opp_get_voltage() argument
107 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_voltage()
112 return opp->supplies[0].u_volt; in dev_pm_opp_get_voltage()
123 unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) in dev_pm_opp_get_freq() argument
125 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_freq()
130 return opp->rate; in dev_pm_opp_get_freq()
141 unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp) in dev_pm_opp_get_level() argument
143 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_get_level()
148 return opp->level; in dev_pm_opp_get_level()
161 unsigned int dev_pm_opp_get_required_pstate(struct dev_pm_opp *opp, in dev_pm_opp_get_required_pstate() argument
164 if (IS_ERR_OR_NULL(opp) || !opp->available || in dev_pm_opp_get_required_pstate()
165 index >= opp->opp_table->required_opp_count) { in dev_pm_opp_get_required_pstate()
171 if (lazy_linking_pending(opp->opp_table)) in dev_pm_opp_get_required_pstate()
174 return opp->required_opps[index]->pstate; in dev_pm_opp_get_required_pstate()
188 bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) in dev_pm_opp_is_turbo() argument
190 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_is_turbo()
195 return opp->turbo; in dev_pm_opp_is_turbo()
231 struct dev_pm_opp *opp; in dev_pm_opp_get_max_volt_latency() local
260 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_get_max_volt_latency()
261 if (!opp->available) in dev_pm_opp_get_max_volt_latency()
264 if (opp->supplies[i].u_volt_min < uV[i].min) in dev_pm_opp_get_max_volt_latency()
265 uV[i].min = opp->supplies[i].u_volt_min; in dev_pm_opp_get_max_volt_latency()
266 if (opp->supplies[i].u_volt_max > uV[i].max) in dev_pm_opp_get_max_volt_latency()
267 uV[i].max = opp->supplies[i].u_volt_max; in dev_pm_opp_get_max_volt_latency()
334 struct dev_pm_opp *opp; in _get_opp_count() local
339 list_for_each_entry(opp, &opp_table->opp_list, node) { in _get_opp_count()
340 if (opp->available) in _get_opp_count()
404 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_exact() local
419 opp = temp_opp; in dev_pm_opp_find_freq_exact()
422 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_exact()
430 return opp; in dev_pm_opp_find_freq_exact()
453 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_level_exact() local
467 opp = temp_opp; in dev_pm_opp_find_level_exact()
470 dev_pm_opp_get(opp); in dev_pm_opp_find_level_exact()
478 return opp; in dev_pm_opp_find_level_exact()
501 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_level_ceil() local
515 opp = temp_opp; in dev_pm_opp_find_level_ceil()
516 *level = opp->level; in dev_pm_opp_find_level_ceil()
519 dev_pm_opp_get(opp); in dev_pm_opp_find_level_ceil()
527 return opp; in dev_pm_opp_find_level_ceil()
534 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in _find_freq_ceil() local
540 opp = temp_opp; in _find_freq_ceil()
541 *freq = opp->rate; in _find_freq_ceil()
544 dev_pm_opp_get(opp); in _find_freq_ceil()
551 return opp; in _find_freq_ceil()
576 struct dev_pm_opp *opp; in dev_pm_opp_find_freq_ceil() local
587 opp = _find_freq_ceil(opp_table, freq); in dev_pm_opp_find_freq_ceil()
591 return opp; in dev_pm_opp_find_freq_ceil()
617 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_floor() local
636 opp = temp_opp; in dev_pm_opp_find_freq_floor()
641 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_floor()
642 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_floor()
646 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_floor()
647 *freq = opp->rate; in dev_pm_opp_find_freq_floor()
649 return opp; in dev_pm_opp_find_freq_floor()
674 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in dev_pm_opp_find_freq_ceil_by_volt() local
692 opp = temp_opp; in dev_pm_opp_find_freq_ceil_by_volt()
697 if (!IS_ERR(opp)) in dev_pm_opp_find_freq_ceil_by_volt()
698 dev_pm_opp_get(opp); in dev_pm_opp_find_freq_ceil_by_volt()
703 return opp; in dev_pm_opp_find_freq_ceil_by_volt()
752 struct dev_pm_opp *opp, in _generic_set_opp_regulator() argument
768 ret = _set_opp_voltage(dev, reg, opp->supplies); in _generic_set_opp_regulator()
780 ret = _set_opp_voltage(dev, reg, opp->supplies); in _generic_set_opp_regulator()
809 struct dev_pm_opp *opp, struct device *dev) in _set_opp_bw() argument
818 if (!opp) { in _set_opp_bw()
822 avg = opp->bandwidth[i].avg; in _set_opp_bw()
823 peak = opp->bandwidth[i].peak; in _set_opp_bw()
828 opp ? "set" : "remove", i, ret); in _set_opp_bw()
837 struct device *dev, struct dev_pm_opp *opp, in _set_opp_custom() argument
851 memcpy(data->new_opp.supplies, opp->supplies, size); in _set_opp_custom()
867 struct dev_pm_opp *opp, int i) in _set_required_opp() argument
869 unsigned int pstate = likely(opp) ? opp->required_opps[i]->pstate : 0; in _set_required_opp()
887 struct dev_pm_opp *opp, bool up) in _set_required_opps() argument
912 return _set_required_opp(dev, dev, opp, 0); in _set_required_opps()
925 ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i); in _set_required_opps()
931 ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i); in _set_required_opps()
944 struct dev_pm_opp *opp = ERR_PTR(-ENODEV); in _find_current_opp() local
949 opp = _find_freq_ceil(opp_table, &freq); in _find_current_opp()
957 if (IS_ERR(opp)) { in _find_current_opp()
959 opp = list_first_entry(&opp_table->opp_list, struct dev_pm_opp, node); in _find_current_opp()
960 dev_pm_opp_get(opp); in _find_current_opp()
964 opp_table->current_opp = opp; in _find_current_opp()
996 struct dev_pm_opp *opp, unsigned long freq) in _set_opp() argument
1001 if (unlikely(!opp)) in _set_opp()
1011 if (old_opp == opp && opp_table->current_rate == freq && in _set_opp()
1019 opp->level, old_opp->bandwidth ? old_opp->bandwidth[0].peak : 0, in _set_opp()
1020 opp->bandwidth ? opp->bandwidth[0].peak : 0); in _set_opp()
1022 scaling_down = _opp_compare_key(old_opp, opp); in _set_opp()
1028 ret = _set_required_opps(dev, opp_table, opp, true); in _set_opp()
1034 ret = _set_opp_bw(opp_table, opp, dev); in _set_opp()
1042 ret = _set_opp_custom(opp_table, dev, opp, freq); in _set_opp()
1044 ret = _generic_set_opp_regulator(opp_table, dev, opp, freq, in _set_opp()
1056 ret = _set_opp_bw(opp_table, opp, dev); in _set_opp()
1062 ret = _set_required_opps(dev, opp_table, opp, false); in _set_opp()
1073 dev_pm_opp_get(opp); in _set_opp()
1074 opp_table->current_opp = opp; in _set_opp()
1095 struct dev_pm_opp *opp = NULL; in dev_pm_opp_set_rate() local
1127 opp = _find_freq_ceil(opp_table, &temp_freq); in dev_pm_opp_set_rate()
1128 if (IS_ERR(opp)) { in dev_pm_opp_set_rate()
1129 ret = PTR_ERR(opp); in dev_pm_opp_set_rate()
1136 ret = _set_opp(dev, opp_table, opp, freq); in dev_pm_opp_set_rate()
1139 dev_pm_opp_put(opp); in dev_pm_opp_set_rate()
1156 int dev_pm_opp_set_opp(struct device *dev, struct dev_pm_opp *opp) in dev_pm_opp_set_opp() argument
1167 ret = _set_opp(dev, opp_table, opp, opp ? opp->rate : 0); in dev_pm_opp_set_opp()
1424 void _opp_free(struct dev_pm_opp *opp) in _opp_free() argument
1426 kfree(opp); in _opp_free()
1431 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release() local
1432 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release()
1434 list_del(&opp->node); in _opp_kref_release()
1441 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_REMOVE, opp); in _opp_kref_release()
1442 _of_opp_free_required_opps(opp_table, opp); in _opp_kref_release()
1443 opp_debug_remove_one(opp); in _opp_kref_release()
1444 kfree(opp); in _opp_kref_release()
1447 void dev_pm_opp_get(struct dev_pm_opp *opp) in dev_pm_opp_get() argument
1449 kref_get(&opp->kref); in dev_pm_opp_get()
1452 void dev_pm_opp_put(struct dev_pm_opp *opp) in dev_pm_opp_put() argument
1454 kref_put_mutex(&opp->kref, _opp_kref_release, &opp->opp_table->lock); in dev_pm_opp_put()
1467 struct dev_pm_opp *opp; in dev_pm_opp_remove() local
1477 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_remove()
1478 if (opp->rate == freq) { in dev_pm_opp_remove()
1487 dev_pm_opp_put(opp); in dev_pm_opp_remove()
1504 struct dev_pm_opp *opp = NULL, *temp; in _opp_get_next() local
1513 opp = temp; in _opp_get_next()
1519 return opp; in _opp_get_next()
1529 struct dev_pm_opp *opp; in _opp_remove_all() local
1531 while ((opp = _opp_get_next(opp_table, dynamic))) { in _opp_remove_all()
1532 opp->removed = true; in _opp_remove_all()
1533 dev_pm_opp_put(opp); in _opp_remove_all()
1584 struct dev_pm_opp *opp; in _opp_allocate() local
1589 supply_size = sizeof(*opp->supplies) * supply_count; in _opp_allocate()
1590 icc_size = sizeof(*opp->bandwidth) * table->path_count; in _opp_allocate()
1593 opp = kzalloc(sizeof(*opp) + supply_size + icc_size, GFP_KERNEL); in _opp_allocate()
1595 if (!opp) in _opp_allocate()
1599 opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); in _opp_allocate()
1601 opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); in _opp_allocate()
1602 INIT_LIST_HEAD(&opp->node); in _opp_allocate()
1604 return opp; in _opp_allocate()
1607 static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, in _opp_supported_by_regulators() argument
1620 opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1621 opp->supplies[i].u_volt_max)) { in _opp_supported_by_regulators()
1623 __func__, opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1624 opp->supplies[i].u_volt_max); in _opp_supported_by_regulators()
1648 struct dev_pm_opp *opp; in _opp_is_duplicate() local
1659 list_for_each_entry(opp, &opp_table->opp_list, node) { in _opp_is_duplicate()
1660 opp_cmp = _opp_compare_key(new_opp, opp); in _opp_is_duplicate()
1662 *head = &opp->node; in _opp_is_duplicate()
1671 __func__, opp->rate, opp->supplies[0].u_volt, in _opp_is_duplicate()
1672 opp->available, new_opp->rate, in _opp_is_duplicate()
1676 return opp->available && in _opp_is_duplicate()
1677 new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST; in _opp_is_duplicate()
1683 void _required_opps_available(struct dev_pm_opp *opp, int count) in _required_opps_available() argument
1688 if (opp->required_opps[i]->available) in _required_opps_available()
1691 opp->available = false; in _required_opps_available()
1693 __func__, opp->required_opps[i]->np, opp->rate); in _required_opps_available()
2495 struct dev_pm_opp *opp, *dest_opp = ERR_PTR(-ENODEV); in dev_pm_opp_xlate_required_opp() local
2510 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_required_opp()
2511 if (opp == src_opp) { in dev_pm_opp_xlate_required_opp()
2512 dest_opp = opp->required_opps[i]; in dev_pm_opp_xlate_required_opp()
2549 struct dev_pm_opp *opp; in dev_pm_opp_xlate_performance_state() local
2580 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_performance_state()
2581 if (opp->pstate == pstate) { in dev_pm_opp_xlate_performance_state()
2582 dest_pstate = opp->required_opps[i]->pstate; in dev_pm_opp_xlate_performance_state()
2650 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); in _opp_set_availability() local
2666 opp = tmp_opp; in _opp_set_availability()
2671 if (IS_ERR(opp)) { in _opp_set_availability()
2672 r = PTR_ERR(opp); in _opp_set_availability()
2677 if (opp->available == availability_req) in _opp_set_availability()
2680 opp->available = availability_req; in _opp_set_availability()
2682 dev_pm_opp_get(opp); in _opp_set_availability()
2688 opp); in _opp_set_availability()
2691 OPP_EVENT_DISABLE, opp); in _opp_set_availability()
2693 dev_pm_opp_put(opp); in _opp_set_availability()
2721 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); in dev_pm_opp_adjust_voltage() local
2737 opp = tmp_opp; in dev_pm_opp_adjust_voltage()
2742 if (IS_ERR(opp)) { in dev_pm_opp_adjust_voltage()
2743 r = PTR_ERR(opp); in dev_pm_opp_adjust_voltage()
2748 if (opp->supplies->u_volt == u_volt) in dev_pm_opp_adjust_voltage()
2751 opp->supplies->u_volt = u_volt; in dev_pm_opp_adjust_voltage()
2752 opp->supplies->u_volt_min = u_volt_min; in dev_pm_opp_adjust_voltage()
2753 opp->supplies->u_volt_max = u_volt_max; in dev_pm_opp_adjust_voltage()
2755 dev_pm_opp_get(opp); in dev_pm_opp_adjust_voltage()
2760 opp); in dev_pm_opp_adjust_voltage()
2762 dev_pm_opp_put(opp); in dev_pm_opp_adjust_voltage()