summaryrefslogtreecommitdiff
path: root/util/ectool.c
diff options
context:
space:
mode:
authorVic Yang <victoryang@google.com>2011-12-20 18:50:37 +0800
committerVic Yang <victoryang@google.com>2011-12-27 10:14:29 +0800
commite98b6befcafdbc838b75a1a79500dc1ed77452ff (patch)
tree1856907c524d7c7daa45f44db5d2b1d6899cb4f8 /util/ectool.c
parentb228bc14c01f54bc70b82ea85bcb82dd402006a1 (diff)
downloadchrome-ec-e98b6befcafdbc838b75a1a79500dc1ed77452ff.tar.gz
Add EC host command to control fan speed.
Add LPC host command to get and set fan speed. BUG=chrome-os-partner:7313 TEST=Connect a fan and manually test fan actual speed matches target speed. Change-Id: I4b6a711a1b8cca0dbd1c1936fe4f0f15240d3453
Diffstat (limited to 'util/ectool.c')
-rw-r--r--util/ectool.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 11012069d9..1446c5b065 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -37,6 +37,10 @@ const char help_str[] =
" Prints EC version\n"
" temps\n"
" Print temperature\n"
+ " pwmgetfanrpm\n"
+ " Prints current fan RPM\n"
+ " pwmsetfanrpm <targetrpm>\n"
+ " Set target fan RPM\n"
"\n"
"Not working for you? Make sure LPC I/O is configured:\n"
" pci_write32 0 0x1f 0 0x88 0x007c0801\n"
@@ -460,6 +464,46 @@ int cmd_temperature(void)
return 0;
}
+int cmd_pwm_get_fan_rpm(void)
+{
+ struct lpc_response_pwm_get_fan_rpm r;
+ int rv;
+
+ rv = ec_command(EC_LPC_COMMAND_PWM_GET_FAN_RPM, NULL, 0, &r, sizeof(r));
+ if (rv)
+ return rv;
+
+ printf("Current fan RPM: %d\n", r.rpm);
+
+ return 0;
+}
+
+int cmd_pwm_set_fan_rpm(int argc, char *argv[])
+{
+ struct lpc_params_pwm_set_fan_target_rpm p;
+ char *e;
+ int rv;
+
+ if (argc != 1) {
+ fprintf(stderr,
+ "Usage: pwmsetfanrpm <targetrpm>\n");
+ return -1;
+ }
+ p.rpm = strtol(argv[0], &e, 0);
+ if (e && *e) {
+ fprintf(stderr, "Bad RPM.\n");
+ return -1;
+ }
+
+ rv = ec_command(EC_LPC_COMMAND_PWM_SET_FAN_TARGET_RPM,
+ &p, sizeof(p), NULL, 0);
+ if (rv)
+ return rv;
+
+ printf("Fan target RPM set.\n");
+ return 0;
+}
+
int main(int argc, char *argv[])
{
if (argc < 2 || !strcasecmp(argv[1], "-?") ||
@@ -493,6 +537,10 @@ int main(int argc, char *argv[])
return cmd_version();
if (!strcasecmp(argv[1], "temps"))
return cmd_temperature();
+ if (!strcasecmp(argv[1], "pwmgetfanrpm"))
+ return cmd_pwm_get_fan_rpm();
+ if (!strcasecmp(argv[1], "pwmsetfanrpm"))
+ return cmd_pwm_set_fan_rpm(argc - 2, argv + 2);
/* If we're still here, command was unknown */
fprintf(stderr, "Unknown command '%s'\n\n", argv[1]);