Lines Matching full:pi
30 * @ps: PSE PI supply of the PSE control
61 struct pse_pi *pi,
74 pi->pairset[pairset_num].pinout = ALTERNATIVE_A;
76 pi->pairset[pairset_num].pinout = ALTERNATIVE_B;
87 pi->pairset[pairset_num].np = pairset_np;
93 * of_load_pse_pi_pairsets - load PSE PI pairsets pinout and polarity
95 * @pi: a pointer of the PSE PI to fill
96 * @npairsets: the number of pairsets (1 or 2) used by the PI
101 struct pse_pi *pi,
114 ret = of_load_single_pse_pi_pairset(node, pi, i);
120 pi->pairset[0].pinout == pi->pairset[1].pinout) {
121 pr_err("pse: two PI pairsets can not have identical pinout (%pOF)",
129 of_node_put(pi->pairset[0].np);
130 pi->pairset[0].np = NULL;
131 of_node_put(pi->pairset[1].np);
132 pi->pairset[1].np = NULL;
143 of_node_put(pcdev->pi[i].pairset[0].np);
144 of_node_put(pcdev->pi[i].pairset[1].np);
145 of_node_put(pcdev->pi[i].np);
147 kfree(pcdev->pi);
165 pcdev->pi = kcalloc(pcdev->nr_lines, sizeof(*pcdev->pi), GFP_KERNEL);
166 if (!pcdev->pi)
177 struct pse_pi pi = {0};
180 if (!of_node_name_eq(node, "pse-pi"))
199 if (pcdev->pi[id].np) {
202 pcdev->pi[id].np, node);
210 ret = of_load_pse_pi_pairsets(node, &pi, ret);
222 pi.np = node;
223 memcpy(&pcdev->pi[id], &pi, sizeof(pi));
279 * pse_pi_is_hw_enabled - Is PI enabled at the hardware level
281 * @id: Index of the PI
283 * Return: 1 if the PI is enabled at the hardware level, 0 if not, and
295 /* PI is well enabled at the hardware level */
304 * pse_pi_is_admin_enable_pending - Check if PI is in admin enable pending state
308 * @id: Index of the PI
310 * Detects if a PI is enabled in software with a PD detected, but the hardware
316 * Return: true if the PI has admin enable flag set in software but not yet
324 /* PI not enabled or nothing is plugged */
325 if (!pcdev->pi[id].admin_state_enabled ||
326 !pcdev->pi[id].isr_pd_detected)
330 /* PSE PI is already enabled at hardware level */
362 if (pcdev->pi[i].pw_d != pw_d)
368 /* Do not try to enable PI with a lower prio (higher value)
371 if (pcdev->pi[i].prio > prio_max)
376 prio_max = pcdev->pi[i].prio;
424 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d)) {
425 ret = pcdev->pi[id].admin_state_enabled;
438 * pse_pi_deallocate_pw_budget - Deallocate power budget of the PI
439 * @pi: a pointer to the PSE PI
441 static void pse_pi_deallocate_pw_budget(struct pse_pi *pi)
443 if (!pi->pw_d || !pi->pw_allocated_mW)
446 regulator_free_power_budget(pi->pw_d->supply, pi->pw_allocated_mW);
447 pi->pw_allocated_mW = 0;
470 pse_pi_deallocate_pw_budget(&pcdev->pi[id]);
472 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d))
473 pse_pw_d_retry_power_delivery(pcdev, pcdev->pi[id].pw_d);
479 * pse_disable_pi_pol - Disable a PI on a power budget policy
481 * @id: index of the PSE PI
491 dev_dbg(pcdev->dev, "Disabling PI %d to free power budget\n", id);
523 if (pcdev->pi[i].prio != prio ||
524 pcdev->pi[i].pw_d != pw_d ||
537 * pse_pi_allocate_pw_budget_static_prio - Allocate power budget for the PI
555 struct pse_pi *pi = &pcdev->pi[id];
559 while (regulator_request_power_budget(pi->pw_d->supply, pw_req) == -ERANGE) {
560 if (_prio <= pi->prio) {
562 "PI %d: not enough power budget available",
567 ret = pse_disable_pi_prio(pcdev, pi->pw_d, _prio);
574 pi->pw_allocated_mW = pw_req;
579 * pse_pi_allocate_pw_budget - Allocate power budget for the PI
590 struct pse_pi *pi = &pcdev->pi[id];
592 if (!pi->pw_d)
596 if (pi->pw_d->budget_eval_strategy == PSE_BUDGET_EVAL_STRAT_STATIC)
604 * _pse_pi_delivery_power_sw_pw_ctrl - Enable PSE PI in case of software power
618 struct pse_pi *pi = &pcdev->pi[id];
626 "PI %d: enable error %d",
655 pse_pi_deallocate_pw_budget(pi);
657 "PI %d: enable error %d",
677 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d)) {
681 if (pcdev->pi[id].isr_pd_detected) {
687 pcdev->pi[id].admin_state_enabled = 1;
696 pcdev->pi[id].admin_state_enabled = 1;
705 struct pse_pi *pi;
709 pi = &pcdev->pi[id];
713 pi->admin_state_enabled = 0;
848 * PSE PI id for the well functioning of the PSE controls.
867 rconfig.of_node = pcdev->pi[id].np;
876 pcdev->pi[id].rdev = rdev;
902 if (!pcdev->pi[i].pw_d)
905 pw_d = xa_load(&pse_pw_d_map, pcdev->pi[i].pw_d->id);
951 struct regulator_dev *rdev = pcdev->pi[i].rdev;
969 pcdev->pi[i].pw_d = pw_d;
997 pcdev->pi[i].pw_d = pw_d;
1079 /* Register PI regulators */
1084 if (!pcdev->no_of_pse_pi && !pcdev->pi[i].np)
1215 "PI %d: error, connection and disconnection reported simultaneously",
1223 pcdev->pi[id].isr_pd_detected = true;
1224 if (pcdev->pi[id].admin_state_enabled) {
1231 if (pcdev->pi[id].admin_state_enabled &&
1232 pcdev->pi[id].isr_pd_detected)
1234 pcdev->pi[id].isr_pd_detected = false;
1271 /* Do nothing PI not described */
1272 if (!pcdev->pi[i].rdev)
1276 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[i].pw_d)) {
1292 regulator_notifier_call_chain(pcdev->pi[i].rdev, rnotifs,
1363 if (psec->pcdev->pi[psec->id].admin_state_enabled)
1433 pcdev->pi[index].admin_state_enabled = ret;
1435 rdev_get_name(pcdev->pi[index].rdev));
1458 * of_pse_match_pi - Find the PSE PI id matching the device node phandle
1462 * Return: id of the PSE PI, -EINVAL if not found
1470 if (pcdev->pi[i].np == np)
1568 struct pse_pi *pi = &psec->pcdev->pi[psec->id];
1571 if (pi->admin_state_enabled)
1579 if (pi->admin_state_enabled)
1604 struct pse_pi *pi;
1610 pi = &pcdev->pi[psec->id];
1612 if (pi->pw_d) {
1613 status->pw_d_id = pi->pw_d->id;
1614 if (pse_pw_d_is_sw_pw_control(pcdev, pi->pw_d)) {
1625 switch (pi->pw_d->budget_eval_strategy) {
1628 status->prio = pi->prio;
1718 * the PI is forcibly turn off by the controller. Call
1721 if (psec->pcdev->pi[psec->id].admin_state_enabled &&
1727 if (!psec->pcdev->pi[psec->id].admin_state_enabled)
1731 if (psec->pcdev->pi[psec->id].admin_state_enabled)
1751 if (!psec->pcdev->pi[psec->id].admin_state_enabled)
1755 if (psec->pcdev->pi[psec->id].admin_state_enabled)
1796 * @id: index of the PSE PI
1806 struct pse_pi *pi = &pcdev->pi[id];
1814 previous_pw_allocated = pi->pw_allocated_mW;
1819 ret = regulator_request_power_budget(pi->pw_d->supply, pw_diff);
1822 "PI %d: not enough power budget available",
1828 regulator_free_power_budget(pi->pw_d->supply, -pw_diff);
1830 pi->pw_allocated_mW = pw_req;
1878 psec->pcdev->pi[psec->id].pw_d) &&
1879 psec->pcdev->pi[psec->id].admin_state_enabled &&
1880 psec->pcdev->pi[psec->id].isr_pd_detected) {
1899 * pse_ethtool_set_prio - Set PSE PI priority according to the budget
1915 if (!pcdev->pi[psec->id].pw_d) {
1924 switch (pcdev->pi[psec->id].pw_d->budget_eval_strategy) {
1934 pcdev->pi[psec->id].prio = prio;
1935 pse_pw_d_retry_power_delivery(pcdev, pcdev->pi[psec->id].pw_d);