diff options
author | Randall Spangler <rspangler@chromium.org> | 2014-02-21 12:36:35 -0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-02-22 00:50:39 +0000 |
commit | 4eddcbd748d9a798425ca3c8d92912695c5d62fa (patch) | |
tree | e2f43037b6029804fe63ce4790e836d6d8083b37 | |
parent | 930b41e6a9782e7c8e37f3a283de2e8a3164b155 (diff) | |
download | chrome-ec-4eddcbd748d9a798425ca3c8d92912695c5d62fa.tar.gz |
ectool: pwmgetfanrpm supports multiple fans
The EC already provided this information, but ectool wouldn't print it.
BUG=chrome-os-partner:23803
BRANCH=samus
TEST=from ec console, 'fanset 0 3000' and 'fanset 1 1000'
ectool pwmfangetrpm -> prints both fans
ectool pwmfangetrpm all -> prints both fans
ectool pwmfangetrpm 0 -> prints ~3000
ectool pwmfangetrpm 1 -> prints ~1000
Change-Id: I19d3081d09edd42c16bf8b0cdbc48ca58d134027
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/187454
Reviewed-by: Sameer Nanda <snanda@chromium.org>
-rw-r--r-- | util/ectool.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/util/ectool.c b/util/ectool.c index f0c3d3500f..18a498b8d3 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -122,7 +122,7 @@ const char help_str[] = " Reads from EC host persistent storage to a file\n" " pstorewrite <offset> <infile>\n" " Writes to EC host persistent storage from a file\n" - " pwmgetfanrpm\n" + " pwmgetfanrpm [<index> | all]\n" " Prints current fan RPM\n" " pwmgetkblight\n" " Prints current keyboard backlight percent\n" @@ -1169,26 +1169,51 @@ int cmd_thermal_auto_fan_ctrl(int argc, char *argv[]) return 0; } - -int cmd_pwm_get_fan_rpm(int argc, char *argv[]) +static int print_fan(int idx) { - int rv; + int rv = read_mapped_mem16(EC_MEMMAP_FAN + 2 * idx); - rv = read_mapped_mem16(EC_MEMMAP_FAN); switch (rv) { case EC_FAN_SPEED_NOT_PRESENT: return -1; case EC_FAN_SPEED_STALLED: - printf("Fan stalled!\n"); + printf("Fan %d stalled!\n", idx); break; default: - printf("Current fan RPM: %d\n", rv); + printf("Fan %d RPM: %d\n", idx, rv); break; } return 0; } +int cmd_pwm_get_fan_rpm(int argc, char *argv[]) +{ + int i; + + if (argc < 2 || !strcasecmp(argv[1], "all")) { + /* Print all the fan speeds */ + for (i = 0; i < EC_FAN_SPEED_ENTRIES; i++) { + if (print_fan(i)) + break; /* Stop at first not-present fan */ + } + + } else { + char *e; + int idx; + + idx = strtol(argv[1], &e, 0); + if ((e && *e) || idx < 0 || idx >= EC_FAN_SPEED_ENTRIES) { + fprintf(stderr, "Bad index.\n"); + return -1; + } + + return print_fan(idx); + } + + return 0; +} + int cmd_pwm_set_fan_rpm(int argc, char *argv[]) { |