Lines Matching refs:psec
248 struct pse_control *psec; in pse_control_find_by_id() local
251 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_find_by_id()
252 if (psec->id == id) { in pse_control_find_by_id()
253 kref_get(&psec->refcnt); in pse_control_find_by_id()
255 return psec; in pse_control_find_by_id()
268 static struct net_device *pse_control_get_netdev(struct pse_control *psec) in pse_control_get_netdev() argument
272 if (!psec || !psec->attached_phydev) in pse_control_get_netdev()
275 return psec->attached_phydev->attached_dev; in pse_control_get_netdev()
1021 struct pse_control *psec; in pse_send_ntf_worker() local
1023 psec = pse_control_find_by_id(pcdev, ntf.id); in pse_send_ntf_worker()
1025 netdev = pse_control_get_netdev(psec); in pse_send_ntf_worker()
1029 pse_control_put(psec); in pse_send_ntf_worker()
1358 struct pse_control *psec = container_of(kref, struct pse_control, in __pse_control_release() local
1363 if (psec->pcdev->pi[psec->id].admin_state_enabled) in __pse_control_release()
1364 regulator_disable(psec->ps); in __pse_control_release()
1365 devm_regulator_put(psec->ps); in __pse_control_release()
1367 module_put(psec->pcdev->owner); in __pse_control_release()
1369 list_del(&psec->list); in __pse_control_release()
1370 kfree(psec); in __pse_control_release()
1373 static void __pse_control_put_internal(struct pse_control *psec) in __pse_control_put_internal() argument
1377 kref_put(&psec->refcnt, __pse_control_release); in __pse_control_put_internal()
1384 void pse_control_put(struct pse_control *psec) in pse_control_put() argument
1386 if (IS_ERR_OR_NULL(psec)) in pse_control_put()
1390 __pse_control_put_internal(psec); in pse_control_put()
1399 struct pse_control *psec; in pse_control_get_internal() local
1404 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_get_internal()
1405 if (psec->id == index) { in pse_control_get_internal()
1406 kref_get(&psec->refcnt); in pse_control_get_internal()
1407 return psec; in pse_control_get_internal()
1411 psec = kzalloc(sizeof(*psec), GFP_KERNEL); in pse_control_get_internal()
1412 if (!psec) in pse_control_get_internal()
1434 psec->ps = devm_regulator_get_exclusive(pcdev->dev, in pse_control_get_internal()
1436 if (IS_ERR(psec->ps)) { in pse_control_get_internal()
1437 ret = PTR_ERR(psec->ps); 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()
1443 psec->id = index; in pse_control_get_internal()
1444 psec->attached_phydev = phydev; in pse_control_get_internal()
1445 kref_init(&psec->refcnt); in pse_control_get_internal()
1447 return psec; in pse_control_get_internal()
1452 kfree(psec); in pse_control_get_internal()
1503 struct pse_control *psec; in of_pse_control_get() local
1531 psec = ERR_PTR(-EPROBE_DEFER); in of_pse_control_get()
1536 psec = ERR_PTR(-EINVAL); in of_pse_control_get()
1543 psec = ERR_PTR(psec_id); in of_pse_control_get()
1549 psec = pse_control_get_internal(pcdev, psec_id, phydev); in of_pse_control_get()
1555 return psec; in of_pse_control_get()
1565 static void pse_get_sw_admin_state(struct pse_control *psec, in pse_get_sw_admin_state() argument
1568 struct pse_pi *pi = &psec->pcdev->pi[psec->id]; in pse_get_sw_admin_state()
1570 if (pse_has_podl(psec)) { in pse_get_sw_admin_state()
1578 if (pse_has_c33(psec)) { in pse_get_sw_admin_state()
1596 int pse_ethtool_get_status(struct pse_control *psec, in pse_ethtool_get_status() argument
1607 pcdev = psec->pcdev; in pse_ethtool_get_status()
1610 pi = &pcdev->pi[psec->id]; in pse_ethtool_get_status()
1615 pse_get_sw_admin_state(psec, &admin_state); in pse_ethtool_get_status()
1617 ret = ops->pi_get_admin_state(pcdev, psec->id, 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()
1706 static int pse_ethtool_c33_set_config(struct pse_control *psec, in pse_ethtool_c33_set_config() argument
1721 if (psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_c33_set_config()
1722 !regulator_is_enabled(psec->ps)) { in pse_ethtool_c33_set_config()
1723 err = regulator_disable(psec->ps); in pse_ethtool_c33_set_config()
1727 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
1728 err = regulator_enable(psec->ps); in pse_ethtool_c33_set_config()
1731 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
1732 err = regulator_disable(psec->ps); in pse_ethtool_c33_set_config()
1741 static int pse_ethtool_podl_set_config(struct pse_control *psec, in pse_ethtool_podl_set_config() argument
1751 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
1752 err = regulator_enable(psec->ps); in pse_ethtool_podl_set_config()
1755 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
1756 err = regulator_disable(psec->ps); in pse_ethtool_podl_set_config()
1773 int pse_ethtool_set_config(struct pse_control *psec, in pse_ethtool_set_config() argument
1779 if (pse_has_c33(psec) && config->c33_admin_control) { in pse_ethtool_set_config()
1780 err = pse_ethtool_c33_set_config(psec, config); in pse_ethtool_set_config()
1785 if (pse_has_podl(psec) && config->podl_admin_control) in pse_ethtool_set_config()
1786 err = pse_ethtool_podl_set_config(psec, config); in pse_ethtool_set_config()
1846 int pse_ethtool_set_pw_limit(struct pse_control *psec, in pse_ethtool_set_pw_limit() argument
1856 ret = regulator_get_voltage(psec->ps); in pse_ethtool_set_pw_limit()
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()
1888 ret = regulator_set_current_limit(psec->ps, 0, uA); in pse_ethtool_set_pw_limit()
1890 pse_pi_update_pw_budget(psec->pcdev, psec->id, in pse_ethtool_set_pw_limit()
1907 int pse_ethtool_set_prio(struct pse_control *psec, in pse_ethtool_set_prio() argument
1911 struct pse_controller_dev *pcdev = psec->pcdev; in pse_ethtool_set_prio()
1915 if (!pcdev->pi[psec->id].pw_d) { in pse_ethtool_set_prio()
1924 switch (pcdev->pi[psec->id].pw_d->budget_eval_strategy) { 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()
1955 ret = ops->pi_set_prio(pcdev, psec->id, prio); in pse_ethtool_set_prio()
1968 bool pse_has_podl(struct pse_control *psec) in pse_has_podl() argument
1970 return psec->pcdev->types & ETHTOOL_PSE_PODL; in pse_has_podl()
1974 bool pse_has_c33(struct pse_control *psec) in pse_has_c33() argument
1976 return psec->pcdev->types & ETHTOOL_PSE_C33; in pse_has_c33()