Lines Matching refs:pr
262 static void scmi_powercap_unregister_all_zones(struct scmi_powercap_root *pr)
267 for (i = pr->num_zones - 1; i >= 0; i--) {
268 if (!list_empty(&pr->registered_zones[i])) {
271 list_for_each_entry(spz, &pr->registered_zones[i], node)
296 static int scmi_powercap_register_zone(struct scmi_powercap_root *pr,
314 list_move(&spz->node, &pr->registered_zones[spz->height]);
335 * @pr: A reference to the root powercap zones descriptors
367 struct scmi_powercap_root *pr)
373 zones_stack = kcalloc(pr->num_zones, sizeof(spz), GFP_KERNEL);
377 spz = list_first_entry_or_null(&pr->scmi_zones,
387 ret = scmi_powercap_register_zone(pr, spz, parent);
397 scmi_powercap_unregister_all_zones(pr);
405 spz = list_first_entry_or_null(&pr->scmi_zones,
421 struct scmi_powercap_root *pr;
435 pr = devm_kzalloc(dev, sizeof(*pr), GFP_KERNEL);
436 if (!pr)
444 pr->num_zones = ret;
446 pr->spzones = devm_kcalloc(dev, pr->num_zones,
447 sizeof(*pr->spzones), GFP_KERNEL);
448 if (!pr->spzones)
452 pr->registered_zones = devm_kcalloc(dev, pr->num_zones,
453 sizeof(*pr->registered_zones),
455 if (!pr->registered_zones)
458 INIT_LIST_HEAD(&pr->scmi_zones);
460 for (i = 0, spz = pr->spzones; i < pr->num_zones; i++, spz++) {
470 spz->spzones = pr->spzones;
472 INIT_LIST_HEAD(&pr->registered_zones[i]);
474 list_add_tail(&spz->node, &pr->scmi_zones);
494 ret = scmi_zones_register(dev, pr);
498 dev_set_drvdata(dev, pr);
506 struct scmi_powercap_root *pr = dev_get_drvdata(dev);
508 scmi_powercap_unregister_all_zones(pr);