From 4eddcbd748d9a798425ca3c8d92912695c5d62fa Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Fri, 21 Feb 2014 12:36:35 -0800 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/187454 Reviewed-by: Sameer Nanda --- util/ectool.c | 39 ++++++++++++++++++++++++++++++++------- 1 file 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 \n" " Writes to EC host persistent storage from a file\n" - " pwmgetfanrpm\n" + " pwmgetfanrpm [ | 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[]) { -- cgit v1.2.1