Lines Matching +full:uv +full:- +full:shutdown
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 // core.c -- Voltage/Current Regulator framework.
105 if (rdev->constraints && rdev->constraints->name) in rdev_get_name()
106 return rdev->constraints->name; in rdev_get_name()
107 else if (rdev->desc->name) in rdev_get_name()
108 return rdev->desc->name; in rdev_get_name()
121 if (!rdev->constraints) { in regulator_ops_is_valid()
126 if (rdev->constraints->valid_ops_mask & ops) in regulator_ops_is_valid()
133 * regulator_lock_nested - lock a single regulator
153 if (!ww_mutex_trylock(&rdev->mutex, ww_ctx)) { in regulator_lock_nested()
154 if (rdev->mutex_owner == current) in regulator_lock_nested()
155 rdev->ref_cnt++; in regulator_lock_nested()
161 ret = ww_mutex_lock(&rdev->mutex, ww_ctx); in regulator_lock_nested()
168 if (lock && ret != -EDEADLK) { in regulator_lock_nested()
169 rdev->ref_cnt++; in regulator_lock_nested()
170 rdev->mutex_owner = current; in regulator_lock_nested()
179 * regulator_lock - lock a single regulator
194 * regulator_unlock - unlock a single regulator
204 if (--rdev->ref_cnt == 0) { in regulator_unlock()
205 rdev->mutex_owner = NULL; in regulator_unlock()
206 ww_mutex_unlock(&rdev->mutex); in regulator_unlock()
209 WARN_ON_ONCE(rdev->ref_cnt < 0); in regulator_unlock()
215 * regulator_lock_two - lock two regulators
235 if (ret != -EDEADLOCK) { in regulator_lock_two()
245 ww_mutex_lock_slow(&contended->mutex, ww_ctx); in regulator_lock_two()
246 contended->ref_cnt++; in regulator_lock_two()
247 contended->mutex_owner = current; in regulator_lock_two()
251 if (ret != -EDEADLOCK) { in regulator_lock_two()
262 * regulator_unlock_two - unlock two regulators
284 for (i = 1; i < rdev->coupling_desc.n_coupled; i++) { in regulator_supply_is_couple()
285 c_rdev = rdev->coupling_desc.coupled_rdevs[i]; in regulator_supply_is_couple()
287 if (rdev->supply->rdev == c_rdev) in regulator_supply_is_couple()
300 for (i = n_coupled; i > 0; i--) { in regulator_unlock_recursive()
301 c_rdev = rdev->coupling_desc.coupled_rdevs[i - 1]; in regulator_unlock_recursive()
306 if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) { in regulator_unlock_recursive()
307 supply_rdev = c_rdev->supply->rdev; in regulator_unlock_recursive()
308 supply_n_coupled = supply_rdev->coupling_desc.n_coupled; in regulator_unlock_recursive()
326 for (i = 0; i < rdev->coupling_desc.n_coupled; i++) { in regulator_lock_recursive()
327 c_rdev = rdev->coupling_desc.coupled_rdevs[i]; in regulator_lock_recursive()
335 if (err == -EDEADLK) { in regulator_lock_recursive()
341 WARN_ON_ONCE(err != -EALREADY); in regulator_lock_recursive()
347 if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) { in regulator_lock_recursive()
348 err = regulator_lock_recursive(c_rdev->supply->rdev, in regulator_lock_recursive()
368 * regulator_unlock_dependent - unlock regulator's suppliers and coupled
378 regulator_unlock_recursive(rdev, rdev->coupling_desc.n_coupled); in regulator_unlock_dependent()
383 * regulator_lock_dependent - lock regulator's suppliers and coupled regulators
403 ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); in regulator_lock_dependent()
405 old_contended_rdev->ref_cnt++; in regulator_lock_dependent()
406 old_contended_rdev->mutex_owner = current; in regulator_lock_dependent()
417 } while (err == -EDEADLK); in regulator_lock_dependent()
432 return -EPERM; in regulator_check_voltage()
435 if (*max_uV > rdev->constraints->max_uV) in regulator_check_voltage()
436 *max_uV = rdev->constraints->max_uV; in regulator_check_voltage()
437 if (*min_uV < rdev->constraints->min_uV) in regulator_check_voltage()
438 *min_uV = rdev->constraints->min_uV; in regulator_check_voltage()
441 rdev_err(rdev, "unsupportable voltage range: %d-%duV\n", in regulator_check_voltage()
443 return -EINVAL; in regulator_check_voltage()
465 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_check_consumers()
466 voltage = ®ulator->voltage[state]; in regulator_check_consumers()
471 if (!voltage->min_uV && !voltage->max_uV) in regulator_check_consumers()
474 if (*max_uV > voltage->max_uV) in regulator_check_consumers()
475 *max_uV = voltage->max_uV; in regulator_check_consumers()
476 if (*min_uV < voltage->min_uV) in regulator_check_consumers()
477 *min_uV = voltage->min_uV; in regulator_check_consumers()
481 rdev_err(rdev, "Restricting voltage, %u-%uuV\n", in regulator_check_consumers()
483 return -EINVAL; in regulator_check_consumers()
497 return -EPERM; in regulator_check_current_limit()
500 if (*max_uA > rdev->constraints->max_uA && in regulator_check_current_limit()
501 rdev->constraints->max_uA) in regulator_check_current_limit()
502 *max_uA = rdev->constraints->max_uA; in regulator_check_current_limit()
503 if (*min_uA < rdev->constraints->min_uA) in regulator_check_current_limit()
504 *min_uA = rdev->constraints->min_uA; in regulator_check_current_limit()
507 rdev_err(rdev, "unsupportable current range: %d-%duA\n", in regulator_check_current_limit()
509 return -EINVAL; in regulator_check_current_limit()
527 return -EINVAL; in regulator_mode_constrain()
532 return -EPERM; in regulator_mode_constrain()
540 if (rdev->constraints->valid_modes_mask & *mode) in regulator_mode_constrain()
545 return -EINVAL; in regulator_mode_constrain()
551 if (rdev->constraints == NULL) in regulator_get_suspend_state()
556 return &rdev->constraints->state_standby; in regulator_get_suspend_state()
558 return &rdev->constraints->state_mem; in regulator_get_suspend_state()
560 return &rdev->constraints->state_disk; in regulator_get_suspend_state()
579 if (rstate->enabled != ENABLE_IN_SUSPEND && in regulator_get_suspend_state_check()
580 rstate->enabled != DISABLE_IN_SUSPEND) { in regulator_get_suspend_state_check()
581 if (rdev->desc->ops->set_suspend_voltage || in regulator_get_suspend_state_check()
582 rdev->desc->ops->set_suspend_mode) in regulator_get_suspend_state_check()
594 int uV; in microvolts_show() local
597 uV = regulator_get_voltage_rdev(rdev); in microvolts_show()
600 if (uV < 0) in microvolts_show()
601 return uV; in microvolts_show()
602 return sprintf(buf, "%d\n", uV); in microvolts_show()
684 status = rdev->desc->ops->get_status(rdev); in status_show()
717 return -ERANGE; in status_show()
729 if (!rdev->constraints) in min_microamps_show()
732 return sprintf(buf, "%d\n", rdev->constraints->min_uA); in min_microamps_show()
741 if (!rdev->constraints) in max_microamps_show()
744 return sprintf(buf, "%d\n", rdev->constraints->max_uA); in max_microamps_show()
753 if (!rdev->constraints) in min_microvolts_show()
756 return sprintf(buf, "%d\n", rdev->constraints->min_uV); in min_microvolts_show()
765 if (!rdev->constraints) in max_microvolts_show()
768 return sprintf(buf, "%d\n", rdev->constraints->max_uV); in max_microvolts_show()
780 list_for_each_entry(regulator, &rdev->consumer_list, list) { in requested_microamps_show()
781 if (regulator->enable_count) in requested_microamps_show()
782 uA += regulator->uA_load; in requested_microamps_show()
793 return sprintf(buf, "%d\n", rdev->use_count); in num_users_show()
802 switch (rdev->desc->type) { in type_show()
817 return sprintf(buf, "%d\n", rdev->constraints->state_mem.uV); in suspend_mem_microvolts_show()
826 return sprintf(buf, "%d\n", rdev->constraints->state_disk.uV); in suspend_disk_microvolts_show()
835 return sprintf(buf, "%d\n", rdev->constraints->state_standby.uV); in suspend_standby_microvolts_show()
845 rdev->constraints->state_mem.mode); in suspend_mem_mode_show()
855 rdev->constraints->state_disk.mode); in suspend_disk_mode_show()
865 rdev->constraints->state_standby.mode); in suspend_standby_mode_show()
875 rdev->constraints->state_mem.enabled); in suspend_mem_state_show()
885 rdev->constraints->state_disk.enabled); in suspend_disk_state_show()
895 rdev->constraints->state_standby.enabled); in suspend_standby_state_show()
907 ret = rdev->desc->ops->get_bypass(rdev, &bypass); in bypass_show()
926 return sprintf(buf, "%d\n", rdev->constraints->pw_budget_mW); in power_budget_milliwatt_show()
936 return sprintf(buf, "%d\n", rdev->pw_requested_mW); in power_requested_milliwatt_show()
982 if (!rdev->desc->ops->get_optimum_mode && in drms_uA_update()
983 !rdev->desc->ops->set_load) in drms_uA_update()
986 if (!rdev->desc->ops->set_mode && in drms_uA_update()
987 !rdev->desc->ops->set_load) in drms_uA_update()
988 return -EINVAL; in drms_uA_update()
991 list_for_each_entry(sibling, &rdev->consumer_list, list) { in drms_uA_update()
992 if (sibling->enable_count) in drms_uA_update()
993 current_uA += sibling->uA_load; in drms_uA_update()
996 current_uA += rdev->constraints->system_load; in drms_uA_update()
998 if (rdev->desc->ops->set_load) { in drms_uA_update()
1000 err = rdev->desc->ops->set_load(rdev, current_uA); in drms_uA_update()
1006 * Unfortunately in some cases the constraints->valid_ops has in drms_uA_update()
1012 if (!rdev->constraints->valid_modes_mask) { in drms_uA_update()
1029 if (rdev->supply) in drms_uA_update()
1030 input_uV = regulator_get_voltage_rdev(rdev->supply->rdev); in drms_uA_update()
1032 input_uV = rdev->constraints->input_uV; in drms_uA_update()
1042 mode = rdev->desc->ops->get_optimum_mode(rdev, input_uV, in drms_uA_update()
1048 rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV: %pe\n", in drms_uA_update()
1053 err = rdev->desc->ops->set_mode(rdev, mode); in drms_uA_update()
1067 if (rstate->enabled == ENABLE_IN_SUSPEND && in __suspend_set_state()
1068 rdev->desc->ops->set_suspend_enable) in __suspend_set_state()
1069 ret = rdev->desc->ops->set_suspend_enable(rdev); in __suspend_set_state()
1070 else if (rstate->enabled == DISABLE_IN_SUSPEND && in __suspend_set_state()
1071 rdev->desc->ops->set_suspend_disable) in __suspend_set_state()
1072 ret = rdev->desc->ops->set_suspend_disable(rdev); in __suspend_set_state()
1081 if (rdev->desc->ops->set_suspend_voltage && rstate->uV > 0) { in __suspend_set_state()
1082 ret = rdev->desc->ops->set_suspend_voltage(rdev, rstate->uV); in __suspend_set_state()
1089 if (rdev->desc->ops->set_suspend_mode && rstate->mode > 0) { in __suspend_set_state()
1090 ret = rdev->desc->ops->set_suspend_mode(rdev, rstate->mode); in __suspend_set_state()
1105 rdev->constraints->initial_state); in suspend_set_initial_state()
1115 struct regulation_constraints *constraints = rdev->constraints; in print_constraints_debug()
1117 size_t len = sizeof(buf) - 1; in print_constraints_debug()
1121 if (constraints->min_uV && constraints->max_uV) { in print_constraints_debug()
1122 if (constraints->min_uV == constraints->max_uV) in print_constraints_debug()
1123 count += scnprintf(buf + count, len - count, "%d mV ", in print_constraints_debug()
1124 constraints->min_uV / 1000); in print_constraints_debug()
1126 count += scnprintf(buf + count, len - count, in print_constraints_debug()
1127 "%d <--> %d mV ", in print_constraints_debug()
1128 constraints->min_uV / 1000, in print_constraints_debug()
1129 constraints->max_uV / 1000); in print_constraints_debug()
1132 if (!constraints->min_uV || in print_constraints_debug()
1133 constraints->min_uV != constraints->max_uV) { in print_constraints_debug()
1136 count += scnprintf(buf + count, len - count, in print_constraints_debug()
1140 if (constraints->uV_offset) in print_constraints_debug()
1141 count += scnprintf(buf + count, len - count, "%dmV offset ", in print_constraints_debug()
1142 constraints->uV_offset / 1000); in print_constraints_debug()
1144 if (constraints->min_uA && constraints->max_uA) { in print_constraints_debug()
1145 if (constraints->min_uA == constraints->max_uA) in print_constraints_debug()
1146 count += scnprintf(buf + count, len - count, "%d mA ", in print_constraints_debug()
1147 constraints->min_uA / 1000); in print_constraints_debug()
1149 count += scnprintf(buf + count, len - count, in print_constraints_debug()
1150 "%d <--> %d mA ", in print_constraints_debug()
1151 constraints->min_uA / 1000, in print_constraints_debug()
1152 constraints->max_uA / 1000); in print_constraints_debug()
1155 if (!constraints->min_uA || in print_constraints_debug()
1156 constraints->min_uA != constraints->max_uA) { in print_constraints_debug()
1159 count += scnprintf(buf + count, len - count, in print_constraints_debug()
1163 if (constraints->valid_modes_mask & REGULATOR_MODE_FAST) in print_constraints_debug()
1164 count += scnprintf(buf + count, len - count, "fast "); in print_constraints_debug()
1165 if (constraints->valid_modes_mask & REGULATOR_MODE_NORMAL) in print_constraints_debug()
1166 count += scnprintf(buf + count, len - count, "normal "); in print_constraints_debug()
1167 if (constraints->valid_modes_mask & REGULATOR_MODE_IDLE) in print_constraints_debug()
1168 count += scnprintf(buf + count, len - count, "idle "); in print_constraints_debug()
1169 if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY) in print_constraints_debug()
1170 count += scnprintf(buf + count, len - count, "standby "); in print_constraints_debug()
1172 if (constraints->pw_budget_mW) in print_constraints_debug()
1173 count += scnprintf(buf + count, len - count, "%d mW budget", in print_constraints_debug()
1174 constraints->pw_budget_mW); in print_constraints_debug()
1179 --count; in print_constraints_debug()
1181 count += scnprintf(buf + count, len - count, ", %s", in print_constraints_debug()
1192 struct regulation_constraints *constraints = rdev->constraints; in print_constraints()
1196 if ((constraints->min_uV != constraints->max_uV) && in print_constraints()
1205 const struct regulator_ops *ops = rdev->desc->ops; in machine_constraints_voltage()
1209 if (rdev->constraints->apply_uV && in machine_constraints_voltage()
1210 rdev->constraints->min_uV && rdev->constraints->max_uV) { in machine_constraints_voltage()
1214 if (current_uV == -ENOTRECOVERABLE) { in machine_constraints_voltage()
1216 rdev_info(rdev, "Setting %d-%duV\n", in machine_constraints_voltage()
1217 rdev->constraints->min_uV, in machine_constraints_voltage()
1218 rdev->constraints->max_uV); in machine_constraints_voltage()
1220 rdev->constraints->min_uV, in machine_constraints_voltage()
1221 rdev->constraints->max_uV); in machine_constraints_voltage()
1226 if (current_uV != -EPROBE_DEFER) in machine_constraints_voltage()
1241 if (current_uV < rdev->constraints->min_uV) { in machine_constraints_voltage()
1242 target_min = rdev->constraints->min_uV; in machine_constraints_voltage()
1243 target_max = rdev->constraints->min_uV; in machine_constraints_voltage()
1246 if (current_uV > rdev->constraints->max_uV) { in machine_constraints_voltage()
1247 target_min = rdev->constraints->max_uV; in machine_constraints_voltage()
1248 target_max = rdev->constraints->max_uV; in machine_constraints_voltage()
1252 rdev_info(rdev, "Bringing %duV into %d-%duV\n", in machine_constraints_voltage()
1258 "failed to apply %d-%duV constraint: %pe\n", in machine_constraints_voltage()
1265 /* constrain machine-level voltage specs to fit in machine_constraints_voltage()
1268 if (ops->list_voltage && rdev->desc->n_voltages) { in machine_constraints_voltage()
1269 int count = rdev->desc->n_voltages; in machine_constraints_voltage()
1273 int cmin = constraints->min_uV; in machine_constraints_voltage()
1274 int cmax = constraints->max_uV; in machine_constraints_voltage()
1276 /* it's safe to autoconfigure fixed-voltage supplies in machine_constraints_voltage()
1282 constraints->min_uV = cmin; in machine_constraints_voltage()
1283 constraints->max_uV = cmax; in machine_constraints_voltage()
1290 /* else require explicit machine-level constraints */ in machine_constraints_voltage()
1293 return -EINVAL; in machine_constraints_voltage()
1297 if (rdev->desc->continuous_voltage_range) in machine_constraints_voltage()
1304 value = ops->list_voltage(rdev, i); in machine_constraints_voltage()
1318 "unsupportable voltage constraints %u-%uuV\n", in machine_constraints_voltage()
1320 return -EINVAL; in machine_constraints_voltage()
1324 if (constraints->min_uV < min_uV) { in machine_constraints_voltage()
1325 rdev_dbg(rdev, "override min_uV, %d -> %d\n", in machine_constraints_voltage()
1326 constraints->min_uV, min_uV); in machine_constraints_voltage()
1327 constraints->min_uV = min_uV; in machine_constraints_voltage()
1329 if (constraints->max_uV > max_uV) { in machine_constraints_voltage()
1330 rdev_dbg(rdev, "override max_uV, %d -> %d\n", in machine_constraints_voltage()
1331 constraints->max_uV, max_uV); in machine_constraints_voltage()
1332 constraints->max_uV = max_uV; in machine_constraints_voltage()
1342 const struct regulator_ops *ops = rdev->desc->ops; in machine_constraints_current()
1345 if (!constraints->min_uA && !constraints->max_uA) in machine_constraints_current()
1348 if (constraints->min_uA > constraints->max_uA) { in machine_constraints_current()
1350 return -EINVAL; in machine_constraints_current()
1353 if (!ops->set_current_limit || !ops->get_current_limit) { in machine_constraints_current()
1359 ret = ops->set_current_limit(rdev, constraints->min_uA, in machine_constraints_current()
1360 constraints->max_uA); in machine_constraints_current()
1397 return -EOPNOTSUPP; in handle_notify_limits()
1399 if (limits->prot) in handle_notify_limits()
1400 ret = notif_set_limit(rdev, set, limits->prot, in handle_notify_limits()
1405 if (limits->err) in handle_notify_limits()
1406 ret = notif_set_limit(rdev, set, limits->err, in handle_notify_limits()
1411 if (limits->warn) in handle_notify_limits()
1412 ret = notif_set_limit(rdev, set, limits->warn, in handle_notify_limits()
1418 * set_machine_constraints - sets regulator constraints
1432 const struct regulator_ops *ops = rdev->desc->ops; in set_machine_constraints()
1434 ret = machine_constraints_voltage(rdev, rdev->constraints); in set_machine_constraints()
1438 ret = machine_constraints_current(rdev, rdev->constraints); in set_machine_constraints()
1442 if (rdev->constraints->ilim_uA && ops->set_input_current_limit) { in set_machine_constraints()
1443 ret = ops->set_input_current_limit(rdev, in set_machine_constraints()
1444 rdev->constraints->ilim_uA); in set_machine_constraints()
1452 if (rdev->constraints->initial_state) { in set_machine_constraints()
1460 if (rdev->constraints->initial_mode) { in set_machine_constraints()
1461 if (!ops->set_mode) { in set_machine_constraints()
1463 return -EINVAL; in set_machine_constraints()
1466 ret = ops->set_mode(rdev, rdev->constraints->initial_mode); in set_machine_constraints()
1471 } else if (rdev->constraints->system_load) { in set_machine_constraints()
1479 if ((rdev->constraints->ramp_delay || rdev->constraints->ramp_disable) in set_machine_constraints()
1480 && ops->set_ramp_delay) { in set_machine_constraints()
1481 ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay); in set_machine_constraints()
1488 if (rdev->constraints->pull_down && ops->set_pull_down) { in set_machine_constraints()
1489 ret = ops->set_pull_down(rdev); in set_machine_constraints()
1496 if (rdev->constraints->soft_start && ops->set_soft_start) { in set_machine_constraints()
1497 ret = ops->set_soft_start(rdev); in set_machine_constraints()
1508 * PMIC on board to another type - and the another PMIC's driver does in set_machine_constraints()
1510 * the DT limits are respected - especially if the new PMIC HW also in set_machine_constraints()
1515 * over-curret protection and detection and get rid of this special in set_machine_constraints()
1518 if (rdev->constraints->over_current_protection in set_machine_constraints()
1519 && ops->set_over_current_protection) { in set_machine_constraints()
1520 int lim = rdev->constraints->over_curr_limits.prot; in set_machine_constraints()
1522 ret = ops->set_over_current_protection(rdev, lim, in set_machine_constraints()
1532 if (rdev->constraints->over_current_detection) in set_machine_constraints()
1534 ops->set_over_current_protection, in set_machine_constraints()
1535 &rdev->constraints->over_curr_limits); in set_machine_constraints()
1537 if (ret != -EOPNOTSUPP) { in set_machine_constraints()
1543 "IC does not support requested over-current limits\n"); in set_machine_constraints()
1546 if (rdev->constraints->over_voltage_detection) in set_machine_constraints()
1548 ops->set_over_voltage_protection, in set_machine_constraints()
1549 &rdev->constraints->over_voltage_limits); in set_machine_constraints()
1551 if (ret != -EOPNOTSUPP) { in set_machine_constraints()
1560 if (rdev->constraints->under_voltage_detection) in set_machine_constraints()
1562 ops->set_under_voltage_protection, in set_machine_constraints()
1563 &rdev->constraints->under_voltage_limits); in set_machine_constraints()
1565 if (ret != -EOPNOTSUPP) { in set_machine_constraints()
1574 if (rdev->constraints->over_temp_detection) in set_machine_constraints()
1576 ops->set_thermal_protection, in set_machine_constraints()
1577 &rdev->constraints->temp_limits); in set_machine_constraints()
1579 if (ret != -EOPNOTSUPP) { in set_machine_constraints()
1588 if (rdev->constraints->active_discharge && ops->set_active_discharge) { in set_machine_constraints()
1589 bool ad_state = (rdev->constraints->active_discharge == in set_machine_constraints()
1592 ret = ops->set_active_discharge(rdev, ad_state); in set_machine_constraints()
1606 if (!rdev->ena_pin && !ops->enable) { in set_machine_constraints()
1607 if (rdev->supply_name && !rdev->supply) in set_machine_constraints()
1608 return -EPROBE_DEFER; in set_machine_constraints()
1610 if (rdev->supply) in set_machine_constraints()
1611 rdev->constraints->always_on = in set_machine_constraints()
1612 rdev->supply->rdev->constraints->always_on; in set_machine_constraints()
1614 rdev->constraints->always_on = true; in set_machine_constraints()
1620 if (rdev->constraints->always_on || rdev->constraints->boot_on) { in set_machine_constraints()
1624 if (rdev->supply_name && !rdev->supply) in set_machine_constraints()
1625 return -EPROBE_DEFER; in set_machine_constraints()
1629 * when rdev is only boot-on. in set_machine_constraints()
1631 if (rdev->supply && in set_machine_constraints()
1632 (rdev->constraints->always_on || in set_machine_constraints()
1633 !regulator_is_enabled(rdev->supply))) { in set_machine_constraints()
1634 ret = regulator_enable(rdev->supply); in set_machine_constraints()
1636 _regulator_put(rdev->supply); in set_machine_constraints()
1637 rdev->supply = NULL; in set_machine_constraints()
1643 if (ret < 0 && ret != -EINVAL) { in set_machine_constraints()
1648 if (rdev->constraints->always_on) in set_machine_constraints()
1649 rdev->use_count++; in set_machine_constraints()
1650 } else if (rdev->desc->off_on_delay) { in set_machine_constraints()
1651 rdev->last_off = ktime_get(); in set_machine_constraints()
1654 if (!rdev->constraints->pw_budget_mW) in set_machine_constraints()
1655 rdev->constraints->pw_budget_mW = INT_MAX; in set_machine_constraints()
1662 * set_supply - set regulator supply regulator
1679 if (!try_module_get(supply_rdev->owner)) in set_supply()
1680 return -ENODEV; in set_supply()
1682 rdev->supply = create_regulator(supply_rdev, &rdev->dev, "SUPPLY"); in set_supply()
1683 if (rdev->supply == NULL) { in set_supply()
1684 module_put(supply_rdev->owner); in set_supply()
1685 err = -ENOMEM; in set_supply()
1688 supply_rdev->open_count++; in set_supply()
1694 * set_consumer_device_supply - Bind a regulator to a symbolic supply
1702 * need to provide board-specific regulator names as platform data.
1714 return -EINVAL; in set_consumer_device_supply()
1723 return -ENOMEM; in set_consumer_device_supply()
1725 new_node->regulator = rdev; in set_consumer_device_supply()
1726 new_node->supply = supply; in set_consumer_device_supply()
1729 new_node->dev_name = kstrdup(consumer_dev_name, GFP_KERNEL); in set_consumer_device_supply()
1730 if (new_node->dev_name == NULL) { in set_consumer_device_supply()
1732 return -ENOMEM; in set_consumer_device_supply()
1738 if (node->dev_name && consumer_dev_name) { in set_consumer_device_supply()
1739 if (strcmp(node->dev_name, consumer_dev_name) != 0) in set_consumer_device_supply()
1741 } else if (node->dev_name || consumer_dev_name) { in set_consumer_device_supply()
1745 if (strcmp(node->supply, supply) != 0) in set_consumer_device_supply()
1750 dev_name(&node->regulator->dev), in set_consumer_device_supply()
1751 node->regulator->desc->name, in set_consumer_device_supply()
1753 dev_name(&rdev->dev), rdev_get_name(rdev)); in set_consumer_device_supply()
1757 list_add(&new_node->list, ®ulator_map_list); in set_consumer_device_supply()
1764 kfree(new_node->dev_name); in set_consumer_device_supply()
1766 return -EBUSY; in set_consumer_device_supply()
1774 if (rdev == node->regulator) { in unset_regulator_supplies()
1775 list_del(&node->list); in unset_regulator_supplies()
1776 kfree(node->dev_name); in unset_regulator_supplies()
1787 const struct regulator *regulator = file->private_data; in constraint_flags_read_file()
1788 const struct regulation_constraints *c = regulator->rdev->constraints; in constraint_flags_read_file()
1797 return -ENOMEM; in constraint_flags_read_file()
1807 c->always_on, in constraint_flags_read_file()
1808 c->boot_on, in constraint_flags_read_file()
1809 c->apply_uV, in constraint_flags_read_file()
1810 c->ramp_disable, in constraint_flags_read_file()
1811 c->soft_start, in constraint_flags_read_file()
1812 c->pull_down, in constraint_flags_read_file()
1813 c->over_current_protection); in constraint_flags_read_file()
1839 regulator->dev = dev; in link_and_create_debugfs()
1842 err = sysfs_create_link_nowarn(&rdev->dev.kobj, &dev->kobj, in link_and_create_debugfs()
1843 regulator->supply_name); in link_and_create_debugfs()
1846 dev->kobj.name, ERR_PTR(err)); in link_and_create_debugfs()
1847 /* non-fatal */ in link_and_create_debugfs()
1851 if (err != -EEXIST) { in link_and_create_debugfs()
1852 regulator->debugfs = debugfs_create_dir(regulator->supply_name, rdev->debugfs); in link_and_create_debugfs()
1853 if (IS_ERR(regulator->debugfs)) { in link_and_create_debugfs()
1855 regulator->debugfs = NULL; in link_and_create_debugfs()
1859 if (regulator->debugfs) { in link_and_create_debugfs()
1860 debugfs_create_u32("uA_load", 0444, regulator->debugfs, in link_and_create_debugfs()
1861 ®ulator->uA_load); in link_and_create_debugfs()
1862 debugfs_create_u32("min_uV", 0444, regulator->debugfs, in link_and_create_debugfs()
1863 ®ulator->voltage[PM_SUSPEND_ON].min_uV); in link_and_create_debugfs()
1864 debugfs_create_u32("max_uV", 0444, regulator->debugfs, in link_and_create_debugfs()
1865 ®ulator->voltage[PM_SUSPEND_ON].max_uV); in link_and_create_debugfs()
1866 debugfs_create_file("constraint_flags", 0444, regulator->debugfs, in link_and_create_debugfs()
1877 lockdep_assert_held_once(&rdev->mutex.base); in create_regulator()
1883 size = snprintf(buf, REG_STR_SIZE, "%s-%s", in create_regulator()
1884 dev->kobj.name, supply_name); in create_regulator()
1903 regulator->rdev = rdev; in create_regulator()
1904 regulator->supply_name = supply_name; in create_regulator()
1906 list_add(®ulator->list, &rdev->consumer_list); in create_regulator()
1909 * Check now if the regulator is an always on regulator - if in create_regulator()
1915 regulator->always_on = true; in create_regulator()
1922 if (rdev->constraints && rdev->constraints->enable_time) in _regulator_get_enable_time()
1923 return rdev->constraints->enable_time; in _regulator_get_enable_time()
1924 if (rdev->desc->ops->enable_time) in _regulator_get_enable_time()
1925 return rdev->desc->ops->enable_time(rdev); in _regulator_get_enable_time()
1926 return rdev->desc->enable_time; in _regulator_get_enable_time()
1935 if (map->src_dev == dev && strcmp(map->src_supply, supply) == 0) in regulator_find_supply_alias()
1948 *supply, map->alias_supply, in regulator_supply_alias()
1949 dev_name(map->alias_dev)); in regulator_supply_alias()
1950 *dev = map->alias_dev; in regulator_supply_alias()
1951 *supply = map->alias_supply; in regulator_supply_alias()
1978 if (PTR_ERR(r) == -ENODEV) in regulator_dt_lookup()
1986 * regulator_dev_lookup - lookup a regulator device.
1996 * -%ENODEV if lookup fails permanently, -%EPROBE_DEFER if lookup could succeed
2013 /* if not found, try doing it non-dt way */ in regulator_dev_lookup()
2020 if (map->dev_name && in regulator_dev_lookup()
2021 (!devname || strcmp(map->dev_name, devname))) in regulator_dev_lookup()
2024 if (strcmp(map->supply, supply) == 0 && in regulator_dev_lookup()
2025 get_device(&map->regulator->dev)) { in regulator_dev_lookup()
2026 r = map->regulator; in regulator_dev_lookup()
2039 return ERR_PTR(-ENODEV); in regulator_dev_lookup()
2045 struct device *dev = rdev->dev.parent; in regulator_resolve_supply()
2050 if (!rdev->supply_name) in regulator_resolve_supply()
2053 /* Supply already resolved? (fast-path without locking contention) */ in regulator_resolve_supply()
2054 if (rdev->supply) in regulator_resolve_supply()
2060 r = regulator_dt_lookup(&rdev->dev, rdev->supply_name); in regulator_resolve_supply()
2066 r = regulator_dev_lookup(dev, rdev->supply_name); in regulator_resolve_supply()
2072 if (ret == -EPROBE_DEFER) in regulator_resolve_supply()
2078 ret = -EPROBE_DEFER; in regulator_resolve_supply()
2081 get_device(&r->dev); in regulator_resolve_supply()
2083 dev_err(dev, "Failed to resolve %s-supply for %s\n", in regulator_resolve_supply()
2084 rdev->supply_name, rdev->desc->name); in regulator_resolve_supply()
2085 ret = -EPROBE_DEFER; in regulator_resolve_supply()
2092 rdev->desc->name, rdev->supply_name); in regulator_resolve_supply()
2094 ret = -EINVAL; in regulator_resolve_supply()
2099 ret = -EPROBE_DEFER; in regulator_resolve_supply()
2102 get_device(&r->dev); in regulator_resolve_supply()
2111 if (r->dev.parent && r->dev.parent != rdev->dev.parent) { in regulator_resolve_supply()
2112 if (!device_is_bound(r->dev.parent)) { in regulator_resolve_supply()
2113 put_device(&r->dev); in regulator_resolve_supply()
2114 ret = -EPROBE_DEFER; in regulator_resolve_supply()
2122 put_device(&r->dev); in regulator_resolve_supply()
2127 * Recheck rdev->supply with rdev->mutex lock held to avoid a race in regulator_resolve_supply()
2128 * between rdev->supply null check and setting rdev->supply in in regulator_resolve_supply()
2134 if (rdev->supply) { in regulator_resolve_supply()
2136 put_device(&r->dev); in regulator_resolve_supply()
2143 put_device(&r->dev); in regulator_resolve_supply()
2149 /* rdev->supply was created in set_supply() */ in regulator_resolve_supply()
2150 link_and_create_debugfs(rdev->supply, r, &rdev->dev); in regulator_resolve_supply()
2157 if (rdev->use_count) { in regulator_resolve_supply()
2158 ret = regulator_enable(rdev->supply); in regulator_resolve_supply()
2160 _regulator_put(rdev->supply); in regulator_resolve_supply()
2161 rdev->supply = NULL; in regulator_resolve_supply()
2170 /* common pre-checks for regulator requests */
2176 return -EINVAL; in _regulator_get_common_check()
2181 return -EINVAL; in _regulator_get_common_check()
2188 * _regulator_get_common - Common code for regulator requests
2212 * than -ENODEV our job here is done, we simply return it. in _regulator_get_common()
2214 if (ret != -ENODEV) in _regulator_get_common()
2220 return ERR_PTR(-ENODEV); in _regulator_get_common()
2232 return ERR_PTR(-EPROBE_DEFER); in _regulator_get_common()
2234 get_device(&rdev->dev); in _regulator_get_common()
2243 return ERR_PTR(-ENODEV); in _regulator_get_common()
2247 if (rdev->exclusive) { in _regulator_get_common()
2248 regulator = ERR_PTR(-EPERM); in _regulator_get_common()
2249 put_device(&rdev->dev); in _regulator_get_common()
2253 if (get_type == EXCLUSIVE_GET && rdev->open_count) { in _regulator_get_common()
2254 regulator = ERR_PTR(-EBUSY); in _regulator_get_common()
2255 put_device(&rdev->dev); in _regulator_get_common()
2260 ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled); in _regulator_get_common()
2264 regulator = ERR_PTR(-EPROBE_DEFER); in _regulator_get_common()
2265 put_device(&rdev->dev); in _regulator_get_common()
2272 put_device(&rdev->dev); in _regulator_get_common()
2276 if (!try_module_get(rdev->owner)) { in _regulator_get_common()
2277 regulator = ERR_PTR(-EPROBE_DEFER); in _regulator_get_common()
2278 put_device(&rdev->dev); in _regulator_get_common()
2286 regulator = ERR_PTR(-ENOMEM); in _regulator_get_common()
2287 module_put(rdev->owner); in _regulator_get_common()
2288 put_device(&rdev->dev); in _regulator_get_common()
2294 rdev->open_count++; in _regulator_get_common()
2296 rdev->exclusive = 1; in _regulator_get_common()
2300 rdev->use_count = 1; in _regulator_get_common()
2301 regulator->enable_count = 1; in _regulator_get_common()
2304 if (rdev->supply) { in _regulator_get_common()
2305 ret = regulator_enable(rdev->supply); in _regulator_get_common()
2308 module_put(rdev->owner); in _regulator_get_common()
2309 put_device(&rdev->dev); in _regulator_get_common()
2314 rdev->use_count = 0; in _regulator_get_common()
2315 regulator->enable_count = 0; in _regulator_get_common()
2319 link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS); in _regulator_get_common()
2321 regulator->device_link = true; in _regulator_get_common()
2342 * regulator_get - lookup and obtain a reference to a regulator.
2361 * regulator_get_exclusive - obtain exclusive access to a regulator.
2389 * regulator_get_optional - obtain optional access to a regulator.
2416 struct regulator_dev *rdev = regulator->rdev; in destroy_regulator()
2418 debugfs_remove_recursive(regulator->debugfs); in destroy_regulator()
2420 if (regulator->dev) { in destroy_regulator()
2421 if (regulator->device_link) in destroy_regulator()
2422 device_link_remove(regulator->dev, &rdev->dev); in destroy_regulator()
2425 sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name); in destroy_regulator()
2429 list_del(®ulator->list); in destroy_regulator()
2431 rdev->open_count--; in destroy_regulator()
2432 rdev->exclusive = 0; in destroy_regulator()
2435 kfree_const(regulator->supply_name); in destroy_regulator()
2450 WARN_ON(regulator->enable_count); in _regulator_put()
2452 rdev = regulator->rdev; in _regulator_put()
2456 module_put(rdev->owner); in _regulator_put()
2457 put_device(&rdev->dev); in _regulator_put()
2461 * regulator_put - "free" the regulator source
2477 * regulator_register_supply_alias - Provide device alias for supply lookup
2498 return -EEXIST; in regulator_register_supply_alias()
2502 return -ENOMEM; in regulator_register_supply_alias()
2504 map->src_dev = dev; in regulator_register_supply_alias()
2505 map->src_supply = id; in regulator_register_supply_alias()
2506 map->alias_dev = alias_dev; in regulator_register_supply_alias()
2507 map->alias_supply = alias_id; in regulator_register_supply_alias()
2509 list_add(&map->list, ®ulator_supply_alias_list); in regulator_register_supply_alias()
2511 pr_info("Adding alias for supply %s,%s -> %s,%s\n", in regulator_register_supply_alias()
2519 * regulator_unregister_supply_alias - Remove device alias
2532 list_del(&map->list); in regulator_unregister_supply_alias()
2539 * regulator_bulk_register_supply_alias - register multiple aliases
2575 "Failed to create supply alias %s,%s -> %s,%s\n", in regulator_bulk_register_supply_alias()
2578 while (--i >= 0) in regulator_bulk_register_supply_alias()
2586 * regulator_bulk_unregister_supply_alias - unregister multiple aliases
2614 gpiod = config->ena_gpiod; in regulator_ena_gpio_request()
2620 if (pin->gpiod == gpiod) { in regulator_ena_gpio_request()
2628 return -ENOMEM; in regulator_ena_gpio_request()
2634 pin->gpiod = gpiod; in regulator_ena_gpio_request()
2635 list_add(&pin->list, ®ulator_ena_gpio_list); in regulator_ena_gpio_request()
2638 pin->request_count++; in regulator_ena_gpio_request()
2639 rdev->ena_pin = pin; in regulator_ena_gpio_request()
2651 if (!rdev->ena_pin) in regulator_ena_gpio_free()
2656 if (pin != rdev->ena_pin) in regulator_ena_gpio_free()
2659 if (--pin->request_count) in regulator_ena_gpio_free()
2662 gpiod_put(pin->gpiod); in regulator_ena_gpio_free()
2663 list_del(&pin->list); in regulator_ena_gpio_free()
2668 rdev->ena_pin = NULL; in regulator_ena_gpio_free()
2672 * regulator_ena_gpio_ctrl - balance enable_count of each GPIO and actual GPIO pin control
2683 struct regulator_enable_gpio *pin = rdev->ena_pin; in regulator_ena_gpio_ctrl()
2686 return -EINVAL; in regulator_ena_gpio_ctrl()
2690 if (pin->enable_count == 0) in regulator_ena_gpio_ctrl()
2691 gpiod_set_value_cansleep(pin->gpiod, 1); in regulator_ena_gpio_ctrl()
2693 pin->enable_count++; in regulator_ena_gpio_ctrl()
2695 if (pin->enable_count > 1) { in regulator_ena_gpio_ctrl()
2696 pin->enable_count--; in regulator_ena_gpio_ctrl()
2701 if (pin->enable_count <= 1) { in regulator_ena_gpio_ctrl()
2702 gpiod_set_value_cansleep(pin->gpiod, 0); in regulator_ena_gpio_ctrl()
2703 pin->enable_count = 0; in regulator_ena_gpio_ctrl()
2711 * _regulator_check_status_enabled - check if regulator status can be
2716 * * 1 - if status shows regulator is in enabled state
2717 * * 0 - if not enabled state
2718 * * Error Value - as received from ops->get_status()
2722 int ret = rdev->desc->ops->get_status(rdev); in _regulator_check_status_enabled()
2754 if (rdev->desc->off_on_delay) { in _regulator_do_enable()
2758 ktime_t end = ktime_add_us(rdev->last_off, rdev->desc->off_on_delay); in _regulator_do_enable()
2765 if (rdev->ena_pin) { in _regulator_do_enable()
2766 if (!rdev->ena_gpio_state) { in _regulator_do_enable()
2770 rdev->ena_gpio_state = 1; in _regulator_do_enable()
2772 } else if (rdev->desc->ops->enable) { in _regulator_do_enable()
2773 ret = rdev->desc->ops->enable(rdev); in _regulator_do_enable()
2777 return -EINVAL; in _regulator_do_enable()
2790 * return -ETIMEDOUT. in _regulator_do_enable()
2792 if (rdev->desc->poll_enabled_time) { in _regulator_do_enable()
2796 fsleep(rdev->desc->poll_enabled_time); in _regulator_do_enable()
2798 if (rdev->desc->ops->get_status) { in _regulator_do_enable()
2804 } else if (rdev->desc->ops->is_enabled(rdev)) in _regulator_do_enable()
2807 time_remaining -= rdev->desc->poll_enabled_time; in _regulator_do_enable()
2812 return -ETIMEDOUT; in _regulator_do_enable()
2824 * _regulator_handle_consumer_enable - handle that a consumer enabled
2846 struct regulator_dev *rdev = regulator->rdev; in _regulator_handle_consumer_enable()
2848 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_handle_consumer_enable()
2850 regulator->enable_count++; in _regulator_handle_consumer_enable()
2851 if (regulator->uA_load && regulator->enable_count == 1) { in _regulator_handle_consumer_enable()
2854 regulator->enable_count--; in _regulator_handle_consumer_enable()
2862 * _regulator_handle_consumer_disable - handle that a consumer disabled
2871 struct regulator_dev *rdev = regulator->rdev; in _regulator_handle_consumer_disable()
2873 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_handle_consumer_disable()
2875 if (!regulator->enable_count) { in _regulator_handle_consumer_disable()
2877 return -EINVAL; in _regulator_handle_consumer_disable()
2880 regulator->enable_count--; in _regulator_handle_consumer_disable()
2881 if (regulator->uA_load && regulator->enable_count == 0) in _regulator_handle_consumer_disable()
2890 struct regulator_dev *rdev = regulator->rdev; in _regulator_enable()
2893 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_enable()
2895 if (rdev->use_count == 0 && rdev->supply) { in _regulator_enable()
2896 ret = _regulator_enable(rdev->supply); in _regulator_enable()
2902 if (rdev->coupling_desc.n_coupled > 1) { in _regulator_enable()
2912 if (rdev->use_count == 0) { in _regulator_enable()
2918 if (ret == -EINVAL || ret == 0) { in _regulator_enable()
2921 ret = -EPERM; in _regulator_enable()
2935 /* Fallthrough on positive return values - already enabled */ in _regulator_enable()
2938 if (regulator->enable_count == 1) in _regulator_enable()
2939 rdev->use_count++; in _regulator_enable()
2947 if (rdev->use_count == 0 && rdev->supply) in _regulator_enable()
2948 _regulator_disable(rdev->supply); in _regulator_enable()
2954 * regulator_enable - enable regulator output
2968 struct regulator_dev *rdev = regulator->rdev; in regulator_enable()
2986 if (rdev->ena_pin) { in _regulator_do_disable()
2987 if (rdev->ena_gpio_state) { in _regulator_do_disable()
2991 rdev->ena_gpio_state = 0; in _regulator_do_disable()
2994 } else if (rdev->desc->ops->disable) { in _regulator_do_disable()
2995 ret = rdev->desc->ops->disable(rdev); in _regulator_do_disable()
3000 if (rdev->desc->off_on_delay) in _regulator_do_disable()
3001 rdev->last_off = ktime_get_boottime(); in _regulator_do_disable()
3011 struct regulator_dev *rdev = regulator->rdev; in _regulator_disable()
3014 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_disable()
3016 if (WARN(regulator->enable_count == 0, in _regulator_disable()
3018 return -EIO; in _regulator_disable()
3020 if (regulator->enable_count == 1) { in _regulator_disable()
3023 if (rdev->use_count == 1 && in _regulator_disable()
3024 (rdev->constraints && !rdev->constraints->always_on)) { in _regulator_disable()
3032 return -EINVAL; in _regulator_disable()
3046 rdev->use_count = 0; in _regulator_disable()
3047 } else if (rdev->use_count > 1) { in _regulator_disable()
3048 rdev->use_count--; in _regulator_disable()
3055 if (ret == 0 && rdev->coupling_desc.n_coupled > 1) in _regulator_disable()
3058 if (ret == 0 && rdev->use_count == 0 && rdev->supply) in _regulator_disable()
3059 ret = _regulator_disable(rdev->supply); in _regulator_disable()
3065 * regulator_disable - disable regulator output
3080 struct regulator_dev *rdev = regulator->rdev; in regulator_disable()
3097 lockdep_assert_held_once(&rdev->mutex.base); in _regulator_force_disable()
3102 return -EINVAL; in _regulator_force_disable()
3119 * regulator_force_disable - force disable regulator output
3131 struct regulator_dev *rdev = regulator->rdev; in regulator_force_disable()
3137 ret = _regulator_force_disable(regulator->rdev); in regulator_force_disable()
3139 if (rdev->coupling_desc.n_coupled > 1) in regulator_force_disable()
3142 if (regulator->uA_load) { in regulator_force_disable()
3143 regulator->uA_load = 0; in regulator_force_disable()
3147 if (rdev->use_count != 0 && rdev->supply) in regulator_force_disable()
3148 _regulator_disable(rdev->supply); in regulator_force_disable()
3173 cancel_delayed_work(&rdev->disable_work); in regulator_disable_work()
3175 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_disable_work()
3176 count = regulator->deferred_disables; in regulator_disable_work()
3182 regulator->deferred_disables = 0; in regulator_disable_work()
3193 if (rdev->coupling_desc.n_coupled > 1) in regulator_disable_work()
3200 * regulator_disable_deferred - disable regulator output with delay
3215 struct regulator_dev *rdev = regulator->rdev; in regulator_disable_deferred()
3221 regulator->deferred_disables++; in regulator_disable_deferred()
3222 mod_delayed_work(system_power_efficient_wq, &rdev->disable_work, in regulator_disable_deferred()
3233 if (rdev->ena_pin) in _regulator_is_enabled()
3234 return rdev->ena_gpio_state; in _regulator_is_enabled()
3237 if (!rdev->desc->ops->is_enabled) in _regulator_is_enabled()
3240 return rdev->desc->ops->is_enabled(rdev); in _regulator_is_enabled()
3246 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_list_voltage()
3249 if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector) in _regulator_list_voltage()
3250 return rdev->desc->fixed_uV; in _regulator_list_voltage()
3252 if (ops->list_voltage) { in _regulator_list_voltage()
3253 if (selector >= rdev->desc->n_voltages) in _regulator_list_voltage()
3254 return -EINVAL; in _regulator_list_voltage()
3255 if (selector < rdev->desc->linear_min_sel) in _regulator_list_voltage()
3259 ret = ops->list_voltage(rdev, selector); in _regulator_list_voltage()
3262 } else if (rdev->is_switch && rdev->supply) { in _regulator_list_voltage()
3263 ret = _regulator_list_voltage(rdev->supply->rdev, in _regulator_list_voltage()
3266 return -EINVAL; in _regulator_list_voltage()
3270 if (ret < rdev->constraints->min_uV) in _regulator_list_voltage()
3272 else if (ret > rdev->constraints->max_uV) in _regulator_list_voltage()
3280 * regulator_is_enabled - is the regulator output enabled
3295 if (regulator->always_on) in regulator_is_enabled()
3298 regulator_lock(regulator->rdev); in regulator_is_enabled()
3299 ret = _regulator_is_enabled(regulator->rdev); in regulator_is_enabled()
3300 regulator_unlock(regulator->rdev); in regulator_is_enabled()
3307 * regulator_count_voltages - count regulator_list_voltage() selectors
3317 struct regulator_dev *rdev = regulator->rdev; in regulator_count_voltages()
3319 if (rdev->desc->n_voltages) in regulator_count_voltages()
3320 return rdev->desc->n_voltages; in regulator_count_voltages()
3322 if (!rdev->is_switch || !rdev->supply) in regulator_count_voltages()
3323 return -EINVAL; in regulator_count_voltages()
3325 return regulator_count_voltages(rdev->supply); in regulator_count_voltages()
3330 * regulator_list_voltage - enumerate supported voltages
3341 return _regulator_list_voltage(regulator->rdev, selector, 1); in regulator_list_voltage()
3346 * regulator_get_regmap - get the regulator's register map
3350 * encoded -%EOPNOTSUPP if @regulator doesn't use regmap.
3354 struct regmap *map = regulator->rdev->regmap; in regulator_get_regmap()
3356 return map ? map : ERR_PTR(-EOPNOTSUPP); in regulator_get_regmap()
3361 * regulator_get_hardware_vsel_register - get the HW voltage selector register
3367 * regulator voltage. This might be useful when configuring voltage-scaling
3371 * Return: 0 on success, or -%EOPNOTSUPP if the regulator does not support
3381 struct regulator_dev *rdev = regulator->rdev; in regulator_get_hardware_vsel_register()
3382 const struct regulator_ops *ops = rdev->desc->ops; in regulator_get_hardware_vsel_register()
3384 if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap) in regulator_get_hardware_vsel_register()
3385 return -EOPNOTSUPP; in regulator_get_hardware_vsel_register()
3387 *vsel_reg = rdev->desc->vsel_reg; in regulator_get_hardware_vsel_register()
3388 *vsel_mask = rdev->desc->vsel_mask; in regulator_get_hardware_vsel_register()
3395 * regulator_list_hardware_vsel - get the HW-specific register value for a selector
3399 * Converts the selector to a hardware-specific voltage selector that can be
3403 * Return: 0 on success, -%EINVAL if the selector is outside the supported
3404 * range, or -%EOPNOTSUPP if the regulator does not support voltage
3410 struct regulator_dev *rdev = regulator->rdev; in regulator_list_hardware_vsel()
3411 const struct regulator_ops *ops = rdev->desc->ops; in regulator_list_hardware_vsel()
3413 if (selector >= rdev->desc->n_voltages) in regulator_list_hardware_vsel()
3414 return -EINVAL; in regulator_list_hardware_vsel()
3415 if (selector < rdev->desc->linear_min_sel) in regulator_list_hardware_vsel()
3417 if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap) in regulator_list_hardware_vsel()
3418 return -EOPNOTSUPP; in regulator_list_hardware_vsel()
3425 * regulator_hardware_enable - access the HW for enable/disable regulator
3436 struct regulator_dev *rdev = regulator->rdev; in regulator_hardware_enable()
3437 const struct regulator_ops *ops = rdev->desc->ops; in regulator_hardware_enable()
3438 int ret = -EOPNOTSUPP; in regulator_hardware_enable()
3440 if (!rdev->exclusive || !ops || !ops->enable || !ops->disable) in regulator_hardware_enable()
3444 ret = ops->enable(rdev); in regulator_hardware_enable()
3446 ret = ops->disable(rdev); in regulator_hardware_enable()
3453 * regulator_get_linear_step - return the voltage step size between VSEL values
3461 struct regulator_dev *rdev = regulator->rdev; in regulator_get_linear_step()
3463 return rdev->desc->uV_step; in regulator_get_linear_step()
3468 * regulator_is_supported_voltage - check if a voltage range can be supported
3471 * @min_uV: Minimum required voltage in uV.
3472 * @max_uV: Maximum required voltage in uV.
3481 struct regulator_dev *rdev = regulator->rdev; in regulator_is_supported_voltage()
3494 if (rdev->desc->continuous_voltage_range) in regulator_is_supported_voltage()
3495 return min_uV >= rdev->constraints->min_uV && in regulator_is_supported_voltage()
3496 max_uV <= rdev->constraints->max_uV; in regulator_is_supported_voltage()
3517 const struct regulator_desc *desc = rdev->desc; in regulator_map_voltage()
3519 if (desc->ops->map_voltage) in regulator_map_voltage()
3520 return desc->ops->map_voltage(rdev, min_uV, max_uV); in regulator_map_voltage()
3522 if (desc->ops->list_voltage == regulator_list_voltage_linear) in regulator_map_voltage()
3525 if (desc->ops->list_voltage == regulator_list_voltage_linear_range) in regulator_map_voltage()
3528 if (desc->ops->list_voltage == in regulator_map_voltage()
3549 return -EINVAL; in _regulator_call_set_voltage()
3551 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, selector); in _regulator_call_set_voltage()
3562 int uV, unsigned selector) in _regulator_call_set_voltage_sel() argument
3568 data.min_uV = uV; in _regulator_call_set_voltage_sel()
3569 data.max_uV = uV; in _regulator_call_set_voltage_sel()
3573 return -EINVAL; in _regulator_call_set_voltage_sel()
3575 ret = rdev->desc->ops->set_voltage_sel(rdev, selector); in _regulator_call_set_voltage_sel()
3586 int uV, int new_selector) in _regulator_set_voltage_sel_step() argument
3588 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_set_voltage_sel_step()
3595 if (!ops->get_voltage_sel) in _regulator_set_voltage_sel_step()
3596 return -EINVAL; in _regulator_set_voltage_sel_step()
3598 old_sel = ops->get_voltage_sel(rdev); in _regulator_set_voltage_sel_step()
3602 diff = new_selector - old_sel; in _regulator_set_voltage_sel_step()
3608 for (curr_sel = old_sel + rdev->desc->vsel_step; in _regulator_set_voltage_sel_step()
3610 curr_sel += rdev->desc->vsel_step) { in _regulator_set_voltage_sel_step()
3617 ret = ops->set_voltage_sel(rdev, curr_sel); in _regulator_set_voltage_sel_step()
3623 for (curr_sel = old_sel - rdev->desc->vsel_step; in _regulator_set_voltage_sel_step()
3625 curr_sel -= rdev->desc->vsel_step) { in _regulator_set_voltage_sel_step()
3626 ret = ops->set_voltage_sel(rdev, curr_sel); in _regulator_set_voltage_sel_step()
3634 return _regulator_call_set_voltage_sel(rdev, uV, new_selector); in _regulator_set_voltage_sel_step()
3641 (void)ops->set_voltage_sel(rdev, old_sel); in _regulator_set_voltage_sel_step()
3650 if (rdev->constraints->ramp_delay) in _regulator_set_voltage_time()
3651 ramp_delay = rdev->constraints->ramp_delay; in _regulator_set_voltage_time()
3652 else if (rdev->desc->ramp_delay) in _regulator_set_voltage_time()
3653 ramp_delay = rdev->desc->ramp_delay; in _regulator_set_voltage_time()
3654 else if (rdev->constraints->settling_time) in _regulator_set_voltage_time()
3655 return rdev->constraints->settling_time; in _regulator_set_voltage_time()
3656 else if (rdev->constraints->settling_time_up && in _regulator_set_voltage_time()
3658 return rdev->constraints->settling_time_up; in _regulator_set_voltage_time()
3659 else if (rdev->constraints->settling_time_down && in _regulator_set_voltage_time()
3661 return rdev->constraints->settling_time_down; in _regulator_set_voltage_time()
3666 return DIV_ROUND_UP(abs(new_uV - old_uV), ramp_delay); in _regulator_set_voltage_time()
3676 int old_selector = -1; in _regulator_do_set_voltage()
3677 const struct regulator_ops *ops = rdev->desc->ops; in _regulator_do_set_voltage()
3682 min_uV += rdev->constraints->uV_offset; in _regulator_do_set_voltage()
3683 max_uV += rdev->constraints->uV_offset; in _regulator_do_set_voltage()
3690 ops->set_voltage_time_sel && ops->get_voltage_sel) { in _regulator_do_set_voltage()
3691 old_selector = ops->get_voltage_sel(rdev); in _regulator_do_set_voltage()
3696 if (ops->set_voltage) { in _regulator_do_set_voltage()
3701 if (ops->list_voltage) in _regulator_do_set_voltage()
3702 best_val = ops->list_voltage(rdev, in _regulator_do_set_voltage()
3708 } else if (ops->set_voltage_sel) { in _regulator_do_set_voltage()
3711 best_val = ops->list_voltage(rdev, ret); in _regulator_do_set_voltage()
3716 else if (rdev->desc->vsel_step) in _regulator_do_set_voltage()
3723 ret = -EINVAL; in _regulator_do_set_voltage()
3727 ret = -EINVAL; in _regulator_do_set_voltage()
3733 if (ops->set_voltage_time_sel) { in _regulator_do_set_voltage()
3739 delay = ops->set_voltage_time_sel(rdev, old_selector, in _regulator_do_set_voltage()
3743 if (ops->set_voltage_time) in _regulator_do_set_voltage()
3744 delay = ops->set_voltage_time(rdev, old_uV, in _regulator_do_set_voltage()
3778 int uV, sel; in _regulator_do_set_suspend_voltage() local
3782 return -EINVAL; in _regulator_do_set_suspend_voltage()
3784 if (min_uV < rstate->min_uV) in _regulator_do_set_suspend_voltage()
3785 min_uV = rstate->min_uV; in _regulator_do_set_suspend_voltage()
3786 if (max_uV > rstate->max_uV) in _regulator_do_set_suspend_voltage()
3787 max_uV = rstate->max_uV; in _regulator_do_set_suspend_voltage()
3793 uV = rdev->desc->ops->list_voltage(rdev, sel); in _regulator_do_set_suspend_voltage()
3794 if (uV >= min_uV && uV <= max_uV) in _regulator_do_set_suspend_voltage()
3795 rstate->uV = uV; in _regulator_do_set_suspend_voltage()
3804 struct regulator_dev *rdev = regulator->rdev; in regulator_set_voltage_unlocked()
3805 struct regulator_voltage *voltage = ®ulator->voltage[state]; in regulator_set_voltage_unlocked()
3814 if (voltage->min_uV == min_uV && voltage->max_uV == max_uV) in regulator_set_voltage_unlocked()
3824 voltage->min_uV = min_uV; in regulator_set_voltage_unlocked()
3825 voltage->max_uV = max_uV; in regulator_set_voltage_unlocked()
3831 if (!rdev->desc->ops->set_voltage && in regulator_set_voltage_unlocked()
3832 !rdev->desc->ops->set_voltage_sel) { in regulator_set_voltage_unlocked()
3833 ret = -EINVAL; in regulator_set_voltage_unlocked()
3843 old_min_uV = voltage->min_uV; in regulator_set_voltage_unlocked()
3844 old_max_uV = voltage->max_uV; in regulator_set_voltage_unlocked()
3845 voltage->min_uV = min_uV; in regulator_set_voltage_unlocked()
3846 voltage->max_uV = max_uV; in regulator_set_voltage_unlocked()
3851 voltage->min_uV = old_min_uV; in regulator_set_voltage_unlocked()
3852 voltage->max_uV = old_max_uV; in regulator_set_voltage_unlocked()
3866 if (rdev->supply && in regulator_set_voltage_rdev()
3867 regulator_ops_is_valid(rdev->supply->rdev, in regulator_set_voltage_rdev()
3869 (rdev->desc->min_dropout_uV || !(rdev->desc->ops->get_voltage || in regulator_set_voltage_rdev()
3870 rdev->desc->ops->get_voltage_sel))) { in regulator_set_voltage_rdev()
3886 best_supply_uV += rdev->desc->min_dropout_uV; in regulator_set_voltage_rdev()
3888 current_supply_uV = regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_set_voltage_rdev()
3894 supply_change_uV = best_supply_uV - current_supply_uV; in regulator_set_voltage_rdev()
3898 ret = regulator_set_voltage_unlocked(rdev->supply, in regulator_set_voltage_rdev()
3901 dev_err(&rdev->dev, "Failed to increase supply voltage: %pe\n", in regulator_set_voltage_rdev()
3916 ret = regulator_set_voltage_unlocked(rdev->supply, in regulator_set_voltage_rdev()
3919 dev_warn(&rdev->dev, "Failed to decrease supply voltage: %pe\n", in regulator_set_voltage_rdev()
3933 struct regulation_constraints *constraints = rdev->constraints; in regulator_limit_voltage_step()
3936 if (!constraints->max_uV_step || !_regulator_is_enabled(rdev)) in regulator_limit_voltage_step()
3946 if (abs(*current_uV - *min_uV) <= constraints->max_uV_step) in regulator_limit_voltage_step()
3951 *min_uV = min(*current_uV + constraints->max_uV_step, in regulator_limit_voltage_step()
3954 *min_uV = max(*current_uV - constraints->max_uV_step, in regulator_limit_voltage_step()
3966 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_get_optimal_voltage()
3967 struct regulator_dev **c_rdevs = c_desc->coupled_rdevs; in regulator_get_optimal_voltage()
3968 struct regulation_constraints *constraints = rdev->constraints; in regulator_get_optimal_voltage()
3975 *current_uV = -1; in regulator_get_optimal_voltage()
3986 desired_min_uV = constraints->min_uV; in regulator_get_optimal_voltage()
3987 desired_max_uV = constraints->max_uV; in regulator_get_optimal_voltage()
4005 lockdep_assert_held_once(&c_rdevs[i]->mutex.base); in regulator_get_optimal_voltage()
4025 max_spread = constraints->max_spread[0]; in regulator_get_optimal_voltage()
4032 target_uV = max(desired_min_uV, highest_min_uV - max_spread); in regulator_get_optimal_voltage()
4060 possible_uV = max(target_uV, max_current_uV - max_spread); in regulator_get_optimal_voltage()
4065 return -EINVAL; in regulator_get_optimal_voltage()
4083 if (n_coupled > 1 && *current_uV == -1) { in regulator_get_optimal_voltage()
4107 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_do_balance_voltage()
4113 c_rdevs = c_desc->coupled_rdevs; in regulator_do_balance_voltage()
4114 n_coupled = skip_coupled ? 1 : c_desc->n_coupled; in regulator_do_balance_voltage()
4135 * i-th regulator at the moment without violating in regulator_do_balance_voltage()
4152 delta = abs(optimal_uV - current_uV); in regulator_do_balance_voltage()
4188 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_balance_voltage()
4189 struct regulator_coupler *coupler = c_desc->coupler; in regulator_balance_voltage()
4199 if (c_desc->n_resolved < c_desc->n_coupled) { in regulator_balance_voltage()
4201 return -EPERM; in regulator_balance_voltage()
4205 if (coupler && coupler->balance_voltage) in regulator_balance_voltage()
4206 return coupler->balance_voltage(coupler, rdev, state); in regulator_balance_voltage()
4212 * regulator_set_voltage - set regulator output voltage
4214 * @min_uV: Minimum required voltage in uV
4215 * @max_uV: Maximum acceptable voltage in uV
4236 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_set_voltage()
4241 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_set_voltage()
4254 return -EINVAL; in regulator_suspend_toggle()
4256 if (!rstate->changeable) in regulator_suspend_toggle()
4257 return -EPERM; in regulator_suspend_toggle()
4259 rstate->enabled = (en) ? ENABLE_IN_SUSPEND : DISABLE_IN_SUSPEND; in regulator_suspend_toggle()
4281 list_for_each_entry(regulator, &rdev->consumer_list, list) { in regulator_suspend_disable()
4282 voltage = ®ulator->voltage[state]; in regulator_suspend_disable()
4283 if (voltage->min_uV || voltage->max_uV) in regulator_suspend_disable()
4295 struct regulator_dev *rdev = regulator->rdev; in _regulator_set_suspend_voltage()
4300 return -EINVAL; in _regulator_set_suspend_voltage()
4302 if (rstate->min_uV == rstate->max_uV) { in _regulator_set_suspend_voltage()
4304 return -EPERM; in _regulator_set_suspend_voltage()
4318 return -EINVAL; in regulator_set_suspend_voltage()
4320 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_set_suspend_voltage()
4325 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_set_suspend_voltage()
4332 * regulator_set_voltage_time - get raise/fall time
4346 struct regulator_dev *rdev = regulator->rdev; in regulator_set_voltage_time()
4347 const struct regulator_ops *ops = rdev->desc->ops; in regulator_set_voltage_time()
4348 int old_sel = -1; in regulator_set_voltage_time()
4349 int new_sel = -1; in regulator_set_voltage_time()
4353 if (ops->set_voltage_time) in regulator_set_voltage_time()
4354 return ops->set_voltage_time(rdev, old_uV, new_uV); in regulator_set_voltage_time()
4355 else if (!ops->set_voltage_time_sel) in regulator_set_voltage_time()
4359 if (!ops->list_voltage || !rdev->desc->n_voltages) in regulator_set_voltage_time()
4360 return -EINVAL; in regulator_set_voltage_time()
4362 for (i = 0; i < rdev->desc->n_voltages; i++) { in regulator_set_voltage_time()
4364 if (i < rdev->desc->linear_min_sel) in regulator_set_voltage_time()
4372 return -EINVAL; in regulator_set_voltage_time()
4382 return -EINVAL; in regulator_set_voltage_time()
4384 return ops->set_voltage_time_sel(rdev, old_sel, new_sel); in regulator_set_voltage_time()
4389 * regulator_set_voltage_time_sel - get raise/fall time
4409 if (!rdev->desc->ops->list_voltage) in regulator_set_voltage_time_sel()
4410 return -EINVAL; in regulator_set_voltage_time_sel()
4412 old_volt = rdev->desc->ops->list_voltage(rdev, old_selector); in regulator_set_voltage_time_sel()
4413 new_volt = rdev->desc->ops->list_voltage(rdev, new_selector); in regulator_set_voltage_time_sel()
4415 if (rdev->desc->ops->set_voltage_time) in regulator_set_voltage_time_sel()
4416 return rdev->desc->ops->set_voltage_time(rdev, old_volt, in regulator_set_voltage_time_sel()
4429 if (!rdev->desc->ops->set_voltage && in regulator_sync_voltage_rdev()
4430 !rdev->desc->ops->set_voltage_sel) { in regulator_sync_voltage_rdev()
4431 ret = -EINVAL; in regulator_sync_voltage_rdev()
4436 if (rdev->coupling_desc.n_coupled > 1) in regulator_sync_voltage_rdev()
4439 ret = -EOPNOTSUPP; in regulator_sync_voltage_rdev()
4447 * regulator_sync_voltage - re-apply last regulator output voltage
4450 * Re-apply the last configured voltage. This is intended to be used
4458 struct regulator_dev *rdev = regulator->rdev; in regulator_sync_voltage()
4459 struct regulator_voltage *voltage = ®ulator->voltage[PM_SUSPEND_ON]; in regulator_sync_voltage()
4467 if (!rdev->desc->ops->set_voltage && in regulator_sync_voltage()
4468 !rdev->desc->ops->set_voltage_sel) { in regulator_sync_voltage()
4469 ret = -EINVAL; in regulator_sync_voltage()
4474 if (!voltage->min_uV && !voltage->max_uV) { in regulator_sync_voltage()
4475 ret = -EINVAL; in regulator_sync_voltage()
4479 min_uV = voltage->min_uV; in regulator_sync_voltage()
4480 max_uV = voltage->max_uV; in regulator_sync_voltage()
4492 if (rdev->coupling_desc.n_coupled > 1) in regulator_sync_voltage()
4508 if (rdev->desc->ops->get_bypass) { in regulator_get_voltage_rdev()
4509 ret = rdev->desc->ops->get_bypass(rdev, &bypassed); in regulator_get_voltage_rdev()
4514 if (!rdev->supply) { in regulator_get_voltage_rdev()
4517 return -EPROBE_DEFER; in regulator_get_voltage_rdev()
4520 return regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_get_voltage_rdev()
4524 if (rdev->desc->ops->get_voltage_sel) { in regulator_get_voltage_rdev()
4525 sel = rdev->desc->ops->get_voltage_sel(rdev); in regulator_get_voltage_rdev()
4528 ret = rdev->desc->ops->list_voltage(rdev, sel); in regulator_get_voltage_rdev()
4529 } else if (rdev->desc->ops->get_voltage) { in regulator_get_voltage_rdev()
4530 ret = rdev->desc->ops->get_voltage(rdev); in regulator_get_voltage_rdev()
4531 } else if (rdev->desc->ops->list_voltage) { in regulator_get_voltage_rdev()
4532 ret = rdev->desc->ops->list_voltage(rdev, 0); in regulator_get_voltage_rdev()
4533 } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) { in regulator_get_voltage_rdev()
4534 ret = rdev->desc->fixed_uV; in regulator_get_voltage_rdev()
4535 } else if (rdev->supply) { in regulator_get_voltage_rdev()
4536 ret = regulator_get_voltage_rdev(rdev->supply->rdev); in regulator_get_voltage_rdev()
4537 } else if (rdev->supply_name) { in regulator_get_voltage_rdev()
4538 return -EPROBE_DEFER; in regulator_get_voltage_rdev()
4540 return -EINVAL; in regulator_get_voltage_rdev()
4545 return ret - rdev->constraints->uV_offset; in regulator_get_voltage_rdev()
4550 * regulator_get_voltage - get regulator output voltage
4553 * Return: Current regulator voltage in uV, or a negative error number on failure.
4563 regulator_lock_dependent(regulator->rdev, &ww_ctx); in regulator_get_voltage()
4564 ret = regulator_get_voltage_rdev(regulator->rdev); in regulator_get_voltage()
4565 regulator_unlock_dependent(regulator->rdev, &ww_ctx); in regulator_get_voltage()
4572 * regulator_set_current_limit - set regulator output current limit
4592 struct regulator_dev *rdev = regulator->rdev; in regulator_set_current_limit()
4598 if (!rdev->desc->ops->set_current_limit) { in regulator_set_current_limit()
4599 ret = -EINVAL; in regulator_set_current_limit()
4608 ret = rdev->desc->ops->set_current_limit(rdev, min_uA, max_uA); in regulator_set_current_limit()
4618 if (!rdev->desc->ops->get_current_limit) in _regulator_get_current_limit_unlocked()
4619 return -EINVAL; in _regulator_get_current_limit_unlocked()
4621 return rdev->desc->ops->get_current_limit(rdev); in _regulator_get_current_limit_unlocked()
4636 * regulator_get_current_limit - get regulator output current
4647 return _regulator_get_current_limit(regulator->rdev); in regulator_get_current_limit()
4652 * regulator_get_unclaimed_power_budget - get regulator unclaimed power budget
4659 return regulator->rdev->constraints->pw_budget_mW - in regulator_get_unclaimed_power_budget()
4660 regulator->rdev->pw_requested_mW; in regulator_get_unclaimed_power_budget()
4665 * regulator_request_power_budget - request power budget on a regulator
4674 struct regulator_dev *rdev = regulator->rdev; in regulator_request_power_budget()
4678 if (rdev->supply) { in regulator_request_power_budget()
4679 ret = regulator_request_power_budget(rdev->supply, pw_req); in regulator_request_power_budget()
4684 pw_tot_req = rdev->pw_requested_mW + pw_req; in regulator_request_power_budget()
4685 if (pw_tot_req > rdev->constraints->pw_budget_mW) { in regulator_request_power_budget()
4688 rdev->constraints->pw_budget_mW - rdev->pw_requested_mW); in regulator_request_power_budget()
4692 ret = -ERANGE; in regulator_request_power_budget()
4696 rdev->pw_requested_mW = pw_tot_req; in regulator_request_power_budget()
4704 * regulator_free_power_budget - free power budget on a regulator
4713 struct regulator_dev *rdev = regulator->rdev; in regulator_free_power_budget()
4717 if (rdev->supply) in regulator_free_power_budget()
4718 regulator_free_power_budget(rdev->supply, pw); in regulator_free_power_budget()
4720 pw_tot_req = rdev->pw_requested_mW - pw; in regulator_free_power_budget()
4722 rdev->pw_requested_mW = pw_tot_req; in regulator_free_power_budget()
4726 pw, rdev->pw_requested_mW); in regulator_free_power_budget()
4733 * regulator_set_mode - set regulator operating mode
4735 * @mode: operating mode - one of the REGULATOR_MODE constants
4747 struct regulator_dev *rdev = regulator->rdev; in regulator_set_mode()
4754 if (!rdev->desc->ops->set_mode) { in regulator_set_mode()
4755 ret = -EINVAL; in regulator_set_mode()
4760 if (rdev->desc->ops->get_mode) { in regulator_set_mode()
4761 regulator_curr_mode = rdev->desc->ops->get_mode(rdev); in regulator_set_mode()
4773 ret = rdev->desc->ops->set_mode(rdev, mode); in regulator_set_mode()
4783 if (!rdev->desc->ops->get_mode) in _regulator_get_mode_unlocked()
4784 return -EINVAL; in _regulator_get_mode_unlocked()
4786 return rdev->desc->ops->get_mode(rdev); in _regulator_get_mode_unlocked()
4801 * regulator_get_mode - get regulator operating mode
4811 return _regulator_get_mode(regulator->rdev); in regulator_get_mode()
4819 if (rdev->use_cached_err) { in rdev_get_cached_err_flags()
4820 spin_lock(&rdev->err_lock); in rdev_get_cached_err_flags()
4821 ret = rdev->cached_err; in rdev_get_cached_err_flags()
4822 spin_unlock(&rdev->err_lock); in rdev_get_cached_err_flags()
4836 if (rdev->desc->ops->get_error_flags) in _regulator_get_error_flags()
4837 ret = rdev->desc->ops->get_error_flags(rdev, flags); in _regulator_get_error_flags()
4838 else if (!rdev->use_cached_err) in _regulator_get_error_flags()
4839 ret = -EINVAL; in _regulator_get_error_flags()
4849 * regulator_get_error_flags - get regulator error information
4860 return _regulator_get_error_flags(regulator->rdev, flags); in regulator_get_error_flags()
4865 * regulator_set_load - set regulator load
4877 * consumption are :-
4890 * toward the total requested load. If the regulator is re-enabled
4893 * If a regulator is an always-on regulator then an individual consumer's
4900 struct regulator_dev *rdev = regulator->rdev; in regulator_set_load()
4905 old_uA_load = regulator->uA_load; in regulator_set_load()
4906 regulator->uA_load = uA_load; in regulator_set_load()
4907 if (regulator->enable_count && old_uA_load != uA_load) { in regulator_set_load()
4910 regulator->uA_load = old_uA_load; in regulator_set_load()
4919 * regulator_allow_bypass - allow the regulator to go into bypass mode
4934 struct regulator_dev *rdev = regulator->rdev; in regulator_allow_bypass()
4938 if (!rdev->desc->ops->set_bypass) in regulator_allow_bypass()
4946 if (enable && !regulator->bypass) { in regulator_allow_bypass()
4947 rdev->bypass_count++; in regulator_allow_bypass()
4949 if (rdev->bypass_count == rdev->open_count) { in regulator_allow_bypass()
4952 ret = rdev->desc->ops->set_bypass(rdev, enable); in regulator_allow_bypass()
4954 rdev->bypass_count--; in regulator_allow_bypass()
4959 } else if (!enable && regulator->bypass) { in regulator_allow_bypass()
4960 rdev->bypass_count--; in regulator_allow_bypass()
4962 if (rdev->bypass_count != rdev->open_count) { in regulator_allow_bypass()
4965 ret = rdev->desc->ops->set_bypass(rdev, enable); in regulator_allow_bypass()
4967 rdev->bypass_count++; in regulator_allow_bypass()
4974 regulator->bypass = enable; in regulator_allow_bypass()
4983 * regulator_register_notifier - register regulator event notifier
4994 return blocking_notifier_chain_register(®ulator->rdev->notifier, in regulator_register_notifier()
5000 * regulator_unregister_notifier - unregister regulator event notifier
5011 return blocking_notifier_chain_unregister(®ulator->rdev->notifier, in regulator_unregister_notifier()
5023 int ret = blocking_notifier_call_chain(&rdev->notifier, event, data); in _notifier_call_chain()
5026 struct device *parent = rdev->dev.parent; in _notifier_call_chain()
5031 if (parent && rname == rdev->desc->name) { in _notifier_call_chain()
5032 snprintf(name, sizeof(name), "%s-%s", dev_name(parent), in _notifier_call_chain()
5075 while (--i >= 0) in _regulator_bulk_get()
5082 * regulator_bulk_get - get multiple regulator consumers
5106 bulk->ret = regulator_enable(bulk->consumer); in regulator_bulk_enable_async()
5110 * regulator_bulk_enable - enable multiple regulator consumers
5160 * regulator_bulk_disable - disable multiple regulator consumers
5178 for (i = num_consumers - 1; i >= 0; --i) { in regulator_bulk_disable()
5191 pr_err("Failed to re-enable %s: %pe\n", in regulator_bulk_disable()
5200 * regulator_bulk_force_disable - force disable multiple regulator consumers
5234 * regulator_bulk_free - free multiple regulator consumers
5255 * regulator_handle_critical - Handle events for system-critical regulators.
5259 * This function handles critical events such as under-voltage, over-current,
5260 * and unknown errors for regulators deemed system-critical. On detecting such
5261 * events, it triggers a hardware protection shutdown with a defined timeout.
5268 if (!rdev->constraints->system_critical) in regulator_handle_critical()
5276 reason = "System critical regulator: over-current detected"; in regulator_handle_critical()
5286 rdev->constraints->uv_less_critical_window_ms); in regulator_handle_critical()
5290 * regulator_notifier_call_chain - call regulator event notifier
5293 * @data: callback-specific data.
5312 * regulator_mode_to_status - convert a regulator mode into a status
5384 const struct regulator_ops *ops = rdev->desc->ops; in regulator_attr_is_visible()
5385 umode_t mode = attr->mode; in regulator_attr_is_visible()
5395 if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) || in regulator_attr_is_visible()
5396 (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) || in regulator_attr_is_visible()
5397 (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0) || in regulator_attr_is_visible()
5398 (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1)) in regulator_attr_is_visible()
5404 return ops->get_current_limit ? mode : 0; in regulator_attr_is_visible()
5407 return ops->get_mode ? mode : 0; in regulator_attr_is_visible()
5410 return (rdev->ena_pin || ops->is_enabled) ? mode : 0; in regulator_attr_is_visible()
5413 return ops->get_status ? mode : 0; in regulator_attr_is_visible()
5416 return ops->get_bypass ? mode : 0; in regulator_attr_is_visible()
5427 return ops->get_error_flags ? mode : 0; in regulator_attr_is_visible()
5432 return (ops->set_voltage || ops->set_voltage_sel) ? mode : 0; in regulator_attr_is_visible()
5436 return ops->set_current_limit ? mode : 0; in regulator_attr_is_visible()
5446 return ops->set_suspend_voltage ? mode : 0; in regulator_attr_is_visible()
5451 return ops->set_suspend_mode ? mode : 0; in regulator_attr_is_visible()
5455 return rdev->constraints->pw_budget_mW != INT_MAX ? mode : 0; in regulator_attr_is_visible()
5474 debugfs_remove_recursive(rdev->debugfs); in regulator_dev_release()
5475 kfree(rdev->constraints); in regulator_dev_release()
5476 of_node_put(rdev->dev.of_node); in regulator_dev_release()
5482 struct device *parent = rdev->dev.parent; in rdev_init_debugfs()
5487 if (parent && rname == rdev->desc->name) { in rdev_init_debugfs()
5488 snprintf(name, sizeof(name), "%s-%s", dev_name(parent), in rdev_init_debugfs()
5493 rdev->debugfs = debugfs_create_dir(rname, debugfs_root); in rdev_init_debugfs()
5494 if (IS_ERR(rdev->debugfs)) in rdev_init_debugfs()
5497 debugfs_create_u32("use_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5498 &rdev->use_count); in rdev_init_debugfs()
5499 debugfs_create_u32("open_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5500 &rdev->open_count); in rdev_init_debugfs()
5501 debugfs_create_u32("bypass_count", 0444, rdev->debugfs, in rdev_init_debugfs()
5502 &rdev->bypass_count); in rdev_init_debugfs()
5518 list_add_tail(&coupler->list, ®ulator_coupler_list); in regulator_coupler_register()
5536 err = coupler->attach_regulator(coupler, rdev); in regulator_find_coupler()
5538 if (!coupler->balance_voltage && in regulator_find_coupler()
5539 rdev->coupling_desc.n_coupled > 2) in regulator_find_coupler()
5554 return ERR_PTR(-EINVAL); in regulator_find_coupler()
5557 if (coupler->detach_regulator) in regulator_find_coupler()
5558 coupler->detach_regulator(coupler, rdev); in regulator_find_coupler()
5563 return ERR_PTR(-EPERM); in regulator_find_coupler()
5568 struct regulator_coupler *coupler = rdev->coupling_desc.coupler; in regulator_resolve_coupling()
5569 struct coupling_desc *c_desc = &rdev->coupling_desc; in regulator_resolve_coupling()
5570 int n_coupled = c_desc->n_coupled; in regulator_resolve_coupling()
5576 if (c_desc->coupled_rdevs[i]) in regulator_resolve_coupling()
5579 c_rdev = of_parse_coupled_regulator(rdev, i - 1); in regulator_resolve_coupling()
5584 if (c_rdev->coupling_desc.coupler != coupler) { in regulator_resolve_coupling()
5590 c_desc->coupled_rdevs[i] = c_rdev; in regulator_resolve_coupling()
5591 c_desc->n_resolved++; in regulator_resolve_coupling()
5599 struct regulator_coupler *coupler = rdev->coupling_desc.coupler; in regulator_remove_coupling()
5600 struct coupling_desc *__c_desc, *c_desc = &rdev->coupling_desc; in regulator_remove_coupling()
5606 n_coupled = c_desc->n_coupled; in regulator_remove_coupling()
5609 c_rdev = c_desc->coupled_rdevs[i]; in regulator_remove_coupling()
5616 __c_desc = &c_rdev->coupling_desc; in regulator_remove_coupling()
5617 __n_coupled = __c_desc->n_coupled; in regulator_remove_coupling()
5620 __c_rdev = __c_desc->coupled_rdevs[k]; in regulator_remove_coupling()
5623 __c_desc->coupled_rdevs[k] = NULL; in regulator_remove_coupling()
5624 __c_desc->n_resolved--; in regulator_remove_coupling()
5631 c_desc->coupled_rdevs[i] = NULL; in regulator_remove_coupling()
5632 c_desc->n_resolved--; in regulator_remove_coupling()
5635 if (coupler && coupler->detach_regulator) { in regulator_remove_coupling()
5636 err = coupler->detach_regulator(coupler, rdev); in regulator_remove_coupling()
5642 kfree(rdev->coupling_desc.coupled_rdevs); in regulator_remove_coupling()
5643 rdev->coupling_desc.coupled_rdevs = NULL; in regulator_remove_coupling()
5658 return -ENOMEM; in regulator_init_coupling()
5660 rdev->coupling_desc.coupled_rdevs = coupled; in regulator_init_coupling()
5666 rdev->coupling_desc.coupled_rdevs[0] = rdev; in regulator_init_coupling()
5667 rdev->coupling_desc.n_coupled = n_phandles + 1; in regulator_init_coupling()
5668 rdev->coupling_desc.n_resolved++; in regulator_init_coupling()
5675 return -EPERM; in regulator_init_coupling()
5678 rdev->coupling_desc.coupler = regulator_find_coupler(rdev); in regulator_init_coupling()
5681 if (IS_ERR(rdev->coupling_desc.coupler)) { in regulator_init_coupling()
5682 err = PTR_ERR(rdev->coupling_desc.coupler); in regulator_init_coupling()
5693 if (rdev->coupling_desc.n_coupled > 2) { in generic_coupler_attach()
5696 return -EPERM; in generic_coupler_attach()
5699 if (!rdev->constraints->always_on) { in generic_coupler_attach()
5701 "Coupling of a non always-on regulator is unimplemented\n"); in generic_coupler_attach()
5702 return -ENOTSUPP; in generic_coupler_attach()
5713 * regulator_register - register regulator
5730 static atomic_t regulator_no = ATOMIC_INIT(-1); in regulator_register()
5738 return ERR_PTR(-EINVAL); in regulator_register()
5739 if (cfg->ena_gpiod) in regulator_register()
5742 ret = -EINVAL; in regulator_register()
5746 WARN_ON(!dev || !cfg->dev); in regulator_register()
5748 if (regulator_desc->name == NULL || regulator_desc->ops == NULL) { in regulator_register()
5749 ret = -EINVAL; in regulator_register()
5753 if (regulator_desc->type != REGULATOR_VOLTAGE && in regulator_register()
5754 regulator_desc->type != REGULATOR_CURRENT) { in regulator_register()
5755 ret = -EINVAL; in regulator_register()
5760 WARN_ON(regulator_desc->ops->get_voltage && in regulator_register()
5761 regulator_desc->ops->get_voltage_sel); in regulator_register()
5762 WARN_ON(regulator_desc->ops->set_voltage && in regulator_register()
5763 regulator_desc->ops->set_voltage_sel); in regulator_register()
5766 if (regulator_desc->ops->get_voltage_sel && in regulator_register()
5767 !regulator_desc->ops->list_voltage) { in regulator_register()
5768 ret = -EINVAL; in regulator_register()
5771 if (regulator_desc->ops->set_voltage_sel && in regulator_register()
5772 !regulator_desc->ops->list_voltage) { in regulator_register()
5773 ret = -EINVAL; in regulator_register()
5779 ret = -ENOMEM; in regulator_register()
5782 device_initialize(&rdev->dev); in regulator_register()
5783 dev_set_drvdata(&rdev->dev, rdev); in regulator_register()
5784 rdev->dev.class = ®ulator_class; in regulator_register()
5785 spin_lock_init(&rdev->err_lock); in regulator_register()
5793 ret = -ENOMEM; in regulator_register()
5798 * DT may override the config->init_data provided if the platform in regulator_register()
5799 * needs to do so. If so, config->init_data is completely ignored. in regulator_register()
5802 &rdev->dev.of_node); in regulator_register()
5809 if (PTR_ERR(init_data) == -EPROBE_DEFER) { in regulator_register()
5810 ret = -EPROBE_DEFER; in regulator_register()
5822 if (!cfg->ena_gpiod && config->ena_gpiod) in regulator_register()
5825 init_data = config->init_data; in regulator_register()
5826 rdev->dev.of_node = of_node_get(config->of_node); in regulator_register()
5829 ww_mutex_init(&rdev->mutex, ®ulator_ww_class); in regulator_register()
5830 rdev->reg_data = config->driver_data; in regulator_register()
5831 rdev->owner = regulator_desc->owner; in regulator_register()
5832 rdev->desc = regulator_desc; in regulator_register()
5833 if (config->regmap) in regulator_register()
5834 rdev->regmap = config->regmap; in regulator_register()
5836 rdev->regmap = dev_get_regmap(dev, NULL); in regulator_register()
5837 else if (dev->parent) in regulator_register()
5838 rdev->regmap = dev_get_regmap(dev->parent, NULL); in regulator_register()
5839 INIT_LIST_HEAD(&rdev->consumer_list); in regulator_register()
5840 INIT_LIST_HEAD(&rdev->list); in regulator_register()
5841 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier); in regulator_register()
5842 INIT_DELAYED_WORK(&rdev->disable_work, regulator_disable_work); in regulator_register()
5844 if (init_data && init_data->supply_regulator) in regulator_register()
5845 rdev->supply_name = init_data->supply_regulator; in regulator_register()
5846 else if (regulator_desc->supply_name) in regulator_register()
5847 rdev->supply_name = regulator_desc->supply_name; in regulator_register()
5850 rdev->dev.parent = config->dev; in regulator_register()
5851 dev_set_name(&rdev->dev, "regulator.%lu", in regulator_register()
5856 rdev->constraints = kmemdup(&init_data->constraints, in regulator_register()
5857 sizeof(*rdev->constraints), in regulator_register()
5860 rdev->constraints = kzalloc(sizeof(*rdev->constraints), in regulator_register()
5862 if (!rdev->constraints) { in regulator_register()
5863 ret = -ENOMEM; in regulator_register()
5867 if (regulator_desc->init_cb) { in regulator_register()
5868 ret = regulator_desc->init_cb(rdev, config); in regulator_register()
5873 if ((rdev->supply_name && !rdev->supply) && in regulator_register()
5874 (rdev->constraints->always_on || in regulator_register()
5875 rdev->constraints->boot_on)) { in regulator_register()
5884 if (config->ena_gpiod) { in regulator_register()
5897 if (ret == -EPROBE_DEFER && !resolved_early) { in regulator_register()
5901 /* FIXME: this currently triggers a chicken-and-egg problem in regulator_register()
5902 * when creating -SUPPLY symlink in sysfs to a regulator in regulator_register()
5906 rdev->supply_name); in regulator_register()
5923 for (i = 0; i < init_data->num_consumer_supplies; i++) { in regulator_register()
5925 init_data->consumer_supplies[i].dev_name, in regulator_register()
5926 init_data->consumer_supplies[i].supply); in regulator_register()
5929 init_data->consumer_supplies[i].supply); in regulator_register()
5935 if (!rdev->desc->ops->get_voltage && in regulator_register()
5936 !rdev->desc->ops->list_voltage && in regulator_register()
5937 !rdev->desc->fixed_uV) in regulator_register()
5938 rdev->is_switch = true; in regulator_register()
5940 ret = device_add(&rdev->dev); in regulator_register()
5963 regulator_put(rdev->supply); in regulator_register()
5964 kfree(rdev->coupling_desc.coupled_rdevs); in regulator_register()
5970 gpiod_put(config->ena_gpiod); in regulator_register()
5972 put_device(&rdev->dev); in regulator_register()
5975 gpiod_put(cfg->ena_gpiod); in regulator_register()
5981 * regulator_unregister - unregister regulator
5991 if (rdev->supply) { in regulator_unregister()
5992 while (rdev->use_count--) in regulator_unregister()
5993 regulator_disable(rdev->supply); in regulator_unregister()
5994 regulator_put(rdev->supply); in regulator_unregister()
5997 flush_work(&rdev->disable_work.work); in regulator_unregister()
6001 WARN_ON(rdev->open_count); in regulator_unregister()
6004 list_del(&rdev->list); in regulator_unregister()
6006 device_unregister(&rdev->dev); in regulator_unregister()
6014 * regulator_suspend - prepare regulators for system wide suspend
6051 if (!rdev->desc->ops->resume) in regulator_resume()
6056 if (rstate->enabled == ENABLE_IN_SUSPEND || in regulator_resume()
6057 rstate->enabled == DISABLE_IN_SUSPEND) in regulator_resume()
6058 ret = rdev->desc->ops->resume(rdev); in regulator_resume()
6087 * regulator_has_full_constraints - the system has fully specified constraints
6104 * rdev_get_drvdata - get rdev regulator driver data
6114 return rdev->reg_data; in rdev_get_drvdata()
6119 * regulator_get_drvdata - get regulator driver data
6129 return regulator->rdev->reg_data; in regulator_get_drvdata()
6134 * regulator_set_drvdata - set regulator driver data
6140 regulator->rdev->reg_data = data; in regulator_set_drvdata()
6145 * rdev_get_id - get regulator ID
6152 return rdev->desc->id; in rdev_get_id()
6158 return &rdev->dev; in rdev_get_dev()
6164 return rdev->regmap; in rdev_get_regmap()
6170 return reg_init_data->driver_data; in regulator_get_init_drvdata()
6180 seq_printf(sf, "%s -> %s.%s\n", in supply_map_show()
6181 rdev_get_name(map->regulator), map->dev_name, in supply_map_show()
6182 map->supply); in supply_map_show()
6204 if (rdev->supply && rdev->supply->rdev == summary_data->parent) in regulator_summary_show_children()
6205 regulator_summary_show_subtree(summary_data->s, rdev, in regulator_summary_show_children()
6206 summary_data->level + 1); in regulator_summary_show_children()
6224 seq_printf(s, "%*s%-*s %3d %4d %6d %7s ", in regulator_summary_show_subtree()
6226 30 - level * 3, rdev_get_name(rdev), in regulator_summary_show_subtree()
6227 rdev->use_count, rdev->open_count, rdev->bypass_count, in regulator_summary_show_subtree()
6234 c = rdev->constraints; in regulator_summary_show_subtree()
6236 switch (rdev->desc->type) { in regulator_summary_show_subtree()
6239 c->min_uV / 1000, c->max_uV / 1000); in regulator_summary_show_subtree()
6243 c->min_uA / 1000, c->max_uA / 1000); in regulator_summary_show_subtree()
6250 list_for_each_entry(consumer, &rdev->consumer_list, list) { in regulator_summary_show_subtree()
6251 if (consumer->dev && consumer->dev->class == ®ulator_class) in regulator_summary_show_subtree()
6254 seq_printf(s, "%*s%-*s ", in regulator_summary_show_subtree()
6256 30 - (level + 1) * 3, in regulator_summary_show_subtree()
6257 consumer->supply_name ? consumer->supply_name : in regulator_summary_show_subtree()
6258 consumer->dev ? dev_name(consumer->dev) : "deviceless"); in regulator_summary_show_subtree()
6260 switch (rdev->desc->type) { in regulator_summary_show_subtree()
6263 consumer->enable_count, in regulator_summary_show_subtree()
6264 consumer->uA_load / 1000, in regulator_summary_show_subtree()
6265 consumer->uA_load && !consumer->enable_count ? in regulator_summary_show_subtree()
6267 consumer->voltage[PM_SUSPEND_ON].min_uV / 1000, in regulator_summary_show_subtree()
6268 consumer->voltage[PM_SUSPEND_ON].max_uV / 1000); in regulator_summary_show_subtree()
6297 if (rdev != *lock_data->old_contended_rdev) { in regulator_summary_lock_one()
6298 ret = regulator_lock_nested(rdev, lock_data->ww_ctx); in regulator_summary_lock_one()
6300 if (ret == -EDEADLK) in regulator_summary_lock_one()
6301 *lock_data->new_contended_rdev = rdev; in regulator_summary_lock_one()
6305 *lock_data->old_contended_rdev = NULL; in regulator_summary_lock_one()
6317 if (rdev == *lock_data->new_contended_rdev) in regulator_summary_unlock_one()
6318 return -EDEADLK; in regulator_summary_unlock_one()
6358 ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); in regulator_summary_lock()
6360 old_contended_rdev->ref_cnt++; in regulator_summary_lock()
6361 old_contended_rdev->mutex_owner = current; in regulator_summary_lock()
6371 } while (err == -EDEADLK); in regulator_summary_lock()
6390 if (!rdev->supply) in regulator_summary_show_roots()
6401 …seq_puts(s, "-------------------------------------------------------------------------------------… in regulator_summary_show()
6445 struct regulation_constraints *c = rdev->constraints; in regulator_late_cleanup()
6448 if (c && c->always_on) in regulator_late_cleanup()
6456 if (rdev->use_count) in regulator_late_cleanup()