Lines Matching refs:rdev

84 static int _regulator_is_enabled(struct regulator_dev *rdev);
86 static int _regulator_get_current_limit(struct regulator_dev *rdev);
87 static unsigned int _regulator_get_mode(struct regulator_dev *rdev);
88 static int _notifier_call_chain(struct regulator_dev *rdev,
90 static int _regulator_do_set_voltage(struct regulator_dev *rdev,
92 static int regulator_balance_voltage(struct regulator_dev *rdev,
94 static struct regulator *create_regulator(struct regulator_dev *rdev,
100 const char *rdev_get_name(struct regulator_dev *rdev) in rdev_get_name() argument
102 if (rdev->constraints && rdev->constraints->name) in rdev_get_name()
103 return rdev->constraints->name; in rdev_get_name()
104 else if (rdev->desc->name) in rdev_get_name()
105 return rdev->desc->name; in rdev_get_name()
116 static bool regulator_ops_is_valid(struct regulator_dev *rdev, int ops) in regulator_ops_is_valid() argument
118 if (!rdev->constraints) { in regulator_ops_is_valid()
119 rdev_err(rdev, "no constraints\n"); in regulator_ops_is_valid()
123 if (rdev->constraints->valid_ops_mask & ops) in regulator_ops_is_valid()
140 static inline int regulator_lock_nested(struct regulator_dev *rdev, in regulator_lock_nested() argument
148 if (!ww_mutex_trylock(&rdev->mutex, ww_ctx)) { in regulator_lock_nested()
149 if (rdev->mutex_owner == current) in regulator_lock_nested()
150 rdev->ref_cnt++; in regulator_lock_nested()
156 ret = ww_mutex_lock(&rdev->mutex, ww_ctx); in regulator_lock_nested()
164 rdev->ref_cnt++; in regulator_lock_nested()
165 rdev->mutex_owner = current; in regulator_lock_nested()
183 static void regulator_lock(struct regulator_dev *rdev) in regulator_lock() argument
185 regulator_lock_nested(rdev, NULL); in regulator_lock()
195 static void regulator_unlock(struct regulator_dev *rdev) in regulator_unlock() argument
199 if (--rdev->ref_cnt == 0) { in regulator_unlock()
200 rdev->mutex_owner = NULL; in regulator_unlock()
201 ww_mutex_unlock(&rdev->mutex); in regulator_unlock()
204 WARN_ON_ONCE(rdev->ref_cnt < 0); in regulator_unlock()
209 static bool regulator_supply_is_couple(struct regulator_dev *rdev) in regulator_supply_is_couple() argument
214 for (i = 1; i < rdev->coupling_desc.n_coupled; i++) { in regulator_supply_is_couple()
215 c_rdev = rdev->coupling_desc.coupled_rdevs[i]; in regulator_supply_is_couple()
217 if (rdev->supply->rdev == c_rdev) in regulator_supply_is_couple()
224 static void regulator_unlock_recursive(struct regulator_dev *rdev, in regulator_unlock_recursive() argument
231 c_rdev = rdev->coupling_desc.coupled_rdevs[i - 1]; in regulator_unlock_recursive()
237 supply_rdev = c_rdev->supply->rdev; in regulator_unlock_recursive()
248 static int regulator_lock_recursive(struct regulator_dev *rdev, in regulator_lock_recursive() argument
256 for (i = 0; i < rdev->coupling_desc.n_coupled; i++) { in regulator_lock_recursive()
257 c_rdev = rdev->coupling_desc.coupled_rdevs[i]; in regulator_lock_recursive()
278 err = regulator_lock_recursive(c_rdev->supply->rdev, in regulator_lock_recursive()
292 regulator_unlock_recursive(rdev, i); in regulator_lock_recursive()
305 static void regulator_unlock_dependent(struct regulator_dev *rdev, in regulator_unlock_dependent() argument
308 regulator_unlock_recursive(rdev, rdev->coupling_desc.n_coupled); in regulator_unlock_dependent()
320 static void regulator_lock_dependent(struct regulator_dev *rdev, in regulator_lock_dependent() argument
338 err = regulator_lock_recursive(rdev, in regulator_lock_dependent()
420 int regulator_check_voltage(struct regulator_dev *rdev, in regulator_check_voltage() argument
425 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) { in regulator_check_voltage()
426 rdev_err(rdev, "voltage operation not allowed\n"); in regulator_check_voltage()
430 if (*max_uV > rdev->constraints->max_uV) in regulator_check_voltage()
431 *max_uV = rdev->constraints->max_uV; in regulator_check_voltage()
432 if (*min_uV < rdev->constraints->min_uV) in regulator_check_voltage()
433 *min_uV = rdev->constraints->min_uV; in regulator_check_voltage()
436 rdev_err(rdev, "unsupportable voltage range: %d-%duV\n", in regulator_check_voltage()
453 int regulator_check_consumers(struct regulator_dev *rdev, in regulator_check_consumers() argument
460 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_check_consumers()
476 rdev_err(rdev, "Restricting voltage, %u-%uuV\n", in regulator_check_consumers()
485 static int regulator_check_current_limit(struct regulator_dev *rdev, in regulator_check_current_limit() argument
490 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_CURRENT)) { in regulator_check_current_limit()
491 rdev_err(rdev, "current operation not allowed\n"); in regulator_check_current_limit()
495 if (*max_uA > rdev->constraints->max_uA) in regulator_check_current_limit()
496 *max_uA = rdev->constraints->max_uA; in regulator_check_current_limit()
497 if (*min_uA < rdev->constraints->min_uA) in regulator_check_current_limit()
498 *min_uA = rdev->constraints->min_uA; in regulator_check_current_limit()
501 rdev_err(rdev, "unsupportable current range: %d-%duA\n", in regulator_check_current_limit()
510 static int regulator_mode_constrain(struct regulator_dev *rdev, in regulator_mode_constrain() argument
520 rdev_err(rdev, "invalid mode %x specified\n", *mode); in regulator_mode_constrain()
524 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_MODE)) { in regulator_mode_constrain()
525 rdev_err(rdev, "mode operation not allowed\n"); in regulator_mode_constrain()
534 if (rdev->constraints->valid_modes_mask & *mode) in regulator_mode_constrain()
543 regulator_get_suspend_state(struct regulator_dev *rdev, suspend_state_t state) in regulator_get_suspend_state() argument
545 if (rdev->constraints == NULL) in regulator_get_suspend_state()
550 return &rdev->constraints->state_standby; in regulator_get_suspend_state()
552 return &rdev->constraints->state_mem; in regulator_get_suspend_state()
554 return &rdev->constraints->state_disk; in regulator_get_suspend_state()
561 regulator_get_suspend_state_check(struct regulator_dev *rdev, suspend_state_t state) in regulator_get_suspend_state_check() argument
565 rstate = regulator_get_suspend_state(rdev, state); in regulator_get_suspend_state_check()
575 if (rdev->desc->ops->set_suspend_voltage || in regulator_get_suspend_state_check()
576 rdev->desc->ops->set_suspend_mode) in regulator_get_suspend_state_check()
577 rdev_warn(rdev, "No configuration\n"); in regulator_get_suspend_state_check()
587 struct regulator_dev *rdev = dev_get_drvdata(dev); in microvolts_show() local
590 regulator_lock(rdev); in microvolts_show()
591 uV = regulator_get_voltage_rdev(rdev); in microvolts_show()
592 regulator_unlock(rdev); in microvolts_show()
603 struct regulator_dev *rdev = dev_get_drvdata(dev); in microamps_show() local
605 return sprintf(buf, "%d\n", _regulator_get_current_limit(rdev)); in microamps_show()
612 struct regulator_dev *rdev = dev_get_drvdata(dev); in name_show() local
614 return sprintf(buf, "%s\n", rdev_get_name(rdev)); in name_show()
641 struct regulator_dev *rdev = dev_get_drvdata(dev); in opmode_show() local
643 return regulator_print_opmode(buf, _regulator_get_mode(rdev)); in opmode_show()
660 struct regulator_dev *rdev = dev_get_drvdata(dev); in state_show() local
663 regulator_lock(rdev); in state_show()
664 ret = regulator_print_state(buf, _regulator_is_enabled(rdev)); in state_show()
665 regulator_unlock(rdev); in state_show()
674 struct regulator_dev *rdev = dev_get_drvdata(dev); in status_show() local
678 status = rdev->desc->ops->get_status(rdev); in status_show()
721 struct regulator_dev *rdev = dev_get_drvdata(dev); in min_microamps_show() local
723 if (!rdev->constraints) in min_microamps_show()
726 return sprintf(buf, "%d\n", rdev->constraints->min_uA); in min_microamps_show()
733 struct regulator_dev *rdev = dev_get_drvdata(dev); in max_microamps_show() local
735 if (!rdev->constraints) in max_microamps_show()
738 return sprintf(buf, "%d\n", rdev->constraints->max_uA); in max_microamps_show()
745 struct regulator_dev *rdev = dev_get_drvdata(dev); in min_microvolts_show() local
747 if (!rdev->constraints) in min_microvolts_show()
750 return sprintf(buf, "%d\n", rdev->constraints->min_uV); in min_microvolts_show()
757 struct regulator_dev *rdev = dev_get_drvdata(dev); in max_microvolts_show() local
759 if (!rdev->constraints) in max_microvolts_show()
762 return sprintf(buf, "%d\n", rdev->constraints->max_uV); in max_microvolts_show()
769 struct regulator_dev *rdev = dev_get_drvdata(dev); in requested_microamps_show() local
773 regulator_lock(rdev); in requested_microamps_show()
774 list_for_each_entry(regulator, &rdev->consumer_list, list) { in requested_microamps_show()
778 regulator_unlock(rdev); in requested_microamps_show()
786 struct regulator_dev *rdev = dev_get_drvdata(dev); in num_users_show() local
787 return sprintf(buf, "%d\n", rdev->use_count); in num_users_show()
794 struct regulator_dev *rdev = dev_get_drvdata(dev); in type_show() local
796 switch (rdev->desc->type) { in type_show()
809 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_mem_microvolts_show() local
811 return sprintf(buf, "%d\n", rdev->constraints->state_mem.uV); in suspend_mem_microvolts_show()
818 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_disk_microvolts_show() local
820 return sprintf(buf, "%d\n", rdev->constraints->state_disk.uV); in suspend_disk_microvolts_show()
827 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_standby_microvolts_show() local
829 return sprintf(buf, "%d\n", rdev->constraints->state_standby.uV); in suspend_standby_microvolts_show()
836 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_mem_mode_show() local
839 rdev->constraints->state_mem.mode); in suspend_mem_mode_show()
846 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_disk_mode_show() local
849 rdev->constraints->state_disk.mode); in suspend_disk_mode_show()
856 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_standby_mode_show() local
859 rdev->constraints->state_standby.mode); in suspend_standby_mode_show()
866 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_mem_state_show() local
869 rdev->constraints->state_mem.enabled); in suspend_mem_state_show()
876 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_disk_state_show() local
879 rdev->constraints->state_disk.enabled); in suspend_disk_state_show()
886 struct regulator_dev *rdev = dev_get_drvdata(dev); in suspend_standby_state_show() local
889 rdev->constraints->state_standby.enabled); in suspend_standby_state_show()
896 struct regulator_dev *rdev = dev_get_drvdata(dev); in bypass_show() local
901 ret = rdev->desc->ops->get_bypass(rdev, &bypass); in bypass_show()
917 static int drms_uA_update(struct regulator_dev *rdev) in drms_uA_update() argument
927 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_DRMS)) { in drms_uA_update()
928 rdev_dbg(rdev, "DRMS operation not allowed\n"); in drms_uA_update()
932 if (!rdev->desc->ops->get_optimum_mode && in drms_uA_update()
933 !rdev->desc->ops->set_load) in drms_uA_update()
936 if (!rdev->desc->ops->set_mode && in drms_uA_update()
937 !rdev->desc->ops->set_load) in drms_uA_update()
941 list_for_each_entry(sibling, &rdev->consumer_list, list) { in drms_uA_update()
946 current_uA += rdev->constraints->system_load; in drms_uA_update()
948 if (rdev->desc->ops->set_load) { in drms_uA_update()
950 err = rdev->desc->ops->set_load(rdev, current_uA); in drms_uA_update()
952 rdev_err(rdev, "failed to set load %d: %pe\n", in drms_uA_update()
956 output_uV = regulator_get_voltage_rdev(rdev); in drms_uA_update()
958 rdev_err(rdev, "invalid output voltage found\n"); in drms_uA_update()
964 if (rdev->supply) in drms_uA_update()
965 input_uV = regulator_get_voltage(rdev->supply); in drms_uA_update()
967 input_uV = rdev->constraints->input_uV; in drms_uA_update()
969 rdev_err(rdev, "invalid input voltage found\n"); in drms_uA_update()
974 mode = rdev->desc->ops->get_optimum_mode(rdev, input_uV, in drms_uA_update()
978 err = regulator_mode_constrain(rdev, &mode); in drms_uA_update()
980 rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV: %pe\n", in drms_uA_update()
985 err = rdev->desc->ops->set_mode(rdev, mode); in drms_uA_update()
987 rdev_err(rdev, "failed to set optimum mode %x: %pe\n", in drms_uA_update()
994 static int __suspend_set_state(struct regulator_dev *rdev, in __suspend_set_state() argument
1000 rdev->desc->ops->set_suspend_enable) in __suspend_set_state()
1001 ret = rdev->desc->ops->set_suspend_enable(rdev); in __suspend_set_state()
1003 rdev->desc->ops->set_suspend_disable) in __suspend_set_state()
1004 ret = rdev->desc->ops->set_suspend_disable(rdev); in __suspend_set_state()
1009 rdev_err(rdev, "failed to enabled/disable: %pe\n", ERR_PTR(ret)); in __suspend_set_state()
1013 if (rdev->desc->ops->set_suspend_voltage && rstate->uV > 0) { in __suspend_set_state()
1014 ret = rdev->desc->ops->set_suspend_voltage(rdev, rstate->uV); in __suspend_set_state()
1016 rdev_err(rdev, "failed to set voltage: %pe\n", ERR_PTR(ret)); in __suspend_set_state()
1021 if (rdev->desc->ops->set_suspend_mode && rstate->mode > 0) { in __suspend_set_state()
1022 ret = rdev->desc->ops->set_suspend_mode(rdev, rstate->mode); in __suspend_set_state()
1024 rdev_err(rdev, "failed to set mode: %pe\n", ERR_PTR(ret)); in __suspend_set_state()
1032 static int suspend_set_initial_state(struct regulator_dev *rdev) in suspend_set_initial_state() argument
1036 rstate = regulator_get_suspend_state_check(rdev, in suspend_set_initial_state()
1037 rdev->constraints->initial_state); in suspend_set_initial_state()
1041 return __suspend_set_state(rdev, rstate); in suspend_set_initial_state()
1045 static void print_constraints_debug(struct regulator_dev *rdev) in print_constraints_debug() argument
1047 struct regulation_constraints *constraints = rdev->constraints; in print_constraints_debug()
1066 ret = regulator_get_voltage_rdev(rdev); in print_constraints_debug()
1089 ret = _regulator_get_current_limit(rdev); in print_constraints_debug()
1110 _regulator_is_enabled(rdev) ? "enabled" : "disabled"); in print_constraints_debug()
1112 rdev_dbg(rdev, "%s\n", buf); in print_constraints_debug()
1115 static inline void print_constraints_debug(struct regulator_dev *rdev) {} in print_constraints_debug() argument
1118 static void print_constraints(struct regulator_dev *rdev) in print_constraints() argument
1120 struct regulation_constraints *constraints = rdev->constraints; in print_constraints()
1122 print_constraints_debug(rdev); in print_constraints()
1125 !regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) in print_constraints()
1126 rdev_warn(rdev, in print_constraints()
1130 static int machine_constraints_voltage(struct regulator_dev *rdev, in machine_constraints_voltage() argument
1133 const struct regulator_ops *ops = rdev->desc->ops; in machine_constraints_voltage()
1137 if (rdev->constraints->apply_uV && in machine_constraints_voltage()
1138 rdev->constraints->min_uV && rdev->constraints->max_uV) { in machine_constraints_voltage()
1140 int current_uV = regulator_get_voltage_rdev(rdev); in machine_constraints_voltage()
1144 rdev_info(rdev, "Setting %d-%duV\n", in machine_constraints_voltage()
1145 rdev->constraints->min_uV, in machine_constraints_voltage()
1146 rdev->constraints->max_uV); in machine_constraints_voltage()
1147 _regulator_do_set_voltage(rdev, in machine_constraints_voltage()
1148 rdev->constraints->min_uV, in machine_constraints_voltage()
1149 rdev->constraints->max_uV); in machine_constraints_voltage()
1150 current_uV = regulator_get_voltage_rdev(rdev); in machine_constraints_voltage()
1155 rdev_err(rdev, in machine_constraints_voltage()
1169 if (current_uV < rdev->constraints->min_uV) { in machine_constraints_voltage()
1170 target_min = rdev->constraints->min_uV; in machine_constraints_voltage()
1171 target_max = rdev->constraints->min_uV; in machine_constraints_voltage()
1174 if (current_uV > rdev->constraints->max_uV) { in machine_constraints_voltage()
1175 target_min = rdev->constraints->max_uV; in machine_constraints_voltage()
1176 target_max = rdev->constraints->max_uV; in machine_constraints_voltage()
1180 rdev_info(rdev, "Bringing %duV into %d-%duV\n", in machine_constraints_voltage()
1183 rdev, target_min, target_max); in machine_constraints_voltage()
1185 rdev_err(rdev, in machine_constraints_voltage()
1196 if (ops->list_voltage && rdev->desc->n_voltages) { in machine_constraints_voltage()
1197 int count = rdev->desc->n_voltages; in machine_constraints_voltage()
1220 rdev_err(rdev, "invalid voltage constraints\n"); in machine_constraints_voltage()
1225 if (rdev->desc->continuous_voltage_range) in machine_constraints_voltage()
1232 value = ops->list_voltage(rdev, i); in machine_constraints_voltage()
1245 rdev_err(rdev, in machine_constraints_voltage()
1253 rdev_dbg(rdev, "override min_uV, %d -> %d\n", in machine_constraints_voltage()
1258 rdev_dbg(rdev, "override max_uV, %d -> %d\n", in machine_constraints_voltage()
1267 static int machine_constraints_current(struct regulator_dev *rdev, in machine_constraints_current() argument
1270 const struct regulator_ops *ops = rdev->desc->ops; in machine_constraints_current()
1277 rdev_err(rdev, "Invalid current constraints\n"); in machine_constraints_current()
1282 rdev_warn(rdev, "Operation of current configuration missing\n"); in machine_constraints_current()
1287 ret = ops->set_current_limit(rdev, constraints->min_uA, in machine_constraints_current()
1290 rdev_err(rdev, "Failed to set current constraint, %d\n", ret); in machine_constraints_current()
1297 static int _regulator_do_enable(struct regulator_dev *rdev);
1299 static int notif_set_limit(struct regulator_dev *rdev, in notif_set_limit() argument
1315 return set(rdev, limit, severity, enable); in notif_set_limit()
1318 static int handle_notify_limits(struct regulator_dev *rdev, in handle_notify_limits() argument
1328 ret = notif_set_limit(rdev, set, limits->prot, in handle_notify_limits()
1334 ret = notif_set_limit(rdev, set, limits->err, in handle_notify_limits()
1340 ret = notif_set_limit(rdev, set, limits->warn, in handle_notify_limits()
1355 static int set_machine_constraints(struct regulator_dev *rdev) in set_machine_constraints() argument
1358 const struct regulator_ops *ops = rdev->desc->ops; in set_machine_constraints()
1360 ret = machine_constraints_voltage(rdev, rdev->constraints); in set_machine_constraints()
1364 ret = machine_constraints_current(rdev, rdev->constraints); in set_machine_constraints()
1368 if (rdev->constraints->ilim_uA && ops->set_input_current_limit) { in set_machine_constraints()
1369 ret = ops->set_input_current_limit(rdev, in set_machine_constraints()
1370 rdev->constraints->ilim_uA); in set_machine_constraints()
1372 rdev_err(rdev, "failed to set input limit: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1378 if (rdev->constraints->initial_state) { in set_machine_constraints()
1379 ret = suspend_set_initial_state(rdev); in set_machine_constraints()
1381 rdev_err(rdev, "failed to set suspend state: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1386 if (rdev->constraints->initial_mode) { in set_machine_constraints()
1388 rdev_err(rdev, "no set_mode operation\n"); in set_machine_constraints()
1392 ret = ops->set_mode(rdev, rdev->constraints->initial_mode); in set_machine_constraints()
1394 rdev_err(rdev, "failed to set initial mode: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1397 } else if (rdev->constraints->system_load) { in set_machine_constraints()
1402 drms_uA_update(rdev); in set_machine_constraints()
1405 if ((rdev->constraints->ramp_delay || rdev->constraints->ramp_disable) in set_machine_constraints()
1407 ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay); in set_machine_constraints()
1409 rdev_err(rdev, "failed to set ramp_delay: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1414 if (rdev->constraints->pull_down && ops->set_pull_down) { in set_machine_constraints()
1415 ret = ops->set_pull_down(rdev); in set_machine_constraints()
1417 rdev_err(rdev, "failed to set pull down: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1422 if (rdev->constraints->soft_start && ops->set_soft_start) { in set_machine_constraints()
1423 ret = ops->set_soft_start(rdev); in set_machine_constraints()
1425 rdev_err(rdev, "failed to set soft start: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1444 if (rdev->constraints->over_current_protection in set_machine_constraints()
1446 int lim = rdev->constraints->over_curr_limits.prot; in set_machine_constraints()
1448 ret = ops->set_over_current_protection(rdev, lim, in set_machine_constraints()
1452 rdev_err(rdev, "failed to set over current protection: %pe\n", in set_machine_constraints()
1458 if (rdev->constraints->over_current_detection) in set_machine_constraints()
1459 ret = handle_notify_limits(rdev, in set_machine_constraints()
1461 &rdev->constraints->over_curr_limits); in set_machine_constraints()
1464 rdev_err(rdev, "failed to set over current limits: %pe\n", in set_machine_constraints()
1468 rdev_warn(rdev, in set_machine_constraints()
1472 if (rdev->constraints->over_voltage_detection) in set_machine_constraints()
1473 ret = handle_notify_limits(rdev, in set_machine_constraints()
1475 &rdev->constraints->over_voltage_limits); in set_machine_constraints()
1478 rdev_err(rdev, "failed to set over voltage limits %pe\n", in set_machine_constraints()
1482 rdev_warn(rdev, in set_machine_constraints()
1486 if (rdev->constraints->under_voltage_detection) in set_machine_constraints()
1487 ret = handle_notify_limits(rdev, in set_machine_constraints()
1489 &rdev->constraints->under_voltage_limits); in set_machine_constraints()
1492 rdev_err(rdev, "failed to set under voltage limits %pe\n", in set_machine_constraints()
1496 rdev_warn(rdev, in set_machine_constraints()
1500 if (rdev->constraints->over_temp_detection) in set_machine_constraints()
1501 ret = handle_notify_limits(rdev, in set_machine_constraints()
1503 &rdev->constraints->temp_limits); in set_machine_constraints()
1506 rdev_err(rdev, "failed to set temperature limits %pe\n", in set_machine_constraints()
1510 rdev_warn(rdev, in set_machine_constraints()
1514 if (rdev->constraints->active_discharge && ops->set_active_discharge) { in set_machine_constraints()
1515 bool ad_state = (rdev->constraints->active_discharge == in set_machine_constraints()
1518 ret = ops->set_active_discharge(rdev, ad_state); in set_machine_constraints()
1520 rdev_err(rdev, "failed to set active discharge: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1528 if (rdev->constraints->always_on || rdev->constraints->boot_on) { in set_machine_constraints()
1532 if (rdev->supply_name && !rdev->supply) in set_machine_constraints()
1535 if (rdev->supply) { in set_machine_constraints()
1536 ret = regulator_enable(rdev->supply); in set_machine_constraints()
1538 _regulator_put(rdev->supply); in set_machine_constraints()
1539 rdev->supply = NULL; in set_machine_constraints()
1544 ret = _regulator_do_enable(rdev); in set_machine_constraints()
1546 rdev_err(rdev, "failed to enable: %pe\n", ERR_PTR(ret)); in set_machine_constraints()
1550 if (rdev->constraints->always_on) in set_machine_constraints()
1551 rdev->use_count++; in set_machine_constraints()
1552 } else if (rdev->desc->off_on_delay) { in set_machine_constraints()
1553 rdev->last_off = ktime_get(); in set_machine_constraints()
1556 print_constraints(rdev); in set_machine_constraints()
1569 static int set_supply(struct regulator_dev *rdev, in set_supply() argument
1574 rdev_dbg(rdev, "supplied by %s\n", rdev_get_name(supply_rdev)); in set_supply()
1579 rdev->supply = create_regulator(supply_rdev, &rdev->dev, "SUPPLY"); in set_supply()
1580 if (rdev->supply == NULL) { in set_supply()
1600 static int set_consumer_device_supply(struct regulator_dev *rdev, in set_consumer_device_supply() argument
1619 new_node->regulator = rdev; in set_consumer_device_supply()
1647 dev_name(&rdev->dev), rdev_get_name(rdev)); in set_consumer_device_supply()
1663 static void unset_regulator_supplies(struct regulator_dev *rdev) in unset_regulator_supplies() argument
1668 if (rdev == node->regulator) { in unset_regulator_supplies()
1682 const struct regulation_constraints *c = regulator->rdev->constraints; in constraint_flags_read_file()
1727 static struct regulator *create_regulator(struct regulator_dev *rdev, in create_regulator() argument
1758 regulator->rdev = rdev; in create_regulator()
1761 regulator_lock(rdev); in create_regulator()
1762 list_add(&regulator->list, &rdev->consumer_list); in create_regulator()
1763 regulator_unlock(rdev); in create_regulator()
1769 err = sysfs_create_link_nowarn(&rdev->dev.kobj, &dev->kobj, in create_regulator()
1772 rdev_dbg(rdev, "could not add device link %s: %pe\n", in create_regulator()
1779 regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs); in create_regulator()
1781 rdev_dbg(rdev, "Failed to create debugfs directory\n"); in create_regulator()
1799 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS) && in create_regulator()
1800 _regulator_is_enabled(rdev)) in create_regulator()
1806 static int _regulator_get_enable_time(struct regulator_dev *rdev) in _regulator_get_enable_time() argument
1808 if (rdev->constraints && rdev->constraints->enable_time) in _regulator_get_enable_time()
1809 return rdev->constraints->enable_time; in _regulator_get_enable_time()
1810 if (rdev->desc->ops->enable_time) in _regulator_get_enable_time()
1811 return rdev->desc->ops->enable_time(rdev); in _regulator_get_enable_time()
1812 return rdev->desc->enable_time; in _regulator_get_enable_time()
1924 static int regulator_resolve_supply(struct regulator_dev *rdev) in regulator_resolve_supply() argument
1927 struct device *dev = rdev->dev.parent; in regulator_resolve_supply()
1931 if (!rdev->supply_name) in regulator_resolve_supply()
1935 if (rdev->supply) in regulator_resolve_supply()
1938 r = regulator_dev_lookup(dev, rdev->supply_name); in regulator_resolve_supply()
1951 rdev->supply_name, rdev->desc->name); in regulator_resolve_supply()
1957 if (r == rdev) { in regulator_resolve_supply()
1959 rdev->desc->name, rdev->supply_name); in regulator_resolve_supply()
1974 if (r->dev.parent && r->dev.parent != rdev->dev.parent) { in regulator_resolve_supply()
1994 regulator_lock(rdev); in regulator_resolve_supply()
1997 if (rdev->supply) { in regulator_resolve_supply()
1998 regulator_unlock(rdev); in regulator_resolve_supply()
2003 ret = set_supply(rdev, r); in regulator_resolve_supply()
2005 regulator_unlock(rdev); in regulator_resolve_supply()
2010 regulator_unlock(rdev); in regulator_resolve_supply()
2017 if (rdev->use_count) { in regulator_resolve_supply()
2018 ret = regulator_enable(rdev->supply); in regulator_resolve_supply()
2020 _regulator_put(rdev->supply); in regulator_resolve_supply()
2021 rdev->supply = NULL; in regulator_resolve_supply()
2034 struct regulator_dev *rdev; in _regulator_get() local
2049 rdev = regulator_dev_lookup(dev, id); in _regulator_get()
2050 if (IS_ERR(rdev)) { in _regulator_get()
2051 ret = PTR_ERR(rdev); in _regulator_get()
2074 rdev = dummy_regulator_rdev; in _regulator_get()
2075 get_device(&rdev->dev); in _regulator_get()
2088 if (rdev->exclusive) { in _regulator_get()
2090 put_device(&rdev->dev); in _regulator_get()
2094 if (get_type == EXCLUSIVE_GET && rdev->open_count) { in _regulator_get()
2096 put_device(&rdev->dev); in _regulator_get()
2101 ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled); in _regulator_get()
2106 put_device(&rdev->dev); in _regulator_get()
2110 ret = regulator_resolve_supply(rdev); in _regulator_get()
2113 put_device(&rdev->dev); in _regulator_get()
2117 if (!try_module_get(rdev->owner)) { in _regulator_get()
2119 put_device(&rdev->dev); in _regulator_get()
2123 regulator = create_regulator(rdev, dev, id); in _regulator_get()
2126 module_put(rdev->owner); in _regulator_get()
2127 put_device(&rdev->dev); in _regulator_get()
2131 rdev->open_count++; in _regulator_get()
2133 rdev->exclusive = 1; in _regulator_get()
2135 ret = _regulator_is_enabled(rdev); in _regulator_get()
2137 rdev->use_count = 1; in _regulator_get()
2139 rdev->use_count = 0; in _regulator_get()
2142 link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS); in _regulator_get()
2223 struct regulator_dev *rdev = regulator->rdev; in destroy_regulator() local
2229 device_link_remove(regulator->dev, &rdev->dev); in destroy_regulator()
2232 sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name); in destroy_regulator()
2235 regulator_lock(rdev); in destroy_regulator()
2238 rdev->open_count--; in destroy_regulator()
2239 rdev->exclusive = 0; in destroy_regulator()
2240 regulator_unlock(rdev); in destroy_regulator()
2249 struct regulator_dev *rdev; in _regulator_put() local
2259 rdev = regulator->rdev; in _regulator_put()
2263 module_put(rdev->owner); in _regulator_put()
2264 put_device(&rdev->dev); in _regulator_put()
2413 static int regulator_ena_gpio_request(struct regulator_dev *rdev, in regulator_ena_gpio_request() argument
2426 rdev_dbg(rdev, "GPIO is already used\n"); in regulator_ena_gpio_request()
2444 rdev->ena_pin = pin; in regulator_ena_gpio_request()
2452 static void regulator_ena_gpio_free(struct regulator_dev *rdev) in regulator_ena_gpio_free() argument
2456 if (!rdev->ena_pin) in regulator_ena_gpio_free()
2461 if (pin != rdev->ena_pin) in regulator_ena_gpio_free()
2473 rdev->ena_pin = NULL; in regulator_ena_gpio_free()
2484 static int regulator_ena_gpio_ctrl(struct regulator_dev *rdev, bool enable) in regulator_ena_gpio_ctrl() argument
2486 struct regulator_enable_gpio *pin = rdev->ena_pin; in regulator_ena_gpio_ctrl()
2564 static inline int _regulator_check_status_enabled(struct regulator_dev *rdev) in _regulator_check_status_enabled() argument
2566 int ret = rdev->desc->ops->get_status(rdev); in _regulator_check_status_enabled()
2569 rdev_info(rdev, "get_status returned error: %d\n", ret); in _regulator_check_status_enabled()
2583 static int _regulator_do_enable(struct regulator_dev *rdev) in _regulator_do_enable() argument
2588 ret = _regulator_get_enable_time(rdev); in _regulator_do_enable()
2592 rdev_warn(rdev, "enable_time() failed: %pe\n", ERR_PTR(ret)); in _regulator_do_enable()
2596 trace_regulator_enable(rdev_get_name(rdev)); in _regulator_do_enable()
2598 if (rdev->desc->off_on_delay && rdev->last_off) { in _regulator_do_enable()
2602 ktime_t end = ktime_add_us(rdev->last_off, rdev->desc->off_on_delay); in _regulator_do_enable()
2609 if (rdev->ena_pin) { in _regulator_do_enable()
2610 if (!rdev->ena_gpio_state) { in _regulator_do_enable()
2611 ret = regulator_ena_gpio_ctrl(rdev, true); in _regulator_do_enable()
2614 rdev->ena_gpio_state = 1; in _regulator_do_enable()
2616 } else if (rdev->desc->ops->enable) { in _regulator_do_enable()
2617 ret = rdev->desc->ops->enable(rdev); in _regulator_do_enable()
2628 trace_regulator_enable_delay(rdev_get_name(rdev)); in _regulator_do_enable()
2636 if (rdev->desc->poll_enabled_time) { in _regulator_do_enable()
2640 _regulator_enable_delay(rdev->desc->poll_enabled_time); in _regulator_do_enable()
2642 if (rdev->desc->ops->get_status) { in _regulator_do_enable()
2643 ret = _regulator_check_status_enabled(rdev); in _regulator_do_enable()
2648 } else if (rdev->desc->ops->is_enabled(rdev)) in _regulator_do_enable()
2651 time_remaining -= rdev->desc->poll_enabled_time; in _regulator_do_enable()
2655 rdev_err(rdev, "Enabled check timed out\n"); in _regulator_do_enable()
2662 trace_regulator_enable_complete(rdev_get_name(rdev)); in _regulator_do_enable()
2689 struct regulator_dev *rdev = regulator->rdev; in _regulator_handle_consumer_enable() local
2691 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_handle_consumer_enable()
2695 return drms_uA_update(rdev); in _regulator_handle_consumer_enable()
2710 struct regulator_dev *rdev = regulator->rdev; in _regulator_handle_consumer_disable() local
2712 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_handle_consumer_disable()
2715 rdev_err(rdev, "Underflow of regulator enable count\n"); in _regulator_handle_consumer_disable()
2721 return drms_uA_update(rdev); in _regulator_handle_consumer_disable()
2729 struct regulator_dev *rdev = regulator->rdev; in _regulator_enable() local
2732 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_enable()
2734 if (rdev->use_count == 0 && rdev->supply) { in _regulator_enable()
2735 ret = _regulator_enable(rdev->supply); in _regulator_enable()
2741 if (rdev->coupling_desc.n_coupled > 1) { in _regulator_enable()
2742 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON); in _regulator_enable()
2751 if (rdev->use_count == 0) { in _regulator_enable()
2756 ret = _regulator_is_enabled(rdev); in _regulator_enable()
2758 if (!regulator_ops_is_valid(rdev, in _regulator_enable()
2764 ret = _regulator_do_enable(rdev); in _regulator_enable()
2768 _notifier_call_chain(rdev, REGULATOR_EVENT_ENABLE, in _regulator_enable()
2771 rdev_err(rdev, "is_enabled() failed: %pe\n", ERR_PTR(ret)); in _regulator_enable()
2777 rdev->use_count++; in _regulator_enable()
2785 if (rdev->use_count == 0 && rdev->supply) in _regulator_enable()
2786 _regulator_disable(rdev->supply); in _regulator_enable()
2804 struct regulator_dev *rdev = regulator->rdev; in regulator_enable() local
2808 regulator_lock_dependent(rdev, &ww_ctx); in regulator_enable()
2810 regulator_unlock_dependent(rdev, &ww_ctx); in regulator_enable()
2816 static int _regulator_do_disable(struct regulator_dev *rdev) in _regulator_do_disable() argument
2820 trace_regulator_disable(rdev_get_name(rdev)); in _regulator_do_disable()
2822 if (rdev->ena_pin) { in _regulator_do_disable()
2823 if (rdev->ena_gpio_state) { in _regulator_do_disable()
2824 ret = regulator_ena_gpio_ctrl(rdev, false); in _regulator_do_disable()
2827 rdev->ena_gpio_state = 0; in _regulator_do_disable()
2830 } else if (rdev->desc->ops->disable) { in _regulator_do_disable()
2831 ret = rdev->desc->ops->disable(rdev); in _regulator_do_disable()
2836 if (rdev->desc->off_on_delay) in _regulator_do_disable()
2837 rdev->last_off = ktime_get(); in _regulator_do_disable()
2839 trace_regulator_disable_complete(rdev_get_name(rdev)); in _regulator_do_disable()
2847 struct regulator_dev *rdev = regulator->rdev; in _regulator_disable() local
2850 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_disable()
2852 if (WARN(rdev->use_count <= 0, in _regulator_disable()
2853 "unbalanced disables for %s\n", rdev_get_name(rdev))) in _regulator_disable()
2857 if (rdev->use_count == 1 && in _regulator_disable()
2858 (rdev->constraints && !rdev->constraints->always_on)) { in _regulator_disable()
2861 if (regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS)) { in _regulator_disable()
2862 ret = _notifier_call_chain(rdev, in _regulator_disable()
2868 ret = _regulator_do_disable(rdev); in _regulator_disable()
2870 rdev_err(rdev, "failed to disable: %pe\n", ERR_PTR(ret)); in _regulator_disable()
2871 _notifier_call_chain(rdev, in _regulator_disable()
2876 _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE, in _regulator_disable()
2880 rdev->use_count = 0; in _regulator_disable()
2881 } else if (rdev->use_count > 1) { in _regulator_disable()
2882 rdev->use_count--; in _regulator_disable()
2888 if (ret == 0 && rdev->coupling_desc.n_coupled > 1) in _regulator_disable()
2889 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON); in _regulator_disable()
2891 if (ret == 0 && rdev->use_count == 0 && rdev->supply) in _regulator_disable()
2892 ret = _regulator_disable(rdev->supply); in _regulator_disable()
2911 struct regulator_dev *rdev = regulator->rdev; in regulator_disable() local
2915 regulator_lock_dependent(rdev, &ww_ctx); in regulator_disable()
2917 regulator_unlock_dependent(rdev, &ww_ctx); in regulator_disable()
2924 static int _regulator_force_disable(struct regulator_dev *rdev) in _regulator_force_disable() argument
2928 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_force_disable()
2930 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | in _regulator_force_disable()
2935 ret = _regulator_do_disable(rdev); in _regulator_force_disable()
2937 rdev_err(rdev, "failed to force disable: %pe\n", ERR_PTR(ret)); in _regulator_force_disable()
2938 _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | in _regulator_force_disable()
2943 _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | in _regulator_force_disable()
2960 struct regulator_dev *rdev = regulator->rdev; in regulator_force_disable() local
2964 regulator_lock_dependent(rdev, &ww_ctx); in regulator_force_disable()
2966 ret = _regulator_force_disable(regulator->rdev); in regulator_force_disable()
2968 if (rdev->coupling_desc.n_coupled > 1) in regulator_force_disable()
2969 regulator_balance_voltage(rdev, PM_SUSPEND_ON); in regulator_force_disable()
2973 ret = drms_uA_update(rdev); in regulator_force_disable()
2976 if (rdev->use_count != 0 && rdev->supply) in regulator_force_disable()
2977 _regulator_disable(rdev->supply); in regulator_force_disable()
2979 regulator_unlock_dependent(rdev, &ww_ctx); in regulator_force_disable()
2987 struct regulator_dev *rdev = container_of(work, struct regulator_dev, in regulator_disable_work() local
2994 regulator_lock_dependent(rdev, &ww_ctx); in regulator_disable_work()
3002 cancel_delayed_work(&rdev->disable_work); in regulator_disable_work()
3004 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_disable_work()
3016 rdev_err(rdev, "Deferred disable failed: %pe\n", in regulator_disable_work()
3022 if (rdev->coupling_desc.n_coupled > 1) in regulator_disable_work()
3023 regulator_balance_voltage(rdev, PM_SUSPEND_ON); in regulator_disable_work()
3025 regulator_unlock_dependent(rdev, &ww_ctx); in regulator_disable_work()
3042 struct regulator_dev *rdev = regulator->rdev; in regulator_disable_deferred() local
3047 regulator_lock(rdev); in regulator_disable_deferred()
3049 mod_delayed_work(system_power_efficient_wq, &rdev->disable_work, in regulator_disable_deferred()
3051 regulator_unlock(rdev); in regulator_disable_deferred()
3057 static int _regulator_is_enabled(struct regulator_dev *rdev) in _regulator_is_enabled() argument
3060 if (rdev->ena_pin) in _regulator_is_enabled()
3061 return rdev->ena_gpio_state; in _regulator_is_enabled()
3064 if (!rdev->desc->ops->is_enabled) in _regulator_is_enabled()
3067 return rdev->desc->ops->is_enabled(rdev); in _regulator_is_enabled()
3070 static int _regulator_list_voltage(struct regulator_dev *rdev, in _regulator_list_voltage() argument
3073 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_list_voltage()
3076 if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector) in _regulator_list_voltage()
3077 return rdev->desc->fixed_uV; in _regulator_list_voltage()
3080 if (selector >= rdev->desc->n_voltages) in _regulator_list_voltage()
3082 if (selector < rdev->desc->linear_min_sel) in _regulator_list_voltage()
3085 regulator_lock(rdev); in _regulator_list_voltage()
3086 ret = ops->list_voltage(rdev, selector); in _regulator_list_voltage()
3088 regulator_unlock(rdev); in _regulator_list_voltage()
3089 } else if (rdev->is_switch && rdev->supply) { in _regulator_list_voltage()
3090 ret = _regulator_list_voltage(rdev->supply->rdev, in _regulator_list_voltage()
3097 if (ret < rdev->constraints->min_uV) in _regulator_list_voltage()
3099 else if (ret > rdev->constraints->max_uV) in _regulator_list_voltage()
3125 regulator_lock(regulator->rdev); in regulator_is_enabled()
3126 ret = _regulator_is_enabled(regulator->rdev); in regulator_is_enabled()
3127 regulator_unlock(regulator->rdev); in regulator_is_enabled()
3143 struct regulator_dev *rdev = regulator->rdev; in regulator_count_voltages() local
3145 if (rdev->desc->n_voltages) in regulator_count_voltages()
3146 return rdev->desc->n_voltages; in regulator_count_voltages()
3148 if (!rdev->is_switch || !rdev->supply) in regulator_count_voltages()
3151 return regulator_count_voltages(rdev->supply); in regulator_count_voltages()
3167 return _regulator_list_voltage(regulator->rdev, selector, 1); in regulator_list_voltage()
3180 struct regmap *map = regulator->rdev->regmap; in regulator_get_regmap()
3203 struct regulator_dev *rdev = regulator->rdev; in regulator_get_hardware_vsel_register() local
3204 const struct regulator_ops *ops = rdev->desc->ops; in regulator_get_hardware_vsel_register()
3209 *vsel_reg = rdev->desc->vsel_reg; in regulator_get_hardware_vsel_register()
3210 *vsel_mask = rdev->desc->vsel_mask; in regulator_get_hardware_vsel_register()
3230 struct regulator_dev *rdev = regulator->rdev; in regulator_list_hardware_vsel() local
3231 const struct regulator_ops *ops = rdev->desc->ops; in regulator_list_hardware_vsel()
3233 if (selector >= rdev->desc->n_voltages) in regulator_list_hardware_vsel()
3235 if (selector < rdev->desc->linear_min_sel) in regulator_list_hardware_vsel()
3253 struct regulator_dev *rdev = regulator->rdev; in regulator_get_linear_step() local
3255 return rdev->desc->uV_step; in regulator_get_linear_step()
3271 struct regulator_dev *rdev = regulator->rdev; in regulator_is_supported_voltage() local
3275 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) { in regulator_is_supported_voltage()
3284 if (rdev->desc->continuous_voltage_range) in regulator_is_supported_voltage()
3285 return min_uV >= rdev->constraints->min_uV && in regulator_is_supported_voltage()
3286 max_uV <= rdev->constraints->max_uV; in regulator_is_supported_voltage()
3304 static int regulator_map_voltage(struct regulator_dev *rdev, int min_uV, in regulator_map_voltage() argument
3307 const struct regulator_desc *desc = rdev->desc; in regulator_map_voltage()
3310 return desc->ops->map_voltage(rdev, min_uV, max_uV); in regulator_map_voltage()
3313 return regulator_map_voltage_linear(rdev, min_uV, max_uV); in regulator_map_voltage()
3316 return regulator_map_voltage_linear_range(rdev, min_uV, max_uV); in regulator_map_voltage()
3320 return regulator_map_voltage_pickable_linear_range(rdev, in regulator_map_voltage()
3323 return regulator_map_voltage_iterate(rdev, min_uV, max_uV); in regulator_map_voltage()
3326 static int _regulator_call_set_voltage(struct regulator_dev *rdev, in _regulator_call_set_voltage() argument
3333 data.old_uV = regulator_get_voltage_rdev(rdev); in _regulator_call_set_voltage()
3336 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE, in _regulator_call_set_voltage()
3341 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, selector); in _regulator_call_set_voltage()
3345 _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE, in _regulator_call_set_voltage()
3351 static int _regulator_call_set_voltage_sel(struct regulator_dev *rdev, in _regulator_call_set_voltage_sel() argument
3357 data.old_uV = regulator_get_voltage_rdev(rdev); in _regulator_call_set_voltage_sel()
3360 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE, in _regulator_call_set_voltage_sel()
3365 ret = rdev->desc->ops->set_voltage_sel(rdev, selector); in _regulator_call_set_voltage_sel()
3369 _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE, in _regulator_call_set_voltage_sel()
3375 static int _regulator_set_voltage_sel_step(struct regulator_dev *rdev, in _regulator_set_voltage_sel_step() argument
3378 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_set_voltage_sel_step()
3382 if (!_regulator_is_enabled(rdev)) in _regulator_set_voltage_sel_step()
3388 old_sel = ops->get_voltage_sel(rdev); in _regulator_set_voltage_sel_step()
3398 for (curr_sel = old_sel + rdev->desc->vsel_step; in _regulator_set_voltage_sel_step()
3400 curr_sel += rdev->desc->vsel_step) { in _regulator_set_voltage_sel_step()
3407 ret = ops->set_voltage_sel(rdev, curr_sel); in _regulator_set_voltage_sel_step()
3413 for (curr_sel = old_sel - rdev->desc->vsel_step; in _regulator_set_voltage_sel_step()
3415 curr_sel -= rdev->desc->vsel_step) { in _regulator_set_voltage_sel_step()
3416 ret = ops->set_voltage_sel(rdev, curr_sel); in _regulator_set_voltage_sel_step()
3424 return _regulator_call_set_voltage_sel(rdev, uV, new_selector); in _regulator_set_voltage_sel_step()
3431 (void)ops->set_voltage_sel(rdev, old_sel); in _regulator_set_voltage_sel_step()
3435 static int _regulator_set_voltage_time(struct regulator_dev *rdev, in _regulator_set_voltage_time() argument
3440 if (rdev->constraints->ramp_delay) in _regulator_set_voltage_time()
3441 ramp_delay = rdev->constraints->ramp_delay; in _regulator_set_voltage_time()
3442 else if (rdev->desc->ramp_delay) in _regulator_set_voltage_time()
3443 ramp_delay = rdev->desc->ramp_delay; in _regulator_set_voltage_time()
3444 else if (rdev->constraints->settling_time) in _regulator_set_voltage_time()
3445 return rdev->constraints->settling_time; in _regulator_set_voltage_time()
3446 else if (rdev->constraints->settling_time_up && in _regulator_set_voltage_time()
3448 return rdev->constraints->settling_time_up; in _regulator_set_voltage_time()
3449 else if (rdev->constraints->settling_time_down && in _regulator_set_voltage_time()
3451 return rdev->constraints->settling_time_down; in _regulator_set_voltage_time()
3454 rdev_dbg(rdev, "ramp_delay not set\n"); in _regulator_set_voltage_time()
3461 static int _regulator_do_set_voltage(struct regulator_dev *rdev, in _regulator_do_set_voltage() argument
3469 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_do_set_voltage()
3470 int old_uV = regulator_get_voltage_rdev(rdev); in _regulator_do_set_voltage()
3472 trace_regulator_set_voltage(rdev_get_name(rdev), min_uV, max_uV); in _regulator_do_set_voltage()
3474 min_uV += rdev->constraints->uV_offset; in _regulator_do_set_voltage()
3475 max_uV += rdev->constraints->uV_offset; in _regulator_do_set_voltage()
3481 if (_regulator_is_enabled(rdev) && in _regulator_do_set_voltage()
3483 old_selector = ops->get_voltage_sel(rdev); in _regulator_do_set_voltage()
3489 ret = _regulator_call_set_voltage(rdev, min_uV, max_uV, in _regulator_do_set_voltage()
3494 best_val = ops->list_voltage(rdev, in _regulator_do_set_voltage()
3497 best_val = regulator_get_voltage_rdev(rdev); in _regulator_do_set_voltage()
3501 ret = regulator_map_voltage(rdev, min_uV, max_uV); in _regulator_do_set_voltage()
3503 best_val = ops->list_voltage(rdev, ret); in _regulator_do_set_voltage()
3508 else if (rdev->desc->vsel_step) in _regulator_do_set_voltage()
3510 rdev, best_val, selector); in _regulator_do_set_voltage()
3513 rdev, best_val, selector); in _regulator_do_set_voltage()
3531 delay = ops->set_voltage_time_sel(rdev, old_selector, in _regulator_do_set_voltage()
3536 delay = ops->set_voltage_time(rdev, old_uV, in _regulator_do_set_voltage()
3539 delay = _regulator_set_voltage_time(rdev, in _regulator_do_set_voltage()
3546 rdev_warn(rdev, "failed to get delay: %pe\n", ERR_PTR(delay)); in _regulator_do_set_voltage()
3561 _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE, in _regulator_do_set_voltage()
3566 trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val); in _regulator_do_set_voltage()
3571 static int _regulator_do_set_suspend_voltage(struct regulator_dev *rdev, in _regulator_do_set_suspend_voltage() argument
3577 rstate = regulator_get_suspend_state(rdev, state); in _regulator_do_set_suspend_voltage()
3586 sel = regulator_map_voltage(rdev, min_uV, max_uV); in _regulator_do_set_suspend_voltage()
3590 uV = rdev->desc->ops->list_voltage(rdev, sel); in _regulator_do_set_suspend_voltage()
3601 struct regulator_dev *rdev = regulator->rdev; in regulator_set_voltage_unlocked() local
3618 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) { in regulator_set_voltage_unlocked()
3619 current_uV = regulator_get_voltage_rdev(rdev); in regulator_set_voltage_unlocked()
3628 if (!rdev->desc->ops->set_voltage && in regulator_set_voltage_unlocked()
3629 !rdev->desc->ops->set_voltage_sel) { in regulator_set_voltage_unlocked()
3635 ret = regulator_check_voltage(rdev, &min_uV, &max_uV); in regulator_set_voltage_unlocked()
3646 ret = regulator_balance_voltage(rdev, state); in regulator_set_voltage_unlocked()
3656 int regulator_set_voltage_rdev(struct regulator_dev *rdev, int min_uV, in regulator_set_voltage_rdev() argument
3663 if (rdev->supply && in regulator_set_voltage_rdev()
3664 regulator_ops_is_valid(rdev->supply->rdev, in regulator_set_voltage_rdev()
3666 (rdev->desc->min_dropout_uV || !(rdev->desc->ops->get_voltage || in regulator_set_voltage_rdev()
3667 rdev->desc->ops->get_voltage_sel))) { in regulator_set_voltage_rdev()
3671 selector = regulator_map_voltage(rdev, min_uV, max_uV); in regulator_set_voltage_rdev()
3677 best_supply_uV = _regulator_list_voltage(rdev, selector, 0); in regulator_set_voltage_rdev()
3683 best_supply_uV += rdev->desc->min_dropout_uV; in regulator_set_voltage_rdev()
3685 current_supply_uV = regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_set_voltage_rdev()
3695 ret = regulator_set_voltage_unlocked(rdev->supply, in regulator_set_voltage_rdev()
3698 dev_err(&rdev->dev, "Failed to increase supply voltage: %pe\n", in regulator_set_voltage_rdev()
3705 ret = _regulator_do_set_voltage(rdev, min_uV, max_uV); in regulator_set_voltage_rdev()
3707 ret = _regulator_do_set_suspend_voltage(rdev, min_uV, in regulator_set_voltage_rdev()
3713 ret = regulator_set_voltage_unlocked(rdev->supply, in regulator_set_voltage_rdev()
3716 dev_warn(&rdev->dev, "Failed to decrease supply voltage: %pe\n", in regulator_set_voltage_rdev()
3727 static int regulator_limit_voltage_step(struct regulator_dev *rdev, in regulator_limit_voltage_step() argument
3730 struct regulation_constraints *constraints = rdev->constraints; in regulator_limit_voltage_step()
3733 if (!constraints->max_uV_step || !_regulator_is_enabled(rdev)) in regulator_limit_voltage_step()
3737 *current_uV = regulator_get_voltage_rdev(rdev); in regulator_limit_voltage_step()
3757 static int regulator_get_optimal_voltage(struct regulator_dev *rdev, in regulator_get_optimal_voltage() argument
3763 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_get_optimal_voltage()
3765 struct regulation_constraints *constraints = rdev->constraints; in regulator_get_optimal_voltage()
3786 ret = regulator_check_consumers(rdev, in regulator_get_optimal_voltage()
3871 ret = regulator_limit_voltage_step(rdev, current_uV, in regulator_get_optimal_voltage()
3883 if (_regulator_is_enabled(rdev)) { in regulator_get_optimal_voltage()
3884 ret = regulator_get_voltage_rdev(rdev); in regulator_get_optimal_voltage()
3900 int regulator_do_balance_voltage(struct regulator_dev *rdev, in regulator_do_balance_voltage() argument
3905 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_do_balance_voltage()
3983 static int regulator_balance_voltage(struct regulator_dev *rdev, in regulator_balance_voltage() argument
3986 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_balance_voltage()
3998 rdev_err(rdev, "Not all coupled regulators registered\n"); in regulator_balance_voltage()
4004 return coupler->balance_voltage(coupler, rdev, state); in regulator_balance_voltage()
4006 return regulator_do_balance_voltage(rdev, state, skip_coupled); in regulator_balance_voltage()
4032 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_set_voltage()
4037 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_set_voltage()
4043 static inline int regulator_suspend_toggle(struct regulator_dev *rdev, in regulator_suspend_toggle() argument
4048 rstate = regulator_get_suspend_state(rdev, state); in regulator_suspend_toggle()
4060 int regulator_suspend_enable(struct regulator_dev *rdev, in regulator_suspend_enable() argument
4063 return regulator_suspend_toggle(rdev, state, true); in regulator_suspend_enable()
4067 int regulator_suspend_disable(struct regulator_dev *rdev, in regulator_suspend_disable() argument
4077 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_suspend_disable()
4083 return regulator_suspend_toggle(rdev, state, false); in regulator_suspend_disable()
4091 struct regulator_dev *rdev = regulator->rdev; in _regulator_set_suspend_voltage() local
4094 rstate = regulator_get_suspend_state(rdev, state); in _regulator_set_suspend_voltage()
4099 rdev_err(rdev, "The suspend voltage can't be changed!\n"); in _regulator_set_suspend_voltage()
4116 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_set_suspend_voltage()
4121 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_set_suspend_voltage()
4140 struct regulator_dev *rdev = regulator->rdev; in regulator_set_voltage_time() local
4141 const struct regulator_ops *ops = rdev->desc->ops; in regulator_set_voltage_time()
4148 return ops->set_voltage_time(rdev, old_uV, new_uV); in regulator_set_voltage_time()
4150 return _regulator_set_voltage_time(rdev, old_uV, new_uV); in regulator_set_voltage_time()
4153 if (!ops->list_voltage || !rdev->desc->n_voltages) in regulator_set_voltage_time()
4156 for (i = 0; i < rdev->desc->n_voltages; i++) { in regulator_set_voltage_time()
4158 if (i < rdev->desc->linear_min_sel) in regulator_set_voltage_time()
4178 return ops->set_voltage_time_sel(rdev, old_sel, new_sel); in regulator_set_voltage_time()
4194 int regulator_set_voltage_time_sel(struct regulator_dev *rdev, in regulator_set_voltage_time_sel() argument
4201 if (!rdev->desc->ops->list_voltage) in regulator_set_voltage_time_sel()
4204 old_volt = rdev->desc->ops->list_voltage(rdev, old_selector); in regulator_set_voltage_time_sel()
4205 new_volt = rdev->desc->ops->list_voltage(rdev, new_selector); in regulator_set_voltage_time_sel()
4207 if (rdev->desc->ops->set_voltage_time) in regulator_set_voltage_time_sel()
4208 return rdev->desc->ops->set_voltage_time(rdev, old_volt, in regulator_set_voltage_time_sel()
4211 return _regulator_set_voltage_time(rdev, old_volt, new_volt); in regulator_set_voltage_time_sel()
4215 int regulator_sync_voltage_rdev(struct regulator_dev *rdev) in regulator_sync_voltage_rdev() argument
4219 regulator_lock(rdev); in regulator_sync_voltage_rdev()
4221 if (!rdev->desc->ops->set_voltage && in regulator_sync_voltage_rdev()
4222 !rdev->desc->ops->set_voltage_sel) { in regulator_sync_voltage_rdev()
4228 if (rdev->coupling_desc.n_coupled > 1) in regulator_sync_voltage_rdev()
4229 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON); in regulator_sync_voltage_rdev()
4234 regulator_unlock(rdev); in regulator_sync_voltage_rdev()
4248 struct regulator_dev *rdev = regulator->rdev; in regulator_sync_voltage() local
4252 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) in regulator_sync_voltage()
4255 regulator_lock(rdev); in regulator_sync_voltage()
4257 if (!rdev->desc->ops->set_voltage && in regulator_sync_voltage()
4258 !rdev->desc->ops->set_voltage_sel) { in regulator_sync_voltage()
4273 ret = regulator_check_voltage(rdev, &min_uV, &max_uV); in regulator_sync_voltage()
4277 ret = regulator_check_consumers(rdev, &min_uV, &max_uV, 0); in regulator_sync_voltage()
4282 if (rdev->coupling_desc.n_coupled > 1) in regulator_sync_voltage()
4283 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON); in regulator_sync_voltage()
4285 ret = _regulator_do_set_voltage(rdev, min_uV, max_uV); in regulator_sync_voltage()
4288 regulator_unlock(rdev); in regulator_sync_voltage()
4293 int regulator_get_voltage_rdev(struct regulator_dev *rdev) in regulator_get_voltage_rdev() argument
4298 if (rdev->desc->ops->get_bypass) { in regulator_get_voltage_rdev()
4299 ret = rdev->desc->ops->get_bypass(rdev, &bypassed); in regulator_get_voltage_rdev()
4304 if (!rdev->supply) { in regulator_get_voltage_rdev()
4305 rdev_err(rdev, in regulator_get_voltage_rdev()
4310 return regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_get_voltage_rdev()
4314 if (rdev->desc->ops->get_voltage_sel) { in regulator_get_voltage_rdev()
4315 sel = rdev->desc->ops->get_voltage_sel(rdev); in regulator_get_voltage_rdev()
4318 ret = rdev->desc->ops->list_voltage(rdev, sel); in regulator_get_voltage_rdev()
4319 } else if (rdev->desc->ops->get_voltage) { in regulator_get_voltage_rdev()
4320 ret = rdev->desc->ops->get_voltage(rdev); in regulator_get_voltage_rdev()
4321 } else if (rdev->desc->ops->list_voltage) { in regulator_get_voltage_rdev()
4322 ret = rdev->desc->ops->list_voltage(rdev, 0); in regulator_get_voltage_rdev()
4323 } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) { in regulator_get_voltage_rdev()
4324 ret = rdev->desc->fixed_uV; in regulator_get_voltage_rdev()
4325 } else if (rdev->supply) { in regulator_get_voltage_rdev()
4326 ret = regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_get_voltage_rdev()
4327 } else if (rdev->supply_name) { in regulator_get_voltage_rdev()
4335 return ret - rdev->constraints->uV_offset; in regulator_get_voltage_rdev()
4353 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_get_voltage()
4354 ret = regulator_get_voltage_rdev(regulator->rdev); in regulator_get_voltage()
4355 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_get_voltage()
4380 struct regulator_dev *rdev = regulator->rdev; in regulator_set_current_limit() local
4383 regulator_lock(rdev); in regulator_set_current_limit()
4386 if (!rdev->desc->ops->set_current_limit) { in regulator_set_current_limit()
4392 ret = regulator_check_current_limit(rdev, &min_uA, &max_uA); in regulator_set_current_limit()
4396 ret = rdev->desc->ops->set_current_limit(rdev, min_uA, max_uA); in regulator_set_current_limit()
4398 regulator_unlock(rdev); in regulator_set_current_limit()
4403 static int _regulator_get_current_limit_unlocked(struct regulator_dev *rdev) in _regulator_get_current_limit_unlocked() argument
4406 if (!rdev->desc->ops->get_current_limit) in _regulator_get_current_limit_unlocked()
4409 return rdev->desc->ops->get_current_limit(rdev); in _regulator_get_current_limit_unlocked()
4412 static int _regulator_get_current_limit(struct regulator_dev *rdev) in _regulator_get_current_limit() argument
4416 regulator_lock(rdev); in _regulator_get_current_limit()
4417 ret = _regulator_get_current_limit_unlocked(rdev); in _regulator_get_current_limit()
4418 regulator_unlock(rdev); in _regulator_get_current_limit()
4434 return _regulator_get_current_limit(regulator->rdev); in regulator_get_current_limit()
4451 struct regulator_dev *rdev = regulator->rdev; in regulator_set_mode() local
4455 regulator_lock(rdev); in regulator_set_mode()
4458 if (!rdev->desc->ops->set_mode) { in regulator_set_mode()
4464 if (rdev->desc->ops->get_mode) { in regulator_set_mode()
4465 regulator_curr_mode = rdev->desc->ops->get_mode(rdev); in regulator_set_mode()
4473 ret = regulator_mode_constrain(rdev, &mode); in regulator_set_mode()
4477 ret = rdev->desc->ops->set_mode(rdev, mode); in regulator_set_mode()
4479 regulator_unlock(rdev); in regulator_set_mode()
4484 static unsigned int _regulator_get_mode_unlocked(struct regulator_dev *rdev) in _regulator_get_mode_unlocked() argument
4487 if (!rdev->desc->ops->get_mode) in _regulator_get_mode_unlocked()
4490 return rdev->desc->ops->get_mode(rdev); in _regulator_get_mode_unlocked()
4493 static unsigned int _regulator_get_mode(struct regulator_dev *rdev) in _regulator_get_mode() argument
4497 regulator_lock(rdev); in _regulator_get_mode()
4498 ret = _regulator_get_mode_unlocked(rdev); in _regulator_get_mode()
4499 regulator_unlock(rdev); in _regulator_get_mode()
4512 return _regulator_get_mode(regulator->rdev); in regulator_get_mode()
4516 static int rdev_get_cached_err_flags(struct regulator_dev *rdev) in rdev_get_cached_err_flags() argument
4520 if (rdev->use_cached_err) { in rdev_get_cached_err_flags()
4521 spin_lock(&rdev->err_lock); in rdev_get_cached_err_flags()
4522 ret = rdev->cached_err; in rdev_get_cached_err_flags()
4523 spin_unlock(&rdev->err_lock); in rdev_get_cached_err_flags()
4528 static int _regulator_get_error_flags(struct regulator_dev *rdev, in _regulator_get_error_flags() argument
4533 regulator_lock(rdev); in _regulator_get_error_flags()
4535 cached_flags = rdev_get_cached_err_flags(rdev); in _regulator_get_error_flags()
4537 if (rdev->desc->ops->get_error_flags) in _regulator_get_error_flags()
4538 ret = rdev->desc->ops->get_error_flags(rdev, flags); in _regulator_get_error_flags()
4539 else if (!rdev->use_cached_err) in _regulator_get_error_flags()
4544 regulator_unlock(rdev); in _regulator_get_error_flags()
4559 return _regulator_get_error_flags(regulator->rdev, flags); in regulator_get_error_flags()
4599 struct regulator_dev *rdev = regulator->rdev; in regulator_set_load() local
4603 regulator_lock(rdev); in regulator_set_load()
4607 ret = drms_uA_update(rdev); in regulator_set_load()
4611 regulator_unlock(rdev); in regulator_set_load()
4630 struct regulator_dev *rdev = regulator->rdev; in regulator_allow_bypass() local
4631 const char *name = rdev_get_name(rdev); in regulator_allow_bypass()
4634 if (!rdev->desc->ops->set_bypass) in regulator_allow_bypass()
4637 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_BYPASS)) in regulator_allow_bypass()
4640 regulator_lock(rdev); in regulator_allow_bypass()
4643 rdev->bypass_count++; in regulator_allow_bypass()
4645 if (rdev->bypass_count == rdev->open_count) { in regulator_allow_bypass()
4648 ret = rdev->desc->ops->set_bypass(rdev, enable); in regulator_allow_bypass()
4650 rdev->bypass_count--; in regulator_allow_bypass()
4656 rdev->bypass_count--; in regulator_allow_bypass()
4658 if (rdev->bypass_count != rdev->open_count) { in regulator_allow_bypass()
4661 ret = rdev->desc->ops->set_bypass(rdev, enable); in regulator_allow_bypass()
4663 rdev->bypass_count++; in regulator_allow_bypass()
4672 regulator_unlock(rdev); in regulator_allow_bypass()
4688 return blocking_notifier_chain_register(&regulator->rdev->notifier, in regulator_register_notifier()
4703 return blocking_notifier_chain_unregister(&regulator->rdev->notifier, in regulator_unregister_notifier()
4711 static int _notifier_call_chain(struct regulator_dev *rdev, in _notifier_call_chain() argument
4715 return blocking_notifier_call_chain(&rdev->notifier, event, data); in _notifier_call_chain()
4926 int regulator_notifier_call_chain(struct regulator_dev *rdev, in regulator_notifier_call_chain() argument
4929 _notifier_call_chain(rdev, event, data); in regulator_notifier_call_chain()
4994 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_attr_is_visible() local
4995 const struct regulator_ops *ops = rdev->desc->ops; in regulator_attr_is_visible()
5006 if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) || in regulator_attr_is_visible()
5007 (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) || in regulator_attr_is_visible()
5008 (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0) || in regulator_attr_is_visible()
5009 (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1)) in regulator_attr_is_visible()
5021 return (rdev->ena_pin || ops->is_enabled) ? mode : 0; in regulator_attr_is_visible()
5068 struct regulator_dev *rdev = dev_get_drvdata(dev); in regulator_dev_release() local
5070 kfree(rdev->constraints); in regulator_dev_release()
5071 of_node_put(rdev->dev.of_node); in regulator_dev_release()
5072 kfree(rdev); in regulator_dev_release()
5075 static void rdev_init_debugfs(struct regulator_dev *rdev) in rdev_init_debugfs() argument
5077 struct device *parent = rdev->dev.parent; in rdev_init_debugfs()
5078 const char *rname = rdev_get_name(rdev); in rdev_init_debugfs()
5082 if (parent && rname == rdev->desc->name) { in rdev_init_debugfs()
5088 rdev->debugfs = debugfs_create_dir(rname, debugfs_root); in rdev_init_debugfs()
5089 if (!rdev->debugfs) { in rdev_init_debugfs()
5090 rdev_warn(rdev, "Failed to create debugfs directory\n"); in rdev_init_debugfs()
5094 debugfs_create_u32("use_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5095 &rdev->use_count); in rdev_init_debugfs()
5096 debugfs_create_u32("open_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5097 &rdev->open_count); in rdev_init_debugfs()
5098 debugfs_create_u32("bypass_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5099 &rdev->bypass_count); in rdev_init_debugfs()
5104 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_register_resolve_supply() local
5106 if (regulator_resolve_supply(rdev)) in regulator_register_resolve_supply()
5107 rdev_dbg(rdev, "unable to resolve supply\n"); in regulator_register_resolve_supply()
5122 regulator_find_coupler(struct regulator_dev *rdev) in regulator_find_coupler() argument
5133 err = coupler->attach_regulator(coupler, rdev); in regulator_find_coupler()
5136 rdev->coupling_desc.n_coupled > 2) in regulator_find_coupler()
5155 coupler->detach_regulator(coupler, rdev); in regulator_find_coupler()
5157 rdev_err(rdev, in regulator_find_coupler()
5163 static void regulator_resolve_coupling(struct regulator_dev *rdev) in regulator_resolve_coupling() argument
5165 struct regulator_coupler *coupler = rdev->coupling_desc.coupler; in regulator_resolve_coupling()
5166 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_resolve_coupling()
5176 c_rdev = of_parse_coupled_regulator(rdev, i - 1); in regulator_resolve_coupling()
5182 rdev_err(rdev, "coupler mismatch with %s\n", in regulator_resolve_coupling()
5194 static void regulator_remove_coupling(struct regulator_dev *rdev) in regulator_remove_coupling() argument
5196 struct regulator_coupler *coupler = rdev->coupling_desc.coupler; in regulator_remove_coupling()
5197 struct coupling_desc *__c_desc, *c_desc = &rdev->coupling_desc; in regulator_remove_coupling()
5219 if (__c_rdev == rdev) { in regulator_remove_coupling()
5233 err = coupler->detach_regulator(coupler, rdev); in regulator_remove_coupling()
5235 rdev_err(rdev, "failed to detach from coupler: %pe\n", in regulator_remove_coupling()
5239 kfree(rdev->coupling_desc.coupled_rdevs); in regulator_remove_coupling()
5240 rdev->coupling_desc.coupled_rdevs = NULL; in regulator_remove_coupling()
5243 static int regulator_init_coupling(struct regulator_dev *rdev) in regulator_init_coupling() argument
5251 n_phandles = of_get_n_coupled(rdev); in regulator_init_coupling()
5257 rdev->coupling_desc.coupled_rdevs = coupled; in regulator_init_coupling()
5263 rdev->coupling_desc.coupled_rdevs[0] = rdev; in regulator_init_coupling()
5264 rdev->coupling_desc.n_coupled = n_phandles + 1; in regulator_init_coupling()
5265 rdev->coupling_desc.n_resolved++; in regulator_init_coupling()
5271 if (!of_check_coupling_data(rdev)) in regulator_init_coupling()
5275 rdev->coupling_desc.coupler = regulator_find_coupler(rdev); in regulator_init_coupling()
5278 if (IS_ERR(rdev->coupling_desc.coupler)) { in regulator_init_coupling()
5279 err = PTR_ERR(rdev->coupling_desc.coupler); in regulator_init_coupling()
5280 rdev_err(rdev, "failed to get coupler: %pe\n", ERR_PTR(err)); in regulator_init_coupling()
5288 struct regulator_dev *rdev) in generic_coupler_attach() argument
5290 if (rdev->coupling_desc.n_coupled > 2) { in generic_coupler_attach()
5291 rdev_err(rdev, in generic_coupler_attach()
5296 if (!rdev->constraints->always_on) { in generic_coupler_attach()
5297 rdev_err(rdev, in generic_coupler_attach()
5325 struct regulator_dev *rdev; in regulator_register() local
5372 rdev = kzalloc(sizeof(struct regulator_dev), GFP_KERNEL); in regulator_register()
5373 if (rdev == NULL) { in regulator_register()
5377 device_initialize(&rdev->dev); in regulator_register()
5378 spin_lock_init(&rdev->err_lock); in regulator_register()
5391 &rdev->dev.of_node); in regulator_register()
5415 rdev->dev.of_node = of_node_get(config->of_node); in regulator_register()
5418 ww_mutex_init(&rdev->mutex, &regulator_ww_class); in regulator_register()
5419 rdev->reg_data = config->driver_data; in regulator_register()
5420 rdev->owner = regulator_desc->owner; in regulator_register()
5421 rdev->desc = regulator_desc; in regulator_register()
5423 rdev->regmap = config->regmap; in regulator_register()
5425 rdev->regmap = dev_get_regmap(dev, NULL); in regulator_register()
5427 rdev->regmap = dev_get_regmap(dev->parent, NULL); in regulator_register()
5428 INIT_LIST_HEAD(&rdev->consumer_list); in regulator_register()
5429 INIT_LIST_HEAD(&rdev->list); in regulator_register()
5430 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier); in regulator_register()
5431 INIT_DELAYED_WORK(&rdev->disable_work, regulator_disable_work); in regulator_register()
5435 ret = init_data->regulator_init(rdev->reg_data); in regulator_register()
5441 ret = regulator_ena_gpio_request(rdev, config); in regulator_register()
5443 rdev_err(rdev, "Failed to request enable GPIO: %pe\n", in regulator_register()
5453 rdev->dev.class = &regulator_class; in regulator_register()
5454 rdev->dev.parent = dev; in regulator_register()
5455 dev_set_name(&rdev->dev, "regulator.%lu", in regulator_register()
5457 dev_set_drvdata(&rdev->dev, rdev); in regulator_register()
5461 rdev->constraints = kmemdup(&init_data->constraints, in regulator_register()
5462 sizeof(*rdev->constraints), in regulator_register()
5465 rdev->constraints = kzalloc(sizeof(*rdev->constraints), in regulator_register()
5467 if (!rdev->constraints) { in regulator_register()
5473 rdev->supply_name = init_data->supply_regulator; in regulator_register()
5475 rdev->supply_name = regulator_desc->supply_name; in regulator_register()
5477 ret = set_machine_constraints(rdev); in regulator_register()
5486 rdev_dbg(rdev, "will resolve supply early: %s\n", in regulator_register()
5487 rdev->supply_name); in regulator_register()
5488 ret = regulator_resolve_supply(rdev); in regulator_register()
5490 ret = set_machine_constraints(rdev); in regulator_register()
5492 rdev_dbg(rdev, "unable to resolve supply early: %pe\n", in regulator_register()
5498 ret = regulator_init_coupling(rdev); in regulator_register()
5505 ret = set_consumer_device_supply(rdev, in regulator_register()
5516 if (!rdev->desc->ops->get_voltage && in regulator_register()
5517 !rdev->desc->ops->list_voltage && in regulator_register()
5518 !rdev->desc->fixed_uV) in regulator_register()
5519 rdev->is_switch = true; in regulator_register()
5521 ret = device_add(&rdev->dev); in regulator_register()
5525 rdev_init_debugfs(rdev); in regulator_register()
5529 regulator_resolve_coupling(rdev); in regulator_register()
5536 return rdev; in regulator_register()
5540 unset_regulator_supplies(rdev); in regulator_register()
5541 regulator_remove_coupling(rdev); in regulator_register()
5544 kfree(rdev->coupling_desc.coupled_rdevs); in regulator_register()
5546 regulator_ena_gpio_free(rdev); in regulator_register()
5552 put_device(&rdev->dev); in regulator_register()
5566 void regulator_unregister(struct regulator_dev *rdev) in regulator_unregister() argument
5568 if (rdev == NULL) in regulator_unregister()
5571 if (rdev->supply) { in regulator_unregister()
5572 while (rdev->use_count--) in regulator_unregister()
5573 regulator_disable(rdev->supply); in regulator_unregister()
5574 regulator_put(rdev->supply); in regulator_unregister()
5577 flush_work(&rdev->disable_work.work); in regulator_unregister()
5581 debugfs_remove_recursive(rdev->debugfs); in regulator_unregister()
5582 WARN_ON(rdev->open_count); in regulator_unregister()
5583 regulator_remove_coupling(rdev); in regulator_unregister()
5584 unset_regulator_supplies(rdev); in regulator_unregister()
5585 list_del(&rdev->list); in regulator_unregister()
5586 regulator_ena_gpio_free(rdev); in regulator_unregister()
5587 device_unregister(&rdev->dev); in regulator_unregister()
5602 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_suspend() local
5607 rstate = regulator_get_suspend_state_check(rdev, state); in regulator_suspend()
5611 regulator_lock(rdev); in regulator_suspend()
5612 ret = __suspend_set_state(rdev, rstate); in regulator_suspend()
5613 regulator_unlock(rdev); in regulator_suspend()
5621 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_resume() local
5625 rstate = regulator_get_suspend_state(rdev, state); in regulator_resume()
5630 if (!rdev->desc->ops->resume) in regulator_resume()
5633 regulator_lock(rdev); in regulator_resume()
5637 ret = rdev->desc->ops->resume(rdev); in regulator_resume()
5639 regulator_unlock(rdev); in regulator_resume()
5689 void *rdev_get_drvdata(struct regulator_dev *rdev) in rdev_get_drvdata() argument
5691 return rdev->reg_data; in rdev_get_drvdata()
5704 return regulator->rdev->reg_data; in regulator_get_drvdata()
5715 regulator->rdev->reg_data = data; in regulator_set_drvdata()
5723 int rdev_get_id(struct regulator_dev *rdev) in rdev_get_id() argument
5725 return rdev->desc->id; in rdev_get_id()
5729 struct device *rdev_get_dev(struct regulator_dev *rdev) in rdev_get_dev() argument
5731 return &rdev->dev; in rdev_get_dev()
5735 struct regmap *rdev_get_regmap(struct regulator_dev *rdev) in rdev_get_regmap() argument
5737 return rdev->regmap; in rdev_get_regmap()
5769 struct regulator_dev *rdev,
5774 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_summary_show_children() local
5777 if (rdev->supply && rdev->supply->rdev == summary_data->parent) in regulator_summary_show_children()
5778 regulator_summary_show_subtree(summary_data->s, rdev, in regulator_summary_show_children()
5785 struct regulator_dev *rdev, in regulator_summary_show_subtree() argument
5793 if (!rdev) in regulator_summary_show_subtree()
5796 opmode = _regulator_get_mode_unlocked(rdev); in regulator_summary_show_subtree()
5799 30 - level * 3, rdev_get_name(rdev), in regulator_summary_show_subtree()
5800 rdev->use_count, rdev->open_count, rdev->bypass_count, in regulator_summary_show_subtree()
5803 seq_printf(s, "%5dmV ", regulator_get_voltage_rdev(rdev) / 1000); in regulator_summary_show_subtree()
5805 _regulator_get_current_limit_unlocked(rdev) / 1000); in regulator_summary_show_subtree()
5807 c = rdev->constraints; in regulator_summary_show_subtree()
5809 switch (rdev->desc->type) { in regulator_summary_show_subtree()
5823 list_for_each_entry(consumer, &rdev->consumer_list, list) { in regulator_summary_show_subtree()
5833 switch (rdev->desc->type) { in regulator_summary_show_subtree()
5852 summary_data.parent = rdev; in regulator_summary_show_subtree()
5866 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_summary_lock_one() local
5870 if (rdev != *lock_data->old_contended_rdev) { in regulator_summary_lock_one()
5871 ret = regulator_lock_nested(rdev, lock_data->ww_ctx); in regulator_summary_lock_one()
5874 *lock_data->new_contended_rdev = rdev; in regulator_summary_lock_one()
5886 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_summary_unlock_one() local
5890 if (rdev == *lock_data->new_contended_rdev) in regulator_summary_unlock_one()
5894 regulator_unlock(rdev); in regulator_summary_unlock_one()
5959 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_summary_show_roots() local
5962 if (!rdev->supply) in regulator_summary_show_roots()
5963 regulator_summary_show_subtree(s, rdev, 0); in regulator_summary_show_roots()
6016 struct regulator_dev *rdev = dev_to_rdev(dev); in regulator_late_cleanup() local
6017 const struct regulator_ops *ops = rdev->desc->ops; in regulator_late_cleanup()
6018 struct regulation_constraints *c = rdev->constraints; in regulator_late_cleanup()
6024 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS)) in regulator_late_cleanup()
6027 regulator_lock(rdev); in regulator_late_cleanup()
6029 if (rdev->use_count) in regulator_late_cleanup()
6034 enabled = ops->is_enabled(rdev); in regulator_late_cleanup()
6046 rdev_info(rdev, "disabling\n"); in regulator_late_cleanup()
6047 ret = _regulator_do_disable(rdev); in regulator_late_cleanup()
6049 rdev_err(rdev, "couldn't disable: %pe\n", ERR_PTR(ret)); in regulator_late_cleanup()
6056 rdev_warn(rdev, "incomplete constraints, leaving on\n"); in regulator_late_cleanup()
6060 regulator_unlock(rdev); in regulator_late_cleanup()