Lines Matching refs:psec

547 	struct pse_control *psec = container_of(kref, struct pse_control,  in __pse_control_release()  local
552 if (psec->pcdev->pi[psec->id].admin_state_enabled) in __pse_control_release()
553 regulator_disable(psec->ps); in __pse_control_release()
554 devm_regulator_put(psec->ps); in __pse_control_release()
556 module_put(psec->pcdev->owner); in __pse_control_release()
558 list_del(&psec->list); in __pse_control_release()
559 kfree(psec); in __pse_control_release()
562 static void __pse_control_put_internal(struct pse_control *psec) in __pse_control_put_internal() argument
566 kref_put(&psec->refcnt, __pse_control_release); in __pse_control_put_internal()
573 void pse_control_put(struct pse_control *psec) in pse_control_put() argument
575 if (IS_ERR_OR_NULL(psec)) in pse_control_put()
579 __pse_control_put_internal(psec); in pse_control_put()
587 struct pse_control *psec; in pse_control_get_internal() local
592 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_get_internal()
593 if (psec->id == index) { in pse_control_get_internal()
594 kref_get(&psec->refcnt); in pse_control_get_internal()
595 return psec; in pse_control_get_internal()
599 psec = kzalloc(sizeof(*psec), GFP_KERNEL); in pse_control_get_internal()
600 if (!psec) in pse_control_get_internal()
608 psec->ps = devm_regulator_get_exclusive(pcdev->dev, in pse_control_get_internal()
610 if (IS_ERR(psec->ps)) { in pse_control_get_internal()
611 ret = PTR_ERR(psec->ps); in pse_control_get_internal()
615 ret = regulator_is_enabled(psec->ps); in pse_control_get_internal()
621 psec->pcdev = pcdev; in pse_control_get_internal()
622 list_add(&psec->list, &pcdev->pse_control_head); in pse_control_get_internal()
623 psec->id = index; in pse_control_get_internal()
624 kref_init(&psec->refcnt); in pse_control_get_internal()
626 return psec; in pse_control_get_internal()
629 devm_regulator_put(psec->ps); in pse_control_get_internal()
633 kfree(psec); in pse_control_get_internal()
683 struct pse_control *psec; in of_pse_control_get() local
711 psec = ERR_PTR(-EPROBE_DEFER); in of_pse_control_get()
716 psec = ERR_PTR(-EINVAL); in of_pse_control_get()
723 psec = ERR_PTR(psec_id); in of_pse_control_get()
729 psec = pse_control_get_internal(pcdev, psec_id); in of_pse_control_get()
735 return psec; in of_pse_control_get()
764 int pse_ethtool_get_status(struct pse_control *psec, in pse_ethtool_get_status() argument
770 mutex_lock(&psec->pcdev->lock); in pse_ethtool_get_status()
771 err = _pse_ethtool_get_status(psec->pcdev, psec->id, extack, status); in pse_ethtool_get_status()
772 mutex_unlock(&psec->pcdev->lock); in pse_ethtool_get_status()
778 static int pse_ethtool_c33_set_config(struct pse_control *psec, in pse_ethtool_c33_set_config() argument
793 if (psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_c33_set_config()
794 !regulator_is_enabled(psec->ps)) { in pse_ethtool_c33_set_config()
795 err = regulator_disable(psec->ps); in pse_ethtool_c33_set_config()
799 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
800 err = regulator_enable(psec->ps); in pse_ethtool_c33_set_config()
803 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
804 err = regulator_disable(psec->ps); in pse_ethtool_c33_set_config()
813 static int pse_ethtool_podl_set_config(struct pse_control *psec, in pse_ethtool_podl_set_config() argument
823 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
824 err = regulator_enable(psec->ps); in pse_ethtool_podl_set_config()
827 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
828 err = regulator_disable(psec->ps); in pse_ethtool_podl_set_config()
845 int pse_ethtool_set_config(struct pse_control *psec, in pse_ethtool_set_config() argument
851 if (pse_has_c33(psec) && config->c33_admin_control) { in pse_ethtool_set_config()
852 err = pse_ethtool_c33_set_config(psec, config); in pse_ethtool_set_config()
857 if (pse_has_podl(psec) && config->podl_admin_control) in pse_ethtool_set_config()
858 err = pse_ethtool_podl_set_config(psec, config); in pse_ethtool_set_config()
872 int pse_ethtool_set_pw_limit(struct pse_control *psec, in pse_ethtool_set_pw_limit() argument
879 ret = regulator_get_voltage(psec->ps); in pse_ethtool_set_pw_limit()
897 return regulator_set_current_limit(psec->ps, 0, uA); in pse_ethtool_set_pw_limit()
901 bool pse_has_podl(struct pse_control *psec) in pse_has_podl() argument
903 return psec->pcdev->types & ETHTOOL_PSE_PODL; in pse_has_podl()
907 bool pse_has_c33(struct pse_control *psec) in pse_has_c33() argument
909 return psec->pcdev->types & ETHTOOL_PSE_C33; in pse_has_c33()