diff options
author | Mohammed Habibulla <moch@chromium.org> | 2014-10-01 16:40:07 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-10-03 22:26:52 +0000 |
commit | 75d7e31b9cadb83f7f1cbc54deb9f11de369f006 (patch) | |
tree | 50e8a499a6542f0f8083f62c11d1e844db59cfbe | |
parent | 938ba82bd72d238f89619b15cbc979f966b8e95a (diff) | |
download | chrome-ec-75d7e31b9cadb83f7f1cbc54deb9f11de369f006.tar.gz |
ectool: add new host command to get number of fans
BUG=chrome-os-partner:23803
TEST="ectool pwmgetnumfans" returns correct number of fans on Auron
BRANCH=none
Change-Id: I2a1930a8f0965b08558bfb3c6424c571a6149bbb
Signed-off-by: Mohammed Habibulla <moch@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/220960
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | util/ectool.c | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/util/ectool.c b/util/ectool.c index 657bac4a71..416f73927f 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -153,6 +153,8 @@ const char help_str[] = " Prints current fan RPM\n" " pwmgetkblight\n" " Prints current keyboard backlight percent\n" + " pwmgetnumfans\n" + " Prints the number of fans present\n" " pwmsetfanrpm <targetrpm>\n" " Set target fan RPM\n" " pwmsetkblight <percent>\n" @@ -1420,28 +1422,50 @@ static int print_fan(int idx) return 0; } +static int get_num_fans(void) +{ + int idx, rv; + + for (idx = 0; idx < EC_FAN_SPEED_ENTRIES; idx++) { + rv = read_mapped_mem16(EC_MEMMAP_FAN + 2 * idx); + if (rv == EC_FAN_SPEED_NOT_PRESENT) + break; + } + + return idx; +} + +int cmd_pwm_get_num_fans(int argc, char *argv[]) +{ + int num_fans; + + num_fans = get_num_fans(); + + printf("Number of fans = %d\n", num_fans); + + return 0; +} + int cmd_pwm_get_fan_rpm(int argc, char *argv[]) { - int i; + int i, num_fans; + num_fans = get_num_fans(); 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 */ - } - + for (i = 0; i < num_fans; i++) + print_fan(i); } else { char *e; int idx; idx = strtol(argv[1], &e, 0); - if ((e && *e) || idx < 0 || idx >= EC_FAN_SPEED_ENTRIES) { + if ((e && *e) || idx < 0 || idx >= num_fans) { fprintf(stderr, "Bad index.\n"); return -1; } - return print_fan(idx); + print_fan(idx); } return 0; @@ -4854,6 +4878,7 @@ const struct command commands[] = { {"pstorewrite", cmd_pstore_write}, {"pwmgetfanrpm", cmd_pwm_get_fan_rpm}, {"pwmgetkblight", cmd_pwm_get_keyboard_backlight}, + {"pwmgetnumfans", cmd_pwm_get_num_fans}, {"pwmsetfanrpm", cmd_pwm_set_fan_rpm}, {"pwmsetkblight", cmd_pwm_set_keyboard_backlight}, {"readtest", cmd_read_test}, |