Skip to content

Commit

Permalink
regulator: output current-limit for all regulators in summary
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mmind authored and broonie committed Apr 10, 2015
1 parent 7c225ec commit 2329609
Showing 1 changed file with 5 additions and 19 deletions.
24 changes: 5 additions & 19 deletions drivers/regulator/core.c
Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
Expand All @@ -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);

Expand Down

0 comments on commit 2329609

Please sign in to comment.