summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammed Habibulla <moch@chromium.org>2014-10-01 16:40:07 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-10-10 18:26:15 +0000
commit39117d8eabe8f6bf45f510c595ef1cbc6db6c2bc (patch)
tree62fc0072b864bbb49e2dd7da92c632b684764625
parenta1016ea5b23c2898f452b732d1086efcf3bc9f89 (diff)
downloadchrome-ec-39117d8eabe8f6bf45f510c595ef1cbc6db6c2bc.tar.gz
CHERRY-PICK: 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: I241d4417a9d8deeaec2d7ec40753b5f429cf5950 Original-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> Reviewed-on: https://chromium-review.googlesource.com/222861
-rw-r--r--util/ectool.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 851f0f4d6b..314cb5aa44 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;
@@ -4907,6 +4931,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},