Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge series "regulator: debugging aids" from Michał Mirosław <mirq-linux@rere.qmqm.pl>:

Three simple patches to aid in debugging regulators.

Michał Mirosław (3):
regulator: print state at boot
regulator: print symbolic errors in kernel messages
regulator: resolve supply after creating regulator

drivers/regulator/core.c | 124 ++++++++++++++++++++++-----------------
1 file changed, 69 insertions(+), 55 deletions(-)

--
2.20.1

+69 -55
+69 -55
drivers/regulator/core.c
··· 964 964 /* set the optimum mode for our new total regulator load */ 965 965 err = rdev->desc->ops->set_load(rdev, current_uA); 966 966 if (err < 0) 967 - rdev_err(rdev, "failed to set load %d\n", current_uA); 967 + rdev_err(rdev, "failed to set load %d: %pe\n", 968 + current_uA, ERR_PTR(err)); 968 969 } else { 969 970 /* get output voltage */ 970 971 output_uV = regulator_get_voltage_rdev(rdev); ··· 992 991 /* check the new mode is allowed */ 993 992 err = regulator_mode_constrain(rdev, &mode); 994 993 if (err < 0) { 995 - rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV\n", 996 - current_uA, input_uV, output_uV); 994 + rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV: %pe\n", 995 + current_uA, input_uV, output_uV, ERR_PTR(err)); 997 996 return err; 998 997 } 999 998 1000 999 err = rdev->desc->ops->set_mode(rdev, mode); 1001 1000 if (err < 0) 1002 - rdev_err(rdev, "failed to set optimum mode %x\n", mode); 1001 + rdev_err(rdev, "failed to set optimum mode %x: %pe\n", 1002 + mode, ERR_PTR(err)); 1003 1003 } 1004 1004 1005 1005 return err; ··· 1021 1019 ret = 0; 1022 1020 1023 1021 if (ret < 0) { 1024 - rdev_err(rdev, "failed to enabled/disable\n"); 1022 + rdev_err(rdev, "failed to enabled/disable: %pe\n", ERR_PTR(ret)); 1025 1023 return ret; 1026 1024 } 1027 1025 1028 1026 if (rdev->desc->ops->set_suspend_voltage && rstate->uV > 0) { 1029 1027 ret = rdev->desc->ops->set_suspend_voltage(rdev, rstate->uV); 1030 1028 if (ret < 0) { 1031 - rdev_err(rdev, "failed to set voltage\n"); 1029 + rdev_err(rdev, "failed to set voltage: %pe\n", ERR_PTR(ret)); 1032 1030 return ret; 1033 1031 } 1034 1032 } ··· 1036 1034 if (rdev->desc->ops->set_suspend_mode && rstate->mode > 0) { 1037 1035 ret = rdev->desc->ops->set_suspend_mode(rdev, rstate->mode); 1038 1036 if (ret < 0) { 1039 - rdev_err(rdev, "failed to set mode\n"); 1037 + rdev_err(rdev, "failed to set mode: %pe\n", ERR_PTR(ret)); 1040 1038 return ret; 1041 1039 } 1042 1040 } ··· 1113 1111 if (constraints->valid_modes_mask & REGULATOR_MODE_IDLE) 1114 1112 count += scnprintf(buf + count, len - count, "idle "); 1115 1113 if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY) 1116 - count += scnprintf(buf + count, len - count, "standby"); 1114 + count += scnprintf(buf + count, len - count, "standby "); 1117 1115 1118 1116 if (!count) 1119 - scnprintf(buf, len, "no parameters"); 1117 + count = scnprintf(buf, len, "no parameters"); 1118 + else 1119 + --count; 1120 + 1121 + count += scnprintf(buf + count, len - count, ", %s", 1122 + _regulator_is_enabled(rdev) ? "enabled" : "disabled"); 1120 1123 1121 1124 rdev_dbg(rdev, "%s\n", buf); 1122 1125 ··· 1156 1149 1157 1150 if (current_uV < 0) { 1158 1151 rdev_err(rdev, 1159 - "failed to get the current voltage(%d)\n", 1160 - current_uV); 1152 + "failed to get the current voltage: %pe\n", 1153 + ERR_PTR(current_uV)); 1161 1154 return current_uV; 1162 1155 } 1163 1156 ··· 1186 1179 rdev, target_min, target_max); 1187 1180 if (ret < 0) { 1188 1181 rdev_err(rdev, 1189 - "failed to apply %d-%duV constraint(%d)\n", 1190 - target_min, target_max, ret); 1182 + "failed to apply %d-%duV constraint: %pe\n", 1183 + target_min, target_max, ERR_PTR(ret)); 1191 1184 return ret; 1192 1185 } 1193 1186 } ··· 1336 1329 ret = ops->set_input_current_limit(rdev, 1337 1330 rdev->constraints->ilim_uA); 1338 1331 if (ret < 0) { 1339 - rdev_err(rdev, "failed to set input limit\n"); 1332 + rdev_err(rdev, "failed to set input limit: %pe\n", ERR_PTR(ret)); 1340 1333 return ret; 1341 1334 } 1342 1335 } ··· 1345 1338 if (rdev->constraints->initial_state) { 1346 1339 ret = suspend_set_initial_state(rdev); 1347 1340 if (ret < 0) { 1348 - rdev_err(rdev, "failed to set suspend state\n"); 1341 + rdev_err(rdev, "failed to set suspend state: %pe\n", ERR_PTR(ret)); 1349 1342 return ret; 1350 1343 } 1351 1344 } ··· 1358 1351 1359 1352 ret = ops->set_mode(rdev, rdev->constraints->initial_mode); 1360 1353 if (ret < 0) { 1361 - rdev_err(rdev, "failed to set initial mode: %d\n", ret); 1354 + rdev_err(rdev, "failed to set initial mode: %pe\n", ERR_PTR(ret)); 1362 1355 return ret; 1363 1356 } 1364 1357 } else if (rdev->constraints->system_load) { ··· 1373 1366 && ops->set_ramp_delay) { 1374 1367 ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay); 1375 1368 if (ret < 0) { 1376 - rdev_err(rdev, "failed to set ramp_delay\n"); 1369 + rdev_err(rdev, "failed to set ramp_delay: %pe\n", ERR_PTR(ret)); 1377 1370 return ret; 1378 1371 } 1379 1372 } ··· 1381 1374 if (rdev->constraints->pull_down && ops->set_pull_down) { 1382 1375 ret = ops->set_pull_down(rdev); 1383 1376 if (ret < 0) { 1384 - rdev_err(rdev, "failed to set pull down\n"); 1377 + rdev_err(rdev, "failed to set pull down: %pe\n", ERR_PTR(ret)); 1385 1378 return ret; 1386 1379 } 1387 1380 } ··· 1389 1382 if (rdev->constraints->soft_start && ops->set_soft_start) { 1390 1383 ret = ops->set_soft_start(rdev); 1391 1384 if (ret < 0) { 1392 - rdev_err(rdev, "failed to set soft start\n"); 1385 + rdev_err(rdev, "failed to set soft start: %pe\n", ERR_PTR(ret)); 1393 1386 return ret; 1394 1387 } 1395 1388 } ··· 1398 1391 && ops->set_over_current_protection) { 1399 1392 ret = ops->set_over_current_protection(rdev); 1400 1393 if (ret < 0) { 1401 - rdev_err(rdev, "failed to set over current protection\n"); 1394 + rdev_err(rdev, "failed to set over current protection: %pe\n", 1395 + ERR_PTR(ret)); 1402 1396 return ret; 1403 1397 } 1404 1398 } ··· 1410 1402 1411 1403 ret = ops->set_active_discharge(rdev, ad_state); 1412 1404 if (ret < 0) { 1413 - rdev_err(rdev, "failed to set active discharge\n"); 1405 + rdev_err(rdev, "failed to set active discharge: %pe\n", ERR_PTR(ret)); 1414 1406 return ret; 1415 1407 } 1416 1408 } ··· 1430 1422 1431 1423 ret = _regulator_do_enable(rdev); 1432 1424 if (ret < 0 && ret != -EINVAL) { 1433 - rdev_err(rdev, "failed to enable\n"); 1425 + rdev_err(rdev, "failed to enable: %pe\n", ERR_PTR(ret)); 1434 1426 return ret; 1435 1427 } 1436 1428 ··· 1654 1646 err = sysfs_create_link_nowarn(&rdev->dev.kobj, &dev->kobj, 1655 1647 supply_name); 1656 1648 if (err) { 1657 - rdev_dbg(rdev, "could not add device link %s err %d\n", 1658 - dev->kobj.name, err); 1649 + rdev_dbg(rdev, "could not add device link %s: %pe\n", 1650 + dev->kobj.name, ERR_PTR(err)); 1659 1651 /* non-fatal */ 1660 1652 } 1661 1653 } ··· 2443 2435 if (ret >= 0) { 2444 2436 delay = ret; 2445 2437 } else { 2446 - rdev_warn(rdev, "enable_time() failed: %d\n", ret); 2438 + rdev_warn(rdev, "enable_time() failed: %pe\n", ERR_PTR(ret)); 2447 2439 delay = 0; 2448 2440 } 2449 2441 ··· 2632 2624 _notifier_call_chain(rdev, REGULATOR_EVENT_ENABLE, 2633 2625 NULL); 2634 2626 } else if (ret < 0) { 2635 - rdev_err(rdev, "is_enabled() failed: %d\n", ret); 2627 + rdev_err(rdev, "is_enabled() failed: %pe\n", ERR_PTR(ret)); 2636 2628 goto err_consumer_disable; 2637 2629 } 2638 2630 /* Fallthrough on positive return values - already enabled */ ··· 2734 2726 2735 2727 ret = _regulator_do_disable(rdev); 2736 2728 if (ret < 0) { 2737 - rdev_err(rdev, "failed to disable\n"); 2729 + rdev_err(rdev, "failed to disable: %pe\n", ERR_PTR(ret)); 2738 2730 _notifier_call_chain(rdev, 2739 2731 REGULATOR_EVENT_ABORT_DISABLE, 2740 2732 NULL); ··· 2801 2793 2802 2794 ret = _regulator_do_disable(rdev); 2803 2795 if (ret < 0) { 2804 - rdev_err(rdev, "failed to force disable\n"); 2796 + rdev_err(rdev, "failed to force disable: %pe\n", ERR_PTR(ret)); 2805 2797 _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | 2806 2798 REGULATOR_EVENT_ABORT_DISABLE, NULL); 2807 2799 return ret; ··· 2880 2872 for (i = 0; i < count; i++) { 2881 2873 ret = _regulator_disable(regulator); 2882 2874 if (ret != 0) 2883 - rdev_err(rdev, "Deferred disable failed: %d\n", ret); 2875 + rdev_err(rdev, "Deferred disable failed: %pe\n", 2876 + ERR_PTR(ret)); 2884 2877 } 2885 2878 } 2886 2879 WARN_ON(!total_count); ··· 3406 3397 } 3407 3398 3408 3399 if (delay < 0) { 3409 - rdev_warn(rdev, "failed to get delay: %d\n", delay); 3400 + rdev_warn(rdev, "failed to get delay: %pe\n", ERR_PTR(delay)); 3410 3401 delay = 0; 3411 3402 } 3412 3403 ··· 3558 3549 ret = regulator_set_voltage_unlocked(rdev->supply, 3559 3550 best_supply_uV, INT_MAX, state); 3560 3551 if (ret) { 3561 - dev_err(&rdev->dev, "Failed to increase supply voltage: %d\n", 3562 - ret); 3552 + dev_err(&rdev->dev, "Failed to increase supply voltage: %pe\n", 3553 + ERR_PTR(ret)); 3563 3554 goto out; 3564 3555 } 3565 3556 } ··· 3576 3567 ret = regulator_set_voltage_unlocked(rdev->supply, 3577 3568 best_supply_uV, INT_MAX, state); 3578 3569 if (ret) 3579 - dev_warn(&rdev->dev, "Failed to decrease supply voltage: %d\n", 3580 - ret); 3570 + dev_warn(&rdev->dev, "Failed to decrease supply voltage: %pe\n", 3571 + ERR_PTR(ret)); 3581 3572 /* No need to fail here */ 3582 3573 ret = 0; 3583 3574 } ··· 4563 4554 4564 4555 err: 4565 4556 if (ret != -EPROBE_DEFER) 4566 - dev_err(dev, "Failed to get supply '%s': %d\n", 4567 - consumers[i].supply, ret); 4557 + dev_err(dev, "Failed to get supply '%s': %pe\n", 4558 + consumers[i].supply, ERR_PTR(ret)); 4568 4559 else 4569 4560 dev_dbg(dev, "Failed to get supply '%s', deferring\n", 4570 4561 consumers[i].supply); ··· 4622 4613 err: 4623 4614 for (i = 0; i < num_consumers; i++) { 4624 4615 if (consumers[i].ret < 0) 4625 - pr_err("Failed to enable %s: %d\n", consumers[i].supply, 4626 - consumers[i].ret); 4616 + pr_err("Failed to enable %s: %pe\n", consumers[i].supply, 4617 + ERR_PTR(consumers[i].ret)); 4627 4618 else 4628 4619 regulator_disable(consumers[i].consumer); 4629 4620 } ··· 4659 4650 return 0; 4660 4651 4661 4652 err: 4662 - pr_err("Failed to disable %s: %d\n", consumers[i].supply, ret); 4653 + pr_err("Failed to disable %s: %pe\n", consumers[i].supply, ERR_PTR(ret)); 4663 4654 for (++i; i < num_consumers; ++i) { 4664 4655 r = regulator_enable(consumers[i].consumer); 4665 4656 if (r != 0) 4666 - pr_err("Failed to re-enable %s: %d\n", 4667 - consumers[i].supply, r); 4657 + pr_err("Failed to re-enable %s: %pe\n", 4658 + consumers[i].supply, ERR_PTR(r)); 4668 4659 } 4669 4660 4670 4661 return ret; ··· 5047 5038 if (coupler && coupler->detach_regulator) { 5048 5039 err = coupler->detach_regulator(coupler, rdev); 5049 5040 if (err) 5050 - rdev_err(rdev, "failed to detach from coupler: %d\n", 5051 - err); 5041 + rdev_err(rdev, "failed to detach from coupler: %pe\n", 5042 + ERR_PTR(err)); 5052 5043 } 5053 5044 5054 5045 kfree(rdev->coupling_desc.coupled_rdevs); ··· 5092 5083 5093 5084 if (IS_ERR(rdev->coupling_desc.coupler)) { 5094 5085 err = PTR_ERR(rdev->coupling_desc.coupler); 5095 - rdev_err(rdev, "failed to get coupler: %d\n", err); 5086 + rdev_err(rdev, "failed to get coupler: %pe\n", ERR_PTR(err)); 5096 5087 return err; 5097 5088 } 5098 5089 ··· 5255 5246 if (config->ena_gpiod) { 5256 5247 ret = regulator_ena_gpio_request(rdev, config); 5257 5248 if (ret != 0) { 5258 - rdev_err(rdev, "Failed to request enable GPIO: %d\n", 5259 - ret); 5249 + rdev_err(rdev, "Failed to request enable GPIO: %pe\n", 5250 + ERR_PTR(ret)); 5260 5251 goto clean; 5261 5252 } 5262 5253 /* The regulator core took over the GPIO descriptor */ ··· 5280 5271 else if (regulator_desc->supply_name) 5281 5272 rdev->supply_name = regulator_desc->supply_name; 5282 5273 5283 - /* 5284 - * Attempt to resolve the regulator supply, if specified, 5285 - * but don't return an error if we fail because we will try 5286 - * to resolve it again later as more regulators are added. 5287 - */ 5288 - if (regulator_resolve_supply(rdev)) 5289 - rdev_dbg(rdev, "unable to resolve supply\n"); 5290 - 5291 5274 ret = set_machine_constraints(rdev, constraints); 5275 + if (ret == -EPROBE_DEFER) { 5276 + /* Regulator might be in bypass mode and so needs its supply 5277 + * to set the constraints */ 5278 + /* FIXME: this currently triggers a chicken-and-egg problem 5279 + * when creating -SUPPLY symlink in sysfs to a regulator 5280 + * that is just being created */ 5281 + ret = regulator_resolve_supply(rdev); 5282 + if (!ret) 5283 + ret = set_machine_constraints(rdev, constraints); 5284 + else 5285 + rdev_dbg(rdev, "unable to resolve supply early: %pe\n", 5286 + ERR_PTR(ret)); 5287 + } 5292 5288 if (ret < 0) 5293 5289 goto wash; 5294 5290 ··· 5846 5832 rdev_info(rdev, "disabling\n"); 5847 5833 ret = _regulator_do_disable(rdev); 5848 5834 if (ret != 0) 5849 - rdev_err(rdev, "couldn't disable: %d\n", ret); 5835 + rdev_err(rdev, "couldn't disable: %pe\n", ERR_PTR(ret)); 5850 5836 } else { 5851 5837 /* The intention is that in future we will 5852 5838 * assume that full constraints are provided