Lines Matching refs:pcdev

27 	struct pse_controller_dev *pcdev;  member
112 static void pse_release_pis(struct pse_controller_dev *pcdev) in pse_release_pis() argument
116 for (i = 0; i < pcdev->nr_lines; i++) { in pse_release_pis()
117 of_node_put(pcdev->pi[i].pairset[0].np); in pse_release_pis()
118 of_node_put(pcdev->pi[i].pairset[1].np); in pse_release_pis()
119 of_node_put(pcdev->pi[i].np); in pse_release_pis()
121 kfree(pcdev->pi); in pse_release_pis()
130 static int of_load_pse_pis(struct pse_controller_dev *pcdev) in of_load_pse_pis() argument
132 struct device_node *np = pcdev->dev->of_node; in of_load_pse_pis()
139 pcdev->pi = kcalloc(pcdev->nr_lines, sizeof(*pcdev->pi), GFP_KERNEL); in of_load_pse_pis()
140 if (!pcdev->pi) in of_load_pse_pis()
146 pcdev->no_of_pse_pi = true; in of_load_pse_pis()
159 dev_err(pcdev->dev, in of_load_pse_pis()
165 if (id >= pcdev->nr_lines) { in of_load_pse_pis()
166 dev_err(pcdev->dev, in of_load_pse_pis()
168 id, pcdev->nr_lines, node); in of_load_pse_pis()
173 if (pcdev->pi[id].np) { in of_load_pse_pis()
174 dev_err(pcdev->dev, in of_load_pse_pis()
176 pcdev->pi[id].np, node); in of_load_pse_pis()
188 dev_err(pcdev->dev, in of_load_pse_pis()
197 memcpy(&pcdev->pi[id], &pi, sizeof(pi)); in of_load_pse_pis()
204 pse_release_pis(pcdev); in of_load_pse_pis()
212 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_is_enabled() local
216 ops = pcdev->ops; in pse_pi_is_enabled()
221 mutex_lock(&pcdev->lock); in pse_pi_is_enabled()
222 ret = ops->pi_is_enabled(pcdev, id); in pse_pi_is_enabled()
223 mutex_unlock(&pcdev->lock); in pse_pi_is_enabled()
230 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_enable() local
234 ops = pcdev->ops; in pse_pi_enable()
239 mutex_lock(&pcdev->lock); in pse_pi_enable()
240 ret = ops->pi_enable(pcdev, id); in pse_pi_enable()
242 pcdev->pi[id].admin_state_enabled = 1; in pse_pi_enable()
243 mutex_unlock(&pcdev->lock); in pse_pi_enable()
250 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_disable() local
254 ops = pcdev->ops; in pse_pi_disable()
259 mutex_lock(&pcdev->lock); in pse_pi_disable()
260 ret = ops->pi_disable(pcdev, id); in pse_pi_disable()
262 pcdev->pi[id].admin_state_enabled = 0; in pse_pi_disable()
263 mutex_unlock(&pcdev->lock); in pse_pi_disable()
270 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in _pse_pi_get_voltage() local
274 ops = pcdev->ops; in _pse_pi_get_voltage()
279 return ops->pi_get_voltage(pcdev, id); in _pse_pi_get_voltage()
284 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_voltage() local
287 mutex_lock(&pcdev->lock); in pse_pi_get_voltage()
289 mutex_unlock(&pcdev->lock); in pse_pi_get_voltage()
294 static int _pse_ethtool_get_status(struct pse_controller_dev *pcdev,
301 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_current_limit() local
308 ops = pcdev->ops; in pse_pi_get_current_limit()
310 mutex_lock(&pcdev->lock); in pse_pi_get_current_limit()
312 ret = ops->pi_get_current_limit(pcdev, id); in pse_pi_get_current_limit()
322 dev_err(pcdev->dev, "Voltage null\n"); in pse_pi_get_current_limit()
330 ret = _pse_ethtool_get_status(pcdev, id, &extack, &st); in pse_pi_get_current_limit()
345 mutex_unlock(&pcdev->lock); in pse_pi_get_current_limit()
352 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_set_current_limit() local
356 ops = pcdev->ops; in pse_pi_set_current_limit()
361 mutex_lock(&pcdev->lock); in pse_pi_set_current_limit()
362 ret = ops->pi_set_current_limit(pcdev, id, max_uA); in pse_pi_set_current_limit()
363 mutex_unlock(&pcdev->lock); in pse_pi_set_current_limit()
378 devm_pse_pi_regulator_register(struct pse_controller_dev *pcdev, in devm_pse_pi_regulator_register() argument
386 rinit_data = devm_kzalloc(pcdev->dev, sizeof(*rinit_data), in devm_pse_pi_regulator_register()
391 rdesc = devm_kzalloc(pcdev->dev, sizeof(*rdesc), GFP_KERNEL); in devm_pse_pi_regulator_register()
402 rdesc->owner = pcdev->owner; in devm_pse_pi_regulator_register()
406 if (pcdev->ops->pi_set_current_limit) { in devm_pse_pi_regulator_register()
414 rconfig.dev = pcdev->dev; in devm_pse_pi_regulator_register()
415 rconfig.driver_data = pcdev; in devm_pse_pi_regulator_register()
418 rdev = devm_regulator_register(pcdev->dev, rdesc, &rconfig); in devm_pse_pi_regulator_register()
420 dev_err_probe(pcdev->dev, PTR_ERR(rdev), in devm_pse_pi_regulator_register()
425 pcdev->pi[id].rdev = rdev; in devm_pse_pi_regulator_register()
436 int pse_controller_register(struct pse_controller_dev *pcdev) in pse_controller_register() argument
441 mutex_init(&pcdev->lock); in pse_controller_register()
442 INIT_LIST_HEAD(&pcdev->pse_control_head); in pse_controller_register()
444 if (!pcdev->nr_lines) in pse_controller_register()
445 pcdev->nr_lines = 1; in pse_controller_register()
447 ret = of_load_pse_pis(pcdev); in pse_controller_register()
451 if (pcdev->ops->setup_pi_matrix) { in pse_controller_register()
452 ret = pcdev->ops->setup_pi_matrix(pcdev); in pse_controller_register()
460 reg_name_len = strlen(dev_name(pcdev->dev)) + 18; in pse_controller_register()
463 for (i = 0; i < pcdev->nr_lines; i++) { in pse_controller_register()
467 if (!pcdev->no_of_pse_pi && !pcdev->pi[i].np) in pse_controller_register()
470 reg_name = devm_kzalloc(pcdev->dev, reg_name_len, GFP_KERNEL); in pse_controller_register()
475 dev_name(pcdev->dev), i); in pse_controller_register()
477 ret = devm_pse_pi_regulator_register(pcdev, reg_name, i); in pse_controller_register()
483 list_add(&pcdev->list, &pse_controller_list); in pse_controller_register()
494 void pse_controller_unregister(struct pse_controller_dev *pcdev) in pse_controller_unregister() argument
496 pse_release_pis(pcdev); in pse_controller_unregister()
498 list_del(&pcdev->list); in pse_controller_unregister()
520 struct pse_controller_dev *pcdev) in devm_pse_controller_register() argument
530 ret = pse_controller_register(pcdev); in devm_pse_controller_register()
536 *pcdevp = pcdev; in devm_pse_controller_register()
552 if (psec->pcdev->pi[psec->id].admin_state_enabled) in __pse_control_release()
556 module_put(psec->pcdev->owner); in __pse_control_release()
585 pse_control_get_internal(struct pse_controller_dev *pcdev, unsigned int index) in pse_control_get_internal() argument
592 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_get_internal()
603 if (!try_module_get(pcdev->owner)) { in pse_control_get_internal()
608 psec->ps = devm_regulator_get_exclusive(pcdev->dev, in pse_control_get_internal()
609 rdev_get_name(pcdev->pi[index].rdev)); in pse_control_get_internal()
619 pcdev->pi[index].admin_state_enabled = ret; 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()
631 module_put(pcdev->owner); in pse_control_get_internal()
645 static int of_pse_match_pi(struct pse_controller_dev *pcdev, in of_pse_match_pi() argument
650 for (i = 0; i < pcdev->nr_lines; i++) { in of_pse_match_pi()
651 if (pcdev->pi[i].np == np) in of_pse_match_pi()
666 static int psec_id_xlate(struct pse_controller_dev *pcdev, in psec_id_xlate() argument
669 if (!pcdev->of_pse_n_cells) in psec_id_xlate()
672 if (pcdev->of_pse_n_cells > 1 || in psec_id_xlate()
673 pse_spec->args[0] >= pcdev->nr_lines) in psec_id_xlate()
681 struct pse_controller_dev *r, *pcdev; in of_pse_control_get() local
695 pcdev = NULL; in of_pse_control_get()
700 pcdev = r; in of_pse_control_get()
705 pcdev = r; in of_pse_control_get()
710 if (!pcdev) { in of_pse_control_get()
715 if (WARN_ON(args.args_count != pcdev->of_pse_n_cells)) { in of_pse_control_get()
720 if (pcdev->no_of_pse_pi) { in of_pse_control_get()
721 psec_id = psec_id_xlate(pcdev, &args); in of_pse_control_get()
729 psec = pse_control_get_internal(pcdev, psec_id); in of_pse_control_get()
739 static int _pse_ethtool_get_status(struct pse_controller_dev *pcdev, in _pse_ethtool_get_status() argument
746 ops = pcdev->ops; in _pse_ethtool_get_status()
753 return ops->ethtool_get_status(pcdev, id, extack, status); in _pse_ethtool_get_status()
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()
793 if (psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_c33_set_config()
799 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
803 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
823 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
827 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
903 return psec->pcdev->types & ETHTOOL_PSE_PODL; in pse_has_podl()
909 return psec->pcdev->types & ETHTOOL_PSE_C33; in pse_has_c33()