diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-05-10 13:24:51 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-05-11 18:24:30 -0700 |
commit | 9494fc0dd10f1e6b59084c691f1f9f1499e401f1 (patch) | |
tree | 163ff88a7b731abfbdedc9852269ecd88b44a10a /util | |
parent | 3e9490031bbf5cd48c2acc314c38b201d50cb748 (diff) | |
download | chrome-ec-9494fc0dd10f1e6b59084c691f1f9f1499e401f1.tar.gz |
pwm: Add generic PWM control host commands
Add generic PWM host commands for setting + getting duty cycle. PWMs can
be controlled through index (board-specific meaning) or by type
(currently KB backlight and display backlight are supported, more can be
added as needed).
BUG=chrome-os-partner:52002
BRANCH=None
TEST=Manual on chell.
`ectool pwmsetduty kb 100` - Verify KB backlight goes to 100%
`ectool pwmgetduty kb` - Prints 100
`ectool pwmgetduty 0` - Prints 100
`ectool pwmsetduty 0 0` - Verify KB backlight goes to 0%
`ectool pwmgetduty kb` - Prints 0
`ectool pwmgetduty disp` - Error res 3 (unsupported PWM type)
`ectool pwmsetduty 1` - Error res 3 (non-existent PWM index)
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: I607c92a291e6c2e3af8238eaf22ad2bb81ffc805
Reviewed-on: https://chromium-review.googlesource.com/344012
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/ectool.c | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/util/ectool.c b/util/ectool.c index 59793e21d6..0e3c1ee596 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -173,10 +173,14 @@ const char help_str[] = " Prints current keyboard backlight percent\n" " pwmgetnumfans\n" " Prints the number of fans present\n" + " pwmgetduty\n" + " Prints the current duty cycle for given PWM\n" " pwmsetfanrpm <targetrpm>\n" " Set target fan RPM\n" " pwmsetkblight <percent>\n" " Set keyboard backlight in percent\n" + " pwmsetduty\n" + " Set duty cycle of given PWM in percent\n" " readtest <patternoffset> <size>\n" " Reads a pattern from the EC via LPC\n" " reboot_ec <RO|RW|cold|hibernate|disable-jump> [at-shutdown]\n" @@ -1858,7 +1862,6 @@ int cmd_pwm_set_fan_rpm(int argc, char *argv[]) return 0; } - int cmd_pwm_get_keyboard_backlight(int argc, char *argv[]) { struct ec_response_pwm_get_keyboard_backlight r; @@ -1903,6 +1906,84 @@ int cmd_pwm_set_keyboard_backlight(int argc, char *argv[]) return 0; } +int cmd_pwm_get_duty(int argc, char *argv[]) +{ + struct ec_params_pwm_get_duty p; + struct ec_response_pwm_get_duty r; + char *e; + int rv; + + if (argc != 2) { + fprintf(stderr, "Usage: %s <pwm_idx> | kb | disp\n", argv[0]); + return -1; + } + + if (!strcmp(argv[1], "kb")) { + p.pwm_type = EC_PWM_TYPE_KB_LIGHT; + p.index = 0; + } else if (!strcmp(argv[1], "disp")) { + p.pwm_type = EC_PWM_TYPE_DISPLAY_LIGHT; + p.index = 0; + } else { + p.pwm_type = EC_PWM_TYPE_GENERIC; + p.index = strtol(argv[1], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad pwm_idx\n"); + return -1; + } + } + + rv = ec_command(EC_CMD_PWM_GET_DUTY, 0, &p, sizeof(p), &r, sizeof(r)); + if (rv < 0) + return rv; + + printf("Current PWM duty: %d\n", r.percent); + return 0; +} + + +int cmd_pwm_set_duty(int argc, char *argv[]) +{ + struct ec_params_pwm_set_duty p; + char *e; + int rv; + + if (argc != 3) { + fprintf(stderr, "Usage: %s <pwm_idx> | kb | disp <percent>\n", + argv[0]); + return -1; + } + + if (!strcmp(argv[1], "kb")) { + p.pwm_type = EC_PWM_TYPE_KB_LIGHT; + p.index = 0; + } else if (!strcmp(argv[1], "disp")) { + p.pwm_type = EC_PWM_TYPE_DISPLAY_LIGHT; + p.index = 0; + } else { + p.pwm_type = EC_PWM_TYPE_GENERIC; + p.index = strtol(argv[1], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad pwm_idx\n"); + return -1; + } + } + + p.percent = strtol(argv[2], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad percent.\n"); + return -1; + } + + rv = ec_command(EC_CMD_PWM_SET_DUTY, 0, + &p, sizeof(p), NULL, 0); + if (rv < 0) + return rv; + + printf("PWM set.\n"); + return 0; +} + int cmd_fanduty(int argc, char *argv[]) { struct ec_params_pwm_set_fan_duty_v1 p_v1; @@ -6602,8 +6683,10 @@ const struct command commands[] = { {"pwmgetfanrpm", cmd_pwm_get_fan_rpm}, {"pwmgetkblight", cmd_pwm_get_keyboard_backlight}, {"pwmgetnumfans", cmd_pwm_get_num_fans}, + {"pwmgetduty", cmd_pwm_get_duty}, {"pwmsetfanrpm", cmd_pwm_set_fan_rpm}, {"pwmsetkblight", cmd_pwm_set_keyboard_backlight}, + {"pwmsetduty", cmd_pwm_set_duty}, {"readtest", cmd_read_test}, {"reboot_ec", cmd_reboot_ec}, {"rtcget", cmd_rtc_get}, |