Lines Matching refs:opp

22 #include "opp.h"
25 * Returns opp descriptor node for a device node, caller must
35 /* Returns opp descriptor node for a device, caller must do of_node_put() */
58 * OPP table contains a "opp-shared" property.
78 struct dev_pm_opp *opp;
82 list_for_each_entry(opp, &opp_table->opp_list, node) {
83 if (opp->np == opp_np) {
84 dev_pm_opp_get(opp);
86 return opp;
150 * Populate all devices and opp tables which are part of "required-opps" list.
197 dev_err(dev, "required-opp doesn't belong to genpd: %pOF\n",
240 if (of_property_read_bool(opp_np, "opp-shared"))
261 struct dev_pm_opp *opp)
263 struct dev_pm_opp **required_opps = opp->required_opps;
278 opp->required_opps = NULL;
283 struct dev_pm_opp *opp)
297 opp->required_opps = required_opps;
302 np = of_parse_required_opp(opp->np, i);
313 __func__, opp->np, i);
322 _of_opp_free_required_opps(opp_table, opp);
343 /* Lets not fail in case we are parsing opp-v1 bindings */
355 prop = of_find_property(np, "opp-peak-kBps", NULL);
436 * platform but there is an opp-supported-hw value set for
440 if (of_find_property(np, "opp-supported-hw", NULL))
446 count = of_property_count_u32_elems(np, "opp-supported-hw");
448 dev_err(dev, "%s: Invalid opp-supported-hw property (%d)\n",
460 ret = of_property_read_u32_index(np, "opp-supported-hw",
463 dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
482 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
490 /* Search for "opp-microvolt-<name>" */
492 snprintf(name, sizeof(name), "opp-microvolt-%s",
494 prop = of_find_property(opp->np, name, NULL);
498 /* Search for "opp-microvolt" */
499 sprintf(name, "opp-microvolt");
500 prop = of_find_property(opp->np, name, NULL);
513 dev_err(dev, "%s: opp-microvolt missing although OPP managing regulators\n",
523 dev_err(dev, "%s: opp-microvolt wasn't expected\n", __func__);
527 vcount = of_property_count_u32_elems(opp->np, name);
545 ret = of_property_read_u32_array(opp->np, name, microvolt, vcount);
552 /* Search for "opp-microamp-<name>" */
555 snprintf(name, sizeof(name), "opp-microamp-%s",
557 prop = of_find_property(opp->np, name, NULL);
561 /* Search for "opp-microamp" */
562 sprintf(name, "opp-microamp");
563 prop = of_find_property(opp->np, name, NULL);
567 icount = of_property_count_u32_elems(opp->np, name);
588 ret = of_property_read_u32_array(opp->np, name, microamp,
599 opp->supplies[i].u_volt = microvolt[j++];
602 opp->supplies[i].u_volt_min = opp->supplies[i].u_volt;
603 opp->supplies[i].u_volt_max = opp->supplies[i].u_volt;
605 opp->supplies[i].u_volt_min = microvolt[j++];
606 opp->supplies[i].u_volt_max = microvolt[j++];
610 opp->supplies[i].u_amp = microamp[i];
637 const char *name = peak ? "opp-peak-kBps" : "opp-avg-kBps";
682 ret = of_property_read_u64(np, "opp-hz", &rate);
696 * opp-peak-kBps = <path1_value path2_value>;
697 * opp-avg-kBps = <path1_value path2_value>;
709 if (!of_property_read_u32(np, "opp-level", &new_opp->level))
724 * This function adds an opp definition to the opp table and returns status. The
725 * opp can be controlled using dev_pm_opp_enable/disable functions and may be
732 * Duplicate OPPs (both freq and volt are same) and opp->available
736 * Duplicate OPPs (both freq and volt are same) and !opp->available
756 dev_err(dev, "%s: opp key field not found\n", __func__);
796 if (of_property_read_bool(np, "opp-suspend")) {
838 struct dev_pm_opp *opp;
851 /* We have opp-table node now, iterate over it and add OPPs */
853 opp = _opp_add_static_v2(opp_table, dev, np);
854 if (IS_ERR(opp)) {
855 ret = PTR_ERR(opp);
860 } else if (opp) {
872 list_for_each_entry(opp, &opp_table->opp_list, node) {
874 if (opp->pstate) {
949 * dev_pm_opp_of_add_table() - Initialize opp table from device tree
956 * Duplicate OPPs (both freq and volt are same) and opp->available
958 * Duplicate OPPs (both freq and volt are same) and !opp->available
963 * -EINVAL when invalid entries are found in opp-v2 table
991 * dev_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
1000 * Duplicate OPPs (both freq and volt are same) and opp->available
1002 * Duplicate OPPs (both freq and volt are same) and !opp->available
1007 * -EINVAL when invalid entries are found in opp-v2 table
1081 pr_debug("%s: couldn't find opp table for cpu:%d, %d\n",
1124 dev_dbg(cpu_dev, "%s: Couldn't find opp node.\n", __func__);
1131 if (!of_property_read_bool(np, "opp-shared"))
1150 pr_err("%pOF: Couldn't find opp node\n", cpu_np);
1155 /* CPUs are sharing opp node */
1181 struct dev_pm_opp *opp;
1197 opp = _find_opp_of_np(opp_table, required_np);
1198 if (opp) {
1199 pstate = opp->pstate;
1200 dev_pm_opp_put(opp);
1213 * dev_pm_opp_get_of_node() - Gets the DT node corresponding to an opp
1214 * @opp: opp for which DT node has to be returned for
1216 * Return: DT node corresponding to the opp, else 0 on success.
1220 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp)
1222 if (IS_ERR_OR_NULL(opp)) {
1227 return of_node_get(opp->np);
1246 struct dev_pm_opp *opp;
1263 opp = dev_pm_opp_find_freq_ceil(dev, &Hz);
1264 if (IS_ERR(opp))
1267 mV = dev_pm_opp_get_voltage(opp) / 1000;
1268 dev_pm_opp_put(opp);