Lines Matching refs:pcdev
28 struct pse_controller_dev *pcdev; member
113 static void pse_release_pis(struct pse_controller_dev *pcdev) in pse_release_pis() argument
117 for (i = 0; i < pcdev->nr_lines; i++) { in pse_release_pis()
118 of_node_put(pcdev->pi[i].pairset[0].np); in pse_release_pis()
119 of_node_put(pcdev->pi[i].pairset[1].np); in pse_release_pis()
120 of_node_put(pcdev->pi[i].np); in pse_release_pis()
122 kfree(pcdev->pi); in pse_release_pis()
131 static int of_load_pse_pis(struct pse_controller_dev *pcdev) in of_load_pse_pis() argument
133 struct device_node *np = pcdev->dev->of_node; in of_load_pse_pis()
140 pcdev->pi = kcalloc(pcdev->nr_lines, sizeof(*pcdev->pi), GFP_KERNEL); in of_load_pse_pis()
141 if (!pcdev->pi) in of_load_pse_pis()
147 pcdev->no_of_pse_pi = true; in of_load_pse_pis()
160 dev_err(pcdev->dev, in of_load_pse_pis()
166 if (id >= pcdev->nr_lines) { in of_load_pse_pis()
167 dev_err(pcdev->dev, in of_load_pse_pis()
169 id, pcdev->nr_lines, node); in of_load_pse_pis()
174 if (pcdev->pi[id].np) { in of_load_pse_pis()
175 dev_err(pcdev->dev, in of_load_pse_pis()
177 pcdev->pi[id].np, node); in of_load_pse_pis()
189 dev_err(pcdev->dev, in of_load_pse_pis()
198 memcpy(&pcdev->pi[id], &pi, sizeof(pi)); in of_load_pse_pis()
205 pse_release_pis(pcdev); in of_load_pse_pis()
213 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_is_enabled() local
218 ops = pcdev->ops; in pse_pi_is_enabled()
223 mutex_lock(&pcdev->lock); in pse_pi_is_enabled()
224 ret = ops->pi_get_admin_state(pcdev, id, &admin_state); in pse_pi_is_enabled()
233 mutex_unlock(&pcdev->lock); in pse_pi_is_enabled()
240 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_enable() local
244 ops = pcdev->ops; in pse_pi_enable()
249 mutex_lock(&pcdev->lock); in pse_pi_enable()
250 ret = ops->pi_enable(pcdev, id); in pse_pi_enable()
252 pcdev->pi[id].admin_state_enabled = 1; in pse_pi_enable()
253 mutex_unlock(&pcdev->lock); in pse_pi_enable()
260 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_disable() local
264 ops = pcdev->ops; in pse_pi_disable()
269 mutex_lock(&pcdev->lock); in pse_pi_disable()
270 ret = ops->pi_disable(pcdev, id); in pse_pi_disable()
272 pcdev->pi[id].admin_state_enabled = 0; in pse_pi_disable()
273 mutex_unlock(&pcdev->lock); in pse_pi_disable()
280 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in _pse_pi_get_voltage() local
284 ops = pcdev->ops; in _pse_pi_get_voltage()
289 return ops->pi_get_voltage(pcdev, id); in _pse_pi_get_voltage()
294 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_voltage() local
297 mutex_lock(&pcdev->lock); in pse_pi_get_voltage()
299 mutex_unlock(&pcdev->lock); in pse_pi_get_voltage()
306 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_get_current_limit() local
311 ops = pcdev->ops; in pse_pi_get_current_limit()
316 mutex_lock(&pcdev->lock); in pse_pi_get_current_limit()
317 ret = ops->pi_get_pw_limit(pcdev, id); in pse_pi_get_current_limit()
324 dev_err(pcdev->dev, "Voltage null\n"); in pse_pi_get_current_limit()
338 mutex_unlock(&pcdev->lock); in pse_pi_get_current_limit()
345 struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev); in pse_pi_set_current_limit() local
350 ops = pcdev->ops; in pse_pi_set_current_limit()
358 mutex_lock(&pcdev->lock); in pse_pi_set_current_limit()
361 dev_err(pcdev->dev, "Voltage null\n"); in pse_pi_set_current_limit()
372 ret = ops->pi_set_pw_limit(pcdev, id, mW); in pse_pi_set_current_limit()
374 mutex_unlock(&pcdev->lock); in pse_pi_set_current_limit()
389 devm_pse_pi_regulator_register(struct pse_controller_dev *pcdev, in devm_pse_pi_regulator_register() argument
397 rinit_data = devm_kzalloc(pcdev->dev, sizeof(*rinit_data), in devm_pse_pi_regulator_register()
402 rdesc = devm_kzalloc(pcdev->dev, sizeof(*rdesc), GFP_KERNEL); in devm_pse_pi_regulator_register()
413 rdesc->owner = pcdev->owner; in devm_pse_pi_regulator_register()
417 if (pcdev->ops->pi_set_pw_limit) in devm_pse_pi_regulator_register()
423 rconfig.dev = pcdev->dev; in devm_pse_pi_regulator_register()
424 rconfig.driver_data = pcdev; in devm_pse_pi_regulator_register()
426 rconfig.of_node = pcdev->pi[id].np; in devm_pse_pi_regulator_register()
428 rdev = devm_regulator_register(pcdev->dev, rdesc, &rconfig); in devm_pse_pi_regulator_register()
430 dev_err_probe(pcdev->dev, PTR_ERR(rdev), in devm_pse_pi_regulator_register()
435 pcdev->pi[id].rdev = rdev; in devm_pse_pi_regulator_register()
446 int pse_controller_register(struct pse_controller_dev *pcdev) in pse_controller_register() argument
451 mutex_init(&pcdev->lock); in pse_controller_register()
452 INIT_LIST_HEAD(&pcdev->pse_control_head); in pse_controller_register()
454 if (!pcdev->nr_lines) in pse_controller_register()
455 pcdev->nr_lines = 1; in pse_controller_register()
457 if (!pcdev->ops->pi_get_admin_state || in pse_controller_register()
458 !pcdev->ops->pi_get_pw_status) { in pse_controller_register()
459 dev_err(pcdev->dev, in pse_controller_register()
464 ret = of_load_pse_pis(pcdev); in pse_controller_register()
468 if (pcdev->ops->setup_pi_matrix) { in pse_controller_register()
469 ret = pcdev->ops->setup_pi_matrix(pcdev); in pse_controller_register()
477 reg_name_len = strlen(dev_name(pcdev->dev)) + 18; in pse_controller_register()
480 for (i = 0; i < pcdev->nr_lines; i++) { in pse_controller_register()
484 if (!pcdev->no_of_pse_pi && !pcdev->pi[i].np) in pse_controller_register()
487 reg_name = devm_kzalloc(pcdev->dev, reg_name_len, GFP_KERNEL); in pse_controller_register()
492 dev_name(pcdev->dev), i); in pse_controller_register()
494 ret = devm_pse_pi_regulator_register(pcdev, reg_name, i); in pse_controller_register()
500 list_add(&pcdev->list, &pse_controller_list); in pse_controller_register()
511 void pse_controller_unregister(struct pse_controller_dev *pcdev) in pse_controller_unregister() argument
513 pse_release_pis(pcdev); in pse_controller_unregister()
515 list_del(&pcdev->list); in pse_controller_unregister()
537 struct pse_controller_dev *pcdev) in devm_pse_controller_register() argument
547 ret = pse_controller_register(pcdev); in devm_pse_controller_register()
553 *pcdevp = pcdev; in devm_pse_controller_register()
569 if (psec->pcdev->pi[psec->id].admin_state_enabled) in __pse_control_release()
573 module_put(psec->pcdev->owner); in __pse_control_release()
602 pse_control_get_internal(struct pse_controller_dev *pcdev, unsigned int index) in pse_control_get_internal() argument
609 list_for_each_entry(psec, &pcdev->pse_control_head, list) { in pse_control_get_internal()
620 if (!try_module_get(pcdev->owner)) { in pse_control_get_internal()
625 psec->ps = devm_regulator_get_exclusive(pcdev->dev, in pse_control_get_internal()
626 rdev_get_name(pcdev->pi[index].rdev)); in pse_control_get_internal()
636 pcdev->pi[index].admin_state_enabled = ret; in pse_control_get_internal()
638 psec->pcdev = pcdev; in pse_control_get_internal()
639 list_add(&psec->list, &pcdev->pse_control_head); in pse_control_get_internal()
648 module_put(pcdev->owner); in pse_control_get_internal()
662 static int of_pse_match_pi(struct pse_controller_dev *pcdev, in of_pse_match_pi() argument
667 for (i = 0; i < pcdev->nr_lines; i++) { in of_pse_match_pi()
668 if (pcdev->pi[i].np == np) in of_pse_match_pi()
683 static int psec_id_xlate(struct pse_controller_dev *pcdev, in psec_id_xlate() argument
686 if (!pcdev->of_pse_n_cells) in psec_id_xlate()
689 if (pcdev->of_pse_n_cells > 1 || in psec_id_xlate()
690 pse_spec->args[0] >= pcdev->nr_lines) in psec_id_xlate()
698 struct pse_controller_dev *r, *pcdev; in of_pse_control_get() local
712 pcdev = NULL; in of_pse_control_get()
717 pcdev = r; in of_pse_control_get()
722 pcdev = r; in of_pse_control_get()
727 if (!pcdev) { in of_pse_control_get()
732 if (WARN_ON(args.args_count != pcdev->of_pse_n_cells)) { in of_pse_control_get()
737 if (pcdev->no_of_pse_pi) { in of_pse_control_get()
738 psec_id = psec_id_xlate(pcdev, &args); in of_pse_control_get()
746 psec = pse_control_get_internal(pcdev, psec_id); in of_pse_control_get()
771 struct pse_controller_dev *pcdev; in pse_ethtool_get_status() local
774 pcdev = psec->pcdev; in pse_ethtool_get_status()
775 ops = pcdev->ops; in pse_ethtool_get_status()
776 mutex_lock(&pcdev->lock); in pse_ethtool_get_status()
777 ret = ops->pi_get_admin_state(pcdev, psec->id, &admin_state); in pse_ethtool_get_status()
783 ret = ops->pi_get_pw_status(pcdev, psec->id, &pw_status); in pse_ethtool_get_status()
792 ret = ops->pi_get_ext_state(pcdev, psec->id, in pse_ethtool_get_status()
803 ret = ops->pi_get_pw_class(pcdev, psec->id); in pse_ethtool_get_status()
811 ret = ops->pi_get_actual_pw(pcdev, psec->id); in pse_ethtool_get_status()
819 ret = ops->pi_get_pw_limit(pcdev, psec->id); in pse_ethtool_get_status()
829 ret = ops->pi_get_pw_limit_ranges(pcdev, psec->id, in pse_ethtool_get_status()
839 mutex_unlock(&psec->pcdev->lock); in pse_ethtool_get_status()
859 if (psec->pcdev->pi[psec->id].admin_state_enabled && in pse_ethtool_c33_set_config()
865 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
869 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_c33_set_config()
889 if (!psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
893 if (psec->pcdev->pi[psec->id].admin_state_enabled) in pse_ethtool_podl_set_config()
972 return psec->pcdev->types & ETHTOOL_PSE_PODL; in pse_has_podl()
978 return psec->pcdev->types & ETHTOOL_PSE_C33; in pse_has_c33()