Lines Matching refs:pcdev

37 	struct pse_controller_dev *pcdev;  member
138 static void pse_release_pis(struct pse_controller_dev *pcdev) in pse_release_pis() argument
142 for (i = 0; i < pcdev->nr_lines; i++) { in pse_release_pis()
143 of_node_put(pcdev->pi[i].pairset[0].np); in pse_release_pis()
144 of_node_put(pcdev->pi[i].pairset[1].np); in pse_release_pis()
145 of_node_put(pcdev->pi[i].np); in pse_release_pis()
147 kfree(pcdev->pi); in pse_release_pis()
156 static int of_load_pse_pis(struct pse_controller_dev *pcdev) in of_load_pse_pis() argument
158 struct device_node *np = pcdev->dev->of_node; in of_load_pse_pis()
165 pcdev->pi = kcalloc(pcdev->nr_lines, sizeof(*pcdev->pi), GFP_KERNEL); in of_load_pse_pis()
166 if (!pcdev->pi) in of_load_pse_pis()
172 pcdev->no_of_pse_pi = true; in of_load_pse_pis()
185 dev_err(pcdev->dev, in of_load_pse_pis()
191 if (id >= pcdev->nr_lines) { in of_load_pse_pis()
192 dev_err(pcdev->dev, in of_load_pse_pis()
194 id, pcdev->nr_lines, node); in of_load_pse_pis()
199 if (pcdev->pi[id].np) { in of_load_pse_pis()
200 dev_err(pcdev->dev, in of_load_pse_pis()
202 pcdev->pi[id].np, node); in of_load_pse_pis()
214 dev_err(pcdev->dev, in of_load_pse_pis()
223 memcpy(&pcdev->pi[id], &pi, sizeof(pi)); in of_load_pse_pis()
230 pse_release_pis(pcdev); in of_load_pse_pis()
246 pse_control_find_by_id(struct pse_controller_dev *pcdev, int id) in pse_control_find_by_id() argument
251 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_find_by_id()
286 static int pse_pi_is_hw_enabled(struct pse_controller_dev *pcdev, int id) in pse_pi_is_hw_enabled() argument
291 ret = pcdev->ops->pi_get_admin_state(pcdev, id, &admin_state); in pse_pi_is_hw_enabled()
320 pse_pi_is_admin_enable_pending(struct pse_controller_dev *pcdev, int id) in pse_pi_is_admin_enable_pending() argument
325 if (!pcdev->pi[id].admin_state_enabled || in pse_pi_is_admin_enable_pending()
326 !pcdev->pi[id].isr_pd_detected) in pse_pi_is_admin_enable_pending()
329 ret = pse_pi_is_hw_enabled(pcdev, id); in pse_pi_is_admin_enable_pending()
337 static int _pse_pi_delivery_power_sw_pw_ctrl(struct pse_controller_dev *pcdev,
353 static void pse_pw_d_retry_power_delivery(struct pse_controller_dev *pcdev, in pse_pw_d_retry_power_delivery() argument
358 for (i = 0; i < pcdev->nr_lines; i++) { in pse_pw_d_retry_power_delivery()
359 int prio_max = pcdev->nr_lines; in pse_pw_d_retry_power_delivery()
362 if (pcdev->pi[i].pw_d != pw_d) in pse_pw_d_retry_power_delivery()
365 if (!pse_pi_is_admin_enable_pending(pcdev, i)) in pse_pw_d_retry_power_delivery()
371 if (pcdev->pi[i].prio > prio_max) in pse_pw_d_retry_power_delivery()
374 ret = _pse_pi_delivery_power_sw_pw_ctrl(pcdev, i, &extack); in pse_pw_d_retry_power_delivery()
376 prio_max = pcdev->pi[i].prio; in pse_pw_d_retry_power_delivery()
397 static bool pse_pw_d_is_sw_pw_control(struct pse_controller_dev *pcdev, in pse_pw_d_is_sw_pw_control() argument
406 pcdev->ops->pi_enable && pcdev->irq) in pse_pw_d_is_sw_pw_control()
414 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_is_enabled() local
418 ops = pcdev->ops; in pse_pi_is_enabled()
423 mutex_lock(&pcdev->lock); in pse_pi_is_enabled()
424 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d)) { in pse_pi_is_enabled()
425 ret = pcdev->pi[id].admin_state_enabled; in pse_pi_is_enabled()
429 ret = pse_pi_is_hw_enabled(pcdev, id); in pse_pi_is_enabled()
432 mutex_unlock(&pcdev->lock); in pse_pi_is_enabled()
458 static int _pse_pi_disable(struct pse_controller_dev *pcdev, int id) in _pse_pi_disable() argument
460 const struct pse_controller_ops *ops = pcdev->ops; in _pse_pi_disable()
466 ret = ops->pi_disable(pcdev, id); in _pse_pi_disable()
470 pse_pi_deallocate_pw_budget(&pcdev->pi[id]); in _pse_pi_disable()
472 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d)) in _pse_pi_disable()
473 pse_pw_d_retry_power_delivery(pcdev, pcdev->pi[id].pw_d); in _pse_pi_disable()
485 static int pse_disable_pi_pol(struct pse_controller_dev *pcdev, int id) in pse_disable_pi_pol() argument
491 dev_dbg(pcdev->dev, "Disabling PI %d to free power budget\n", id); in pse_disable_pi_pol()
493 ret = _pse_pi_disable(pcdev, id); in pse_disable_pi_pol()
499 kfifo_in_spinlocked(&pcdev->ntf_fifo, &ntf, 1, &pcdev->ntf_fifo_lock); in pse_disable_pi_pol()
500 schedule_work(&pcdev->ntf_work); in pse_disable_pi_pol()
514 static int pse_disable_pi_prio(struct pse_controller_dev *pcdev, in pse_disable_pi_prio() argument
520 for (i = 0; i < pcdev->nr_lines; i++) { in pse_disable_pi_prio()
523 if (pcdev->pi[i].prio != prio || in pse_disable_pi_prio()
524 pcdev->pi[i].pw_d != pw_d || in pse_disable_pi_prio()
525 pse_pi_is_hw_enabled(pcdev, i) <= 0) in pse_disable_pi_prio()
528 ret = pse_disable_pi_pol(pcdev, i); in pse_disable_pi_prio()
552 pse_pi_allocate_pw_budget_static_prio(struct pse_controller_dev *pcdev, int id, in pse_pi_allocate_pw_budget_static_prio() argument
555 struct pse_pi *pi = &pcdev->pi[id]; in pse_pi_allocate_pw_budget_static_prio()
558 _prio = pcdev->nr_lines; in pse_pi_allocate_pw_budget_static_prio()
567 ret = pse_disable_pi_prio(pcdev, pi->pw_d, _prio); in pse_pi_allocate_pw_budget_static_prio()
587 static int pse_pi_allocate_pw_budget(struct pse_controller_dev *pcdev, int id, in pse_pi_allocate_pw_budget() argument
590 struct pse_pi *pi = &pcdev->pi[id]; in pse_pi_allocate_pw_budget()
597 return pse_pi_allocate_pw_budget_static_prio(pcdev, id, pw_req, in pse_pi_allocate_pw_budget()
613 static int _pse_pi_delivery_power_sw_pw_ctrl(struct pse_controller_dev *pcdev, in _pse_pi_delivery_power_sw_pw_ctrl() argument
617 const struct pse_controller_ops *ops = pcdev->ops; in _pse_pi_delivery_power_sw_pw_ctrl()
618 struct pse_pi *pi = &pcdev->pi[id]; in _pse_pi_delivery_power_sw_pw_ctrl()
623 ret = ops->pi_enable(pcdev, id); in _pse_pi_delivery_power_sw_pw_ctrl()
631 ret = ops->pi_get_pw_req(pcdev, id); in _pse_pi_delivery_power_sw_pw_ctrl()
641 ret = ops->pi_get_pw_limit(pcdev, id); in _pse_pi_delivery_power_sw_pw_ctrl()
649 ret = pse_pi_allocate_pw_budget(pcdev, id, pw_req, extack); in _pse_pi_delivery_power_sw_pw_ctrl()
653 ret = ops->pi_enable(pcdev, id); in _pse_pi_delivery_power_sw_pw_ctrl()
667 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_enable() local
671 ops = pcdev->ops; in pse_pi_enable()
676 mutex_lock(&pcdev->lock); in pse_pi_enable()
677 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[id].pw_d)) { in pse_pi_enable()
681 if (pcdev->pi[id].isr_pd_detected) { in pse_pi_enable()
684 ret = _pse_pi_delivery_power_sw_pw_ctrl(pcdev, id, &extack); in pse_pi_enable()
687 pcdev->pi[id].admin_state_enabled = 1; in pse_pi_enable()
690 mutex_unlock(&pcdev->lock); in pse_pi_enable()
694 ret = ops->pi_enable(pcdev, id); in pse_pi_enable()
696 pcdev->pi[id].admin_state_enabled = 1; in pse_pi_enable()
697 mutex_unlock(&pcdev->lock); in pse_pi_enable()
704 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_disable() local
709 pi = &pcdev->pi[id]; in pse_pi_disable()
710 mutex_lock(&pcdev->lock); in pse_pi_disable()
711 ret = _pse_pi_disable(pcdev, id); in pse_pi_disable()
715 mutex_unlock(&pcdev->lock); in pse_pi_disable()
721 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in _pse_pi_get_voltage() local
725 ops = pcdev->ops; in _pse_pi_get_voltage()
730 return ops->pi_get_voltage(pcdev, id); in _pse_pi_get_voltage()
735 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_voltage() local
738 mutex_lock(&pcdev->lock); in pse_pi_get_voltage()
740 mutex_unlock(&pcdev->lock); in pse_pi_get_voltage()
747 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_current_limit() local
752 ops = pcdev->ops; in pse_pi_get_current_limit()
757 mutex_lock(&pcdev->lock); in pse_pi_get_current_limit()
758 ret = ops->pi_get_pw_limit(pcdev, id); in pse_pi_get_current_limit()
765 dev_err(pcdev->dev, "Voltage null\n"); in pse_pi_get_current_limit()
779 mutex_unlock(&pcdev->lock); in pse_pi_get_current_limit()
786 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_set_current_limit() local
791 ops = pcdev->ops; in pse_pi_set_current_limit()
799 mutex_lock(&pcdev->lock); in pse_pi_set_current_limit()
802 dev_err(pcdev->dev, "Voltage null\n"); in pse_pi_set_current_limit()
813 ret = ops->pi_set_pw_limit(pcdev, id, mW); in pse_pi_set_current_limit()
815 mutex_unlock(&pcdev->lock); in pse_pi_set_current_limit()
830 devm_pse_pi_regulator_register(struct pse_controller_dev *pcdev, in devm_pse_pi_regulator_register() argument
838 rinit_data = devm_kzalloc(pcdev->dev, sizeof(*rinit_data), in devm_pse_pi_regulator_register()
843 rdesc = devm_kzalloc(pcdev->dev, sizeof(*rdesc), GFP_KERNEL); in devm_pse_pi_regulator_register()
854 rdesc->owner = pcdev->owner; in devm_pse_pi_regulator_register()
858 if (pcdev->ops->pi_set_pw_limit) in devm_pse_pi_regulator_register()
864 rconfig.dev = pcdev->dev; in devm_pse_pi_regulator_register()
865 rconfig.driver_data = pcdev; in devm_pse_pi_regulator_register()
867 rconfig.of_node = pcdev->pi[id].np; in devm_pse_pi_regulator_register()
869 rdev = devm_regulator_register(pcdev->dev, rdesc, &rconfig); in devm_pse_pi_regulator_register()
871 dev_err_probe(pcdev->dev, PTR_ERR(rdev), in devm_pse_pi_regulator_register()
876 pcdev->pi[id].rdev = rdev; in devm_pse_pi_regulator_register()
896 static void pse_flush_pw_ds(struct pse_controller_dev *pcdev) in pse_flush_pw_ds() argument
901 for (i = 0; i < pcdev->nr_lines; i++) { in pse_flush_pw_ds()
902 if (!pcdev->pi[i].pw_d) in pse_flush_pw_ds()
905 pw_d = xa_load(&pse_pw_d_map, pcdev->pi[i].pw_d->id); in pse_flush_pw_ds()
945 static int pse_register_pw_ds(struct pse_controller_dev *pcdev) in pse_register_pw_ds() argument
950 for (i = 0; i < pcdev->nr_lines; i++) { in pse_register_pw_ds()
951 struct regulator_dev *rdev = pcdev->pi[i].rdev; in pse_register_pw_ds()
969 pcdev->pi[i].pw_d = pw_d; in pse_register_pw_ds()
978 pw_d = devm_pse_alloc_pw_d(pcdev->dev); in pse_register_pw_ds()
992 if (pcdev->supp_budget_eval_strategies) in pse_register_pw_ds()
993 pw_d->budget_eval_strategy = pcdev->supp_budget_eval_strategies; in pse_register_pw_ds()
997 pcdev->pi[i].pw_d = pw_d; in pse_register_pw_ds()
1014 struct pse_controller_dev *pcdev; in pse_send_ntf_worker() local
1017 pcdev = container_of(work, struct pse_controller_dev, ntf_work); in pse_send_ntf_worker()
1019 while (kfifo_out(&pcdev->ntf_fifo, &ntf, 1)) { in pse_send_ntf_worker()
1023 psec = pse_control_find_by_id(pcdev, ntf.id); in pse_send_ntf_worker()
1039 int pse_controller_register(struct pse_controller_dev *pcdev) in pse_controller_register() argument
1044 mutex_init(&pcdev->lock); in pse_controller_register()
1045 INIT_LIST_HEAD(&pcdev->pse_control_head); in pse_controller_register()
1046 spin_lock_init(&pcdev->ntf_fifo_lock); in pse_controller_register()
1047 ret = kfifo_alloc(&pcdev->ntf_fifo, pcdev->nr_lines, GFP_KERNEL); in pse_controller_register()
1049 dev_err(pcdev->dev, "failed to allocate kfifo notifications\n"); in pse_controller_register()
1052 INIT_WORK(&pcdev->ntf_work, pse_send_ntf_worker); in pse_controller_register()
1054 if (!pcdev->nr_lines) in pse_controller_register()
1055 pcdev->nr_lines = 1; in pse_controller_register()
1057 if (!pcdev->ops->pi_get_admin_state || in pse_controller_register()
1058 !pcdev->ops->pi_get_pw_status) { in pse_controller_register()
1059 dev_err(pcdev->dev, in pse_controller_register()
1064 ret = of_load_pse_pis(pcdev); in pse_controller_register()
1068 if (pcdev->ops->setup_pi_matrix) { in pse_controller_register()
1069 ret = pcdev->ops->setup_pi_matrix(pcdev); in pse_controller_register()
1077 reg_name_len = strlen(dev_name(pcdev->dev)) + 18; in pse_controller_register()
1080 for (i = 0; i < pcdev->nr_lines; i++) { in pse_controller_register()
1084 if (!pcdev->no_of_pse_pi && !pcdev->pi[i].np) in pse_controller_register()
1087 reg_name = devm_kzalloc(pcdev->dev, reg_name_len, GFP_KERNEL); in pse_controller_register()
1092 dev_name(pcdev->dev), i); in pse_controller_register()
1094 ret = devm_pse_pi_regulator_register(pcdev, reg_name, i); in pse_controller_register()
1099 ret = pse_register_pw_ds(pcdev); in pse_controller_register()
1104 list_add(&pcdev->list, &pse_controller_list); in pse_controller_register()
1115 void pse_controller_unregister(struct pse_controller_dev *pcdev) in pse_controller_unregister() argument
1117 pse_flush_pw_ds(pcdev); in pse_controller_unregister()
1118 pse_release_pis(pcdev); in pse_controller_unregister()
1119 if (pcdev->irq) in pse_controller_unregister()
1120 disable_irq(pcdev->irq); in pse_controller_unregister()
1121 cancel_work_sync(&pcdev->ntf_work); in pse_controller_unregister()
1122 kfifo_free(&pcdev->ntf_fifo); in pse_controller_unregister()
1124 list_del(&pcdev->list); in pse_controller_unregister()
1146 struct pse_controller_dev *pcdev) in devm_pse_controller_register() argument
1156 ret = pse_controller_register(pcdev); in devm_pse_controller_register()
1162 *pcdevp = pcdev; in devm_pse_controller_register()
1170 struct pse_controller_dev *pcdev; member
1203 static int pse_set_config_isr(struct pse_controller_dev *pcdev, int id, in pse_set_config_isr() argument
1214 dev_dbg(pcdev->dev, in pse_set_config_isr()
1223 pcdev->pi[id].isr_pd_detected = true; in pse_set_config_isr()
1224 if (pcdev->pi[id].admin_state_enabled) { in pse_set_config_isr()
1225 ret = _pse_pi_delivery_power_sw_pw_ctrl(pcdev, id, in pse_set_config_isr()
1231 if (pcdev->pi[id].admin_state_enabled && in pse_set_config_isr()
1232 pcdev->pi[id].isr_pd_detected) in pse_set_config_isr()
1233 ret = _pse_pi_disable(pcdev, id); in pse_set_config_isr()
1234 pcdev->pi[id].isr_pd_detected = false; in pse_set_config_isr()
1249 struct pse_controller_dev *pcdev; in pse_isr() local
1256 pcdev = h->pcdev; in pse_isr()
1259 memset(h->notifs, 0, pcdev->nr_lines * sizeof(*h->notifs)); in pse_isr()
1260 mutex_lock(&pcdev->lock); in pse_isr()
1261 ret = desc->map_event(irq, pcdev, h->notifs, &notifs_mask); in pse_isr()
1263 mutex_unlock(&pcdev->lock); in pse_isr()
1267 for_each_set_bit(i, &notifs_mask, pcdev->nr_lines) { in pse_isr()
1272 if (!pcdev->pi[i].rdev) in pse_isr()
1276 if (pse_pw_d_is_sw_pw_control(pcdev, pcdev->pi[i].pw_d)) { in pse_isr()
1277 ret = pse_set_config_isr(pcdev, i, notifs); in pse_isr()
1282 dev_dbg(h->pcdev->dev, in pse_isr()
1287 kfifo_in_spinlocked(&pcdev->ntf_fifo, &ntf, 1, in pse_isr()
1288 &pcdev->ntf_fifo_lock); in pse_isr()
1289 schedule_work(&pcdev->ntf_work); in pse_isr()
1292 regulator_notifier_call_chain(pcdev->pi[i].rdev, rnotifs, in pse_isr()
1296 mutex_unlock(&pcdev->lock); in pse_isr()
1310 int devm_pse_irq_helper(struct pse_controller_dev *pcdev, int irq, in devm_pse_irq_helper() argument
1313 struct device *dev = pcdev->dev; in devm_pse_irq_helper()
1326 h->pcdev = pcdev; in devm_pse_irq_helper()
1330 irq_name_len = strlen(dev_name(pcdev->dev)) + 5 + strlen(d->name) + 1; in devm_pse_irq_helper()
1335 snprintf(irq_name, irq_name_len, "pse-%s:%s", dev_name(pcdev->dev), in devm_pse_irq_helper()
1338 h->notifs = devm_kcalloc(dev, pcdev->nr_lines, in devm_pse_irq_helper()
1347 dev_err(pcdev->dev, "Failed to request IRQ %d\n", irq); in devm_pse_irq_helper()
1349 pcdev->irq = irq; in devm_pse_irq_helper()
1363 if (psec->pcdev->pi[psec->id].admin_state_enabled) in __pse_control_release()
1367 module_put(psec->pcdev->owner); in __pse_control_release()
1396 pse_control_get_internal(struct pse_controller_dev *pcdev, unsigned int index, in pse_control_get_internal() argument
1404 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_get_internal()
1415 if (!try_module_get(pcdev->owner)) { in pse_control_get_internal()
1420 if (!pcdev->ops->pi_get_admin_state) { in pse_control_get_internal()
1429 ret = pse_pi_is_hw_enabled(pcdev, index); in pse_control_get_internal()
1433 pcdev->pi[index].admin_state_enabled = ret; in pse_control_get_internal()
1434 psec->ps = devm_regulator_get_exclusive(pcdev->dev, in pse_control_get_internal()
1435 rdev_get_name(pcdev->pi[index].rdev)); in pse_control_get_internal()
1441 psec->pcdev = pcdev; in pse_control_get_internal()
1442 list_add(&psec->list, &pcdev->pse_control_head); in pse_control_get_internal()
1450 module_put(pcdev->owner); in pse_control_get_internal()
1464 static int of_pse_match_pi(struct pse_controller_dev *pcdev, in of_pse_match_pi() argument
1469 for (i = 0; i < pcdev->nr_lines; i++) { in of_pse_match_pi()
1470 if (pcdev->pi[i].np == np) in of_pse_match_pi()
1485 static int psec_id_xlate(struct pse_controller_dev *pcdev, in psec_id_xlate() argument
1488 if (!pcdev->of_pse_n_cells) in psec_id_xlate()
1491 if (pcdev->of_pse_n_cells > 1 || in psec_id_xlate()
1492 pse_spec->args[0] >= pcdev->nr_lines) in psec_id_xlate()
1501 struct pse_controller_dev *r, *pcdev; in of_pse_control_get() local
1515 pcdev = NULL; in of_pse_control_get()
1520 pcdev = r; in of_pse_control_get()
1525 pcdev = r; in of_pse_control_get()
1530 if (!pcdev) { in of_pse_control_get()
1535 if (WARN_ON(args.args_count != pcdev->of_pse_n_cells)) { in of_pse_control_get()
1540 if (pcdev->no_of_pse_pi) { in of_pse_control_get()
1541 psec_id = psec_id_xlate(pcdev, &args); in of_pse_control_get()
1549 psec = pse_control_get_internal(pcdev, psec_id, phydev); in of_pse_control_get()
1568 struct pse_pi *pi = &psec->pcdev->pi[psec->id]; in pse_get_sw_admin_state()
1603 struct pse_controller_dev *pcdev; in pse_ethtool_get_status() local
1607 pcdev = psec->pcdev; in pse_ethtool_get_status()
1608 ops = pcdev->ops; in pse_ethtool_get_status()
1610 pi = &pcdev->pi[psec->id]; in pse_ethtool_get_status()
1611 mutex_lock(&pcdev->lock); in pse_ethtool_get_status()
1614 if (pse_pw_d_is_sw_pw_control(pcdev, pi->pw_d)) { in pse_ethtool_get_status()
1617 ret = ops->pi_get_admin_state(pcdev, psec->id, in pse_ethtool_get_status()
1627 status->prio_max = pcdev->nr_lines - 1; in pse_ethtool_get_status()
1631 status->prio_max = pcdev->pis_prio_max; in pse_ethtool_get_status()
1633 ret = ops->pi_get_prio(pcdev, psec->id); in pse_ethtool_get_status()
1645 ret = ops->pi_get_pw_status(pcdev, psec->id, &pw_status); in pse_ethtool_get_status()
1654 ret = ops->pi_get_ext_state(pcdev, psec->id, in pse_ethtool_get_status()
1665 ret = ops->pi_get_pw_class(pcdev, psec->id); in pse_ethtool_get_status()
1673 ret = ops->pi_get_actual_pw(pcdev, psec->id); in pse_ethtool_get_status()
1681 ret = ops->pi_get_pw_limit(pcdev, psec->id); in pse_ethtool_get_status()
1691 ret = ops->pi_get_pw_limit_ranges(pcdev, psec->id, in pse_ethtool_get_status()
1701 mutex_unlock(&psec->pcdev->lock); in pse_ethtool_get_status()
1721 if (psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_c33_set_config()
1727 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
1731 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
1751 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
1755 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
1802 static int pse_pi_update_pw_budget(struct pse_controller_dev *pcdev, int id, in pse_pi_update_pw_budget() argument
1806 struct pse_pi *pi = &pcdev->pi[id]; in pse_pi_update_pw_budget()
1813 mutex_lock(&pcdev->lock); in pse_pi_update_pw_budget()
1834 mutex_unlock(&pcdev->lock); in pse_pi_update_pw_budget()
1877 if (pse_pw_d_is_sw_pw_control(psec->pcdev, in pse_ethtool_set_pw_limit()
1878 psec->pcdev->pi[psec->id].pw_d) && in pse_ethtool_set_pw_limit()
1879 psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_set_pw_limit()
1880 psec->pcdev->pi[psec->id].isr_pd_detected) { in pse_ethtool_set_pw_limit()
1881 ret = pse_pi_update_pw_budget(psec->pcdev, psec->id, in pse_ethtool_set_pw_limit()
1890 pse_pi_update_pw_budget(psec->pcdev, psec->id, in pse_ethtool_set_pw_limit()
1911 struct pse_controller_dev *pcdev = psec->pcdev; in pse_ethtool_set_prio() local
1915 if (!pcdev->pi[psec->id].pw_d) { in pse_ethtool_set_prio()
1923 mutex_lock(&pcdev->lock); in pse_ethtool_set_prio()
1924 switch (pcdev->pi[psec->id].pw_d->budget_eval_strategy) { in pse_ethtool_set_prio()
1926 if (prio >= pcdev->nr_lines) { in pse_ethtool_set_prio()
1929 prio, pcdev->nr_lines); in pse_ethtool_set_prio()
1934 pcdev->pi[psec->id].prio = prio; in pse_ethtool_set_prio()
1935 pse_pw_d_retry_power_delivery(pcdev, pcdev->pi[psec->id].pw_d); in pse_ethtool_set_prio()
1939 ops = psec->pcdev->ops; in pse_ethtool_set_prio()
1947 if (prio > pcdev->pis_prio_max) { in pse_ethtool_set_prio()
1950 prio, pcdev->pis_prio_max); in pse_ethtool_set_prio()
1955 ret = ops->pi_set_prio(pcdev, psec->id, prio); in pse_ethtool_set_prio()
1963 mutex_unlock(&pcdev->lock); in pse_ethtool_set_prio()
1970 return psec->pcdev->types & ETHTOOL_PSE_PODL; in pse_has_podl()
1976 return psec->pcdev->types & ETHTOOL_PSE_C33; in pse_has_c33()