regulator: output current-limit for all regulators in summary
authorHeiko Stübner <heiko@sntech.de>
Fri, 10 Apr 2015 11:48:41 +0000 (13:48 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 10 Apr 2015 14:46:32 +0000 (15:46 +0100)
Voltage regulators can have (unregulated) current limits too, so we should
probably output both voltage and current for all regulators.

Holding the rdev->mutex actually conflicts with _regulator_get_current_limit
but also is not really necessary, as the global regulator_list_mutex already
protects us from the regulator vanishing while we go through the list.

On the rk3288-firefly the summary now looks like:

 regulator                      use open bypass voltage current     min     max
-------------------------------------------------------------------------------
 vcc_sys                          0   12      0  5000mV     0mA  5000mV  5000mV
    vcc_lan                       1    1      0  3300mV     0mA  3300mV  3300mV
       ff290000.ethernet                                            0mV     0mV
    vcca_33                       0    0      0  3300mV     0mA  3300mV  3300mV
    vcca_18                       0    0      0  1800mV     0mA  1800mV  1800mV
    vdd10_lcd                     0    0      0  1000mV     0mA  1000mV  1000mV
 [...]

Suggested-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/core.c

index 5aae1bd611515123effcec966ce72ba3e0ff0974..0ea0a019dc5722fd1c3c13cceb10f37254de95b9 100644 (file)
@@ -3967,23 +3967,13 @@ static void regulator_summary_show_subtree(struct seq_file *s,
        if (!rdev)
                return;
 
-       mutex_lock(&rdev->mutex);
-
        seq_printf(s, "%*s%-*s %3d %4d %6d ",
                   level * 3 + 1, "",
                   30 - level * 3, rdev_get_name(rdev),
                   rdev->use_count, rdev->open_count, rdev->bypass_count);
 
-       switch (rdev->desc->type) {
-       case REGULATOR_VOLTAGE:
-               seq_printf(s, "%5dmV ",
-                          _regulator_get_voltage(rdev) / 1000);
-               break;
-       case REGULATOR_CURRENT:
-               seq_printf(s, "%5dmA ",
-                          _regulator_get_current_limit(rdev) / 1000);
-               break;
-       }
+       seq_printf(s, "%5dmV ", _regulator_get_voltage(rdev) / 1000);
+       seq_printf(s, "%5dmA ", _regulator_get_current_limit(rdev) / 1000);
 
        c = rdev->constraints;
        if (c) {
@@ -4011,21 +4001,17 @@ static void regulator_summary_show_subtree(struct seq_file *s,
 
                switch (rdev->desc->type) {
                case REGULATOR_VOLTAGE:
-                       seq_printf(s, "%29dmV %5dmV",
+                       seq_printf(s, "%37dmV %5dmV",
                                   consumer->min_uV / 1000,
                                   consumer->max_uV / 1000);
                        break;
                case REGULATOR_CURRENT:
-                       seq_printf(s, "%37dmA",
-                               regulator_get_current_limit(consumer) / 1000);
                        break;
                }
 
                seq_puts(s, "\n");
        }
 
-       mutex_unlock(&rdev->mutex);
-
        list_for_each_entry(child, list, list) {
                /* handle only non-root regulators supplied by current rdev */
                if (!child->supply || child->supply->rdev != rdev)
@@ -4040,8 +4026,8 @@ static int regulator_summary_show(struct seq_file *s, void *data)
        struct list_head *list = s->private;
        struct regulator_dev *rdev;
 
-       seq_puts(s, " regulator                      use open bypass   value     min     max\n");
-       seq_puts(s, "-----------------------------------------------------------------------\n");
+       seq_puts(s, " regulator                      use open bypass voltage current     min     max\n");
+       seq_puts(s, "-------------------------------------------------------------------------------\n");
 
        mutex_lock(&regulator_list_mutex);