Lines Matching refs:opp

22 #include "opp.h"
28 * Returns opp descriptor node for a device node, caller must
38 /* Returns opp descriptor node for a device, caller must do of_node_put() */
61 * OPP table contains a "opp-shared" property.
81 struct dev_pm_opp *opp;
85 list_for_each_entry(opp, &opp_table->opp_list, node) {
86 if (opp->np == opp_np) {
87 dev_pm_opp_get(opp);
89 return opp;
158 * Populate all devices and opp tables which are part of "required-opps" list.
252 if (of_property_read_bool(opp_np, "opp-shared"))
273 struct dev_pm_opp *opp)
275 struct dev_pm_opp **required_opps = opp->required_opps;
289 opp->required_opps = NULL;
293 void _of_clear_opp(struct opp_table *opp_table, struct dev_pm_opp *opp)
295 _of_opp_free_required_opps(opp_table, opp);
296 of_node_put(opp->np);
301 struct dev_pm_opp *opp)
315 opp->required_opps = required_opps;
324 np = of_parse_required_opp(opp->np, i);
335 __func__, opp->np, i);
344 _of_opp_free_required_opps(opp_table, opp);
354 struct dev_pm_opp *opp;
356 list_for_each_entry(opp, &opp_table->opp_list, node) {
357 required_np = of_parse_required_opp(opp->np, index);
361 opp->required_opps[index] = _find_opp_of_np(new_table, required_np);
364 if (!opp->required_opps[index]) {
366 __func__, opp->np, index);
379 struct dev_pm_opp *opp;
393 /* Required opp-table is already parsed */
405 * Newly added table isn't the required opp-table for
427 /* All required opp-tables found, remove from lazy list */
432 list_for_each_entry(opp, &opp_table->opp_list, node)
433 _required_opps_available(opp, opp_table->required_opp_count);
456 /* Lets not fail in case we are parsing opp-v1 bindings */
468 prop = of_find_property(np, "opp-peak-kBps", NULL);
547 * platform but there is an opp-supported-hw value set for
551 if (of_property_present(np, "opp-supported-hw"))
557 count = of_property_count_u32_elems(np, "opp-supported-hw");
559 dev_err(dev, "%s: Invalid opp-supported-hw property (%d)\n",
571 ret = of_property_read_u32_index(np, "opp-supported-hw",
574 dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
593 static u32 *_parse_named_prop(struct dev_pm_opp *opp, struct device *dev,
602 /* Search for "opp-<prop_type>-<name>" */
604 snprintf(name, sizeof(name), "opp-%s-%s", prop_type,
606 prop = of_find_property(opp->np, name, NULL);
610 /* Search for "opp-<prop_type>" */
611 snprintf(name, sizeof(name), "opp-%s", prop_type);
612 prop = of_find_property(opp->np, name, NULL);
617 count = of_property_count_u32_elems(opp->np, name);
643 ret = of_property_read_u32_array(opp->np, name, out, count);
656 static u32 *opp_parse_microvolt(struct dev_pm_opp *opp, struct device *dev,
661 microvolt = _parse_named_prop(opp, dev, opp_table, "microvolt", triplet);
675 dev_err(dev, "%s: opp-microvolt missing although OPP managing regulators\n",
684 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
691 microvolt = opp_parse_microvolt(opp, dev, opp_table, &triplet);
695 microamp = _parse_named_prop(opp, dev, opp_table, "microamp", NULL);
701 microwatt = _parse_named_prop(opp, dev, opp_table, "microwatt", NULL);
718 opp->supplies[i].u_volt = microvolt[j++];
721 opp->supplies[i].u_volt_min = microvolt[j++];
722 opp->supplies[i].u_volt_max = microvolt[j++];
724 opp->supplies[i].u_volt_min = opp->supplies[i].u_volt;
725 opp->supplies[i].u_volt_max = opp->supplies[i].u_volt;
730 opp->supplies[i].u_amp = microamp[i];
733 opp->supplies[i].u_watt = microwatt[i];
765 prop = of_find_property(np, "opp-hz", NULL);
771 pr_err("%s: Count mismatch between opp-hz and clk_count (%d %d)\n",
780 ret = of_property_read_u64_array(np, "opp-hz", rates, count);
782 pr_err("%s: Error parsing opp-hz: %d\n", __func__, ret);
805 const char *name = peak ? "opp-peak-kBps" : "opp-avg-kBps";
857 * opp-peak-kBps = <path1_value path2_value>;
858 * opp-avg-kBps = <path1_value path2_value>;
870 if (!of_property_read_u32(np, "opp-level", &new_opp->level))
885 * This function adds an opp definition to the opp table and returns status. The
886 * opp can be controlled using dev_pm_opp_enable/disable functions and may be
893 * Duplicate OPPs (both freq and volt are same) and opp->available
897 * Duplicate OPPs (both freq and volt are same) and !opp->available
916 dev_err(dev, "%s: opp key field not found\n", __func__);
953 if (of_property_read_bool(np, "opp-suspend")) {
996 struct dev_pm_opp *opp;
1009 /* We have opp-table node now, iterate over it and add OPPs */
1011 opp = _opp_add_static_v2(opp_table, dev, np);
1012 if (IS_ERR(opp)) {
1013 ret = PTR_ERR(opp);
1018 } else if (opp) {
1152 * devm_pm_opp_of_add_table() - Initialize opp table from device tree
1161 * Duplicate OPPs (both freq and volt are same) and opp->available
1163 * Duplicate OPPs (both freq and volt are same) and !opp->available
1168 * -EINVAL when invalid entries are found in opp-v2 table
1177 * dev_pm_opp_of_add_table() - Initialize opp table from device tree
1184 * Duplicate OPPs (both freq and volt are same) and opp->available
1186 * Duplicate OPPs (both freq and volt are same) and !opp->available
1191 * -EINVAL when invalid entries are found in opp-v2 table
1200 * dev_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
1216 * devm_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
1272 pr_debug("%s: couldn't find opp table for cpu:%d, %d\n",
1315 dev_dbg(cpu_dev, "%s: Couldn't find opp node.\n", __func__);
1322 if (!of_property_read_bool(np, "opp-shared"))
1341 pr_err("%pOF: Couldn't find opp node\n", cpu_np);
1346 /* CPUs are sharing opp node */
1372 struct dev_pm_opp *opp;
1394 opp = _find_opp_of_np(opp_table, required_np);
1395 if (opp) {
1396 pstate = opp->level;
1397 dev_pm_opp_put(opp);
1410 * dev_pm_opp_get_of_node() - Gets the DT node corresponding to an opp
1411 * @opp: opp for which DT node has to be returned for
1413 * Return: DT node corresponding to the opp, else 0 on success.
1417 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp)
1419 if (IS_ERR_OR_NULL(opp)) {
1424 return of_node_get(opp->np);
1440 struct dev_pm_opp *opp;
1445 opp = dev_pm_opp_find_freq_ceil(dev, &opp_freq);
1446 if (IS_ERR(opp))
1449 opp_power = dev_pm_opp_get_power(opp);
1450 dev_pm_opp_put(opp);
1475 struct dev_pm_opp *opp;
1492 opp = dev_pm_opp_find_freq_ceil(dev, &Hz);
1493 if (IS_ERR(opp))
1496 mV = dev_pm_opp_get_voltage(opp) / 1000;
1497 dev_pm_opp_put(opp);
1514 struct dev_pm_opp *opp;
1517 opp = dev_pm_opp_find_freq_ceil(dev, &freq);
1518 if (IS_ERR(opp))
1521 power = dev_pm_opp_get_power(opp);
1522 dev_pm_opp_put(opp);