diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-02-21 12:51:42 -0800 |
---|---|---|
committer | Randall Spangler <rspangler@chromium.org> | 2012-02-21 12:59:44 -0800 |
commit | 12b12e53346a6c80e33e1f88beb620b01efac2d9 (patch) | |
tree | 7c0f7ae780a57e83d0c057cd82df49ebb1a14025 | |
parent | 63c9ebaac95d0d95cae132533ca30708ea87a0f7 (diff) | |
download | chrome-ec-12b12e53346a6c80e33e1f88beb620b01efac2d9.tar.gz |
Add EC host commands for keyboard backlight
Signed-off-by: Randall Spangler <rspangler@chromium.org>
BUG=chrome-os-partner:8128
TEST='ectool setkblight X && ectool getkblight' for X=1, 20, 99, 100, 0
Change-Id: I540fd2d05f4caa110cd1dc45e9b5184fc8777a06
-rw-r--r-- | chip/lm4/pwm.c | 22 | ||||
-rw-r--r-- | common/host_command.c | 16 | ||||
-rw-r--r-- | common/pwm_commands.c | 25 | ||||
-rw-r--r-- | include/lpc_commands.h | 11 | ||||
-rw-r--r-- | include/pwm.h | 5 | ||||
-rw-r--r-- | include/pwm_commands.h | 4 | ||||
-rw-r--r-- | util/ectool.c | 49 |
7 files changed, 114 insertions, 18 deletions
diff --git a/chip/lm4/pwm.c b/chip/lm4/pwm.c index d877e721ab..bcb19f49a0 100644 --- a/chip/lm4/pwm.c +++ b/chip/lm4/pwm.c @@ -64,9 +64,16 @@ int pwm_set_fan_target_rpm(int rpm) } +int pwm_get_keyboard_backlight(void) +{ + return ((LM4_FAN_FANCMD(FAN_CH_KBLIGHT) >> 16) * 100 + + MAX_PWM / 2) / MAX_PWM; +} + + int pwm_set_keyboard_backlight(int percent) { - LM4_FAN_FANCMD(FAN_CH_KBLIGHT) = ((percent * MAX_PWM) / 100) << 16; + LM4_FAN_FANCMD(FAN_CH_KBLIGHT) = ((percent * MAX_PWM + 50) / 100) << 16; return EC_SUCCESS; } @@ -164,8 +171,9 @@ static int command_kblight(int argc, char **argv) int i; if (argc < 2) { - uart_puts("Usage: kblight <percent>\n"); - return EC_ERROR_UNKNOWN; + uart_printf("Keyboard backlight is at %d%%\n", + pwm_get_keyboard_backlight()); + return EC_SUCCESS; } i = strtoi(argv[1], &e, 0); @@ -182,14 +190,6 @@ static int command_kblight(int argc, char **argv) } DECLARE_CONSOLE_COMMAND(kblight, command_kblight); -static const struct console_command console_commands[] = { - {"fanduty", command_fan_duty}, - {"faninfo", command_fan_info}, - {"fanset", command_fan_set}, - {"kblight", command_kblight}, -}; - - /*****************************************************************************/ /* Initialization */ diff --git a/common/host_command.c b/common/host_command.c index 0ed1802977..8bf00b5849 100644 --- a/common/host_command.c +++ b/common/host_command.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -176,13 +176,23 @@ static void command_process(int slot) return; #endif case EC_LPC_COMMAND_TEMP_SENSOR_GET_READINGS: - lpc_send_host_response(slot, temp_sensor_command_get_readings(data)); + lpc_send_host_response(slot, + temp_sensor_command_get_readings(data)); return; case EC_LPC_COMMAND_PWM_GET_FAN_RPM: lpc_send_host_response(slot, pwm_command_get_fan_rpm(data)); return; case EC_LPC_COMMAND_PWM_SET_FAN_TARGET_RPM: - lpc_send_host_response(slot, pwm_command_set_fan_target_rpm(data)); + lpc_send_host_response(slot, + pwm_command_set_fan_target_rpm(data)); + return; + case EC_LPC_COMMAND_PWM_GET_KEYBOARD_BACKLIGHT: + lpc_send_host_response(slot, + pwm_command_get_keyboard_backlight(data)); + return; + case EC_LPC_COMMAND_PWM_SET_KEYBOARD_BACKLIGHT: + lpc_send_host_response(slot, + pwm_command_set_keyboard_backlight(data)); return; case EC_LPC_COMMAND_USB_CHARGE_SET_MODE: lpc_send_host_response(slot, usb_charge_command_set_mode(data)); diff --git a/common/pwm_commands.c b/common/pwm_commands.c index 7581fe56ba..7f30af8461 100644 --- a/common/pwm_commands.c +++ b/common/pwm_commands.c @@ -1,9 +1,9 @@ -/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -/* PWM module for Chrome EC */ +/* PWM host commands for Chrome EC */ #include "pwm.h" #include "pwm_commands.h" @@ -22,6 +22,7 @@ enum lpc_status pwm_command_get_fan_rpm(uint8_t *data) return EC_LPC_STATUS_SUCCESS; } + enum lpc_status pwm_command_set_fan_target_rpm(uint8_t *data) { struct lpc_params_pwm_set_fan_target_rpm *p = @@ -30,3 +31,23 @@ enum lpc_status pwm_command_set_fan_target_rpm(uint8_t *data) pwm_set_fan_target_rpm(p->rpm); return EC_LPC_STATUS_SUCCESS; } + + +enum lpc_status pwm_command_get_keyboard_backlight(uint8_t *data) +{ + struct lpc_response_pwm_get_keyboard_backlight *r = + (struct lpc_response_pwm_get_keyboard_backlight *)data; + + r->percent = pwm_get_keyboard_backlight(); + return EC_LPC_STATUS_SUCCESS; +} + + +enum lpc_status pwm_command_set_keyboard_backlight(uint8_t *data) +{ + struct lpc_params_pwm_set_keyboard_backlight *p = + (struct lpc_params_pwm_set_keyboard_backlight *)data; + + pwm_set_keyboard_backlight(p->percent); + return EC_LPC_STATUS_SUCCESS; +} diff --git a/include/lpc_commands.h b/include/lpc_commands.h index 28acb4f6c1..6a2bf099ed 100644 --- a/include/lpc_commands.h +++ b/include/lpc_commands.h @@ -222,6 +222,17 @@ struct lpc_params_pwm_set_fan_target_rpm { uint32_t rpm; } __attribute__ ((packed)); +/* Get keyboard backlight */ +#define EC_LPC_COMMAND_PWM_GET_KEYBOARD_BACKLIGHT 0x22 +struct lpc_response_pwm_get_keyboard_backlight { + uint8_t percent; +} __attribute__ ((packed)); + +/* Set keyboard backlight */ +#define EC_LPC_COMMAND_PWM_SET_KEYBOARD_BACKLIGHT 0x23 +struct lpc_params_pwm_set_keyboard_backlight { + uint8_t percent; +} __attribute__ ((packed)); /*****************************************************************************/ /* Temperature sensor commands */ diff --git a/include/pwm.h b/include/pwm.h index 50534f2434..ff76c89744 100644 --- a/include/pwm.h +++ b/include/pwm.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -19,6 +19,9 @@ int pwm_get_fan_rpm(void); /* Sets the target fan RPM. Pass -1 to set fan to maximum. */ int pwm_set_fan_target_rpm(int rpm); +/* Gets the keyboard backlight percentage (0=off, 100=max). */ +int pwm_get_keyboard_backlight(void); + /* Sets the keyboard backlight percentage (0=off, 100=max). */ int pwm_set_keyboard_backlight(int percent); diff --git a/include/pwm_commands.h b/include/pwm_commands.h index 31f397c6fe..8f2dbdfb0c 100644 --- a/include/pwm_commands.h +++ b/include/pwm_commands.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -14,6 +14,8 @@ /* Host command handlers. */ enum lpc_status pwm_command_get_fan_rpm(uint8_t *data); enum lpc_status pwm_command_set_fan_target_rpm(uint8_t *data); +enum lpc_status pwm_command_get_keyboard_backlight(uint8_t *data); +enum lpc_status pwm_command_set_keyboard_backlight(uint8_t *data); #endif /* __CROS_EC_PWM_COMMANDS_H */ diff --git a/util/ectool.c b/util/ectool.c index 127f357208..5fa124e743 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -40,6 +40,10 @@ const char help_str[] = " Prints current fan RPM\n" " pwmsetfanrpm <targetrpm>\n" " Set target fan RPM\n" + " pwmgetkblight\n" + " Prints current keyboard backlight percent\n" + " pwmsetkblight <percent>\n" + " Set keyboard backlight in percent\n" " usbchargemode <port> <mode>\n" " Set USB charging mode\n" "\n" @@ -508,6 +512,47 @@ int cmd_pwm_set_fan_rpm(int argc, char *argv[]) return 0; } +int cmd_pwm_get_keyboard_backlight(void) +{ + struct lpc_response_pwm_get_keyboard_backlight r; + int rv; + + rv = ec_command(EC_LPC_COMMAND_PWM_GET_KEYBOARD_BACKLIGHT, + NULL, 0, &r, sizeof(r)); + if (rv) + return rv; + + printf("Current keyboard backlight percent: %d\n", r.percent); + + return 0; +} + +int cmd_pwm_set_keyboard_backlight(int argc, char *argv[]) +{ + struct lpc_params_pwm_set_keyboard_backlight p; + char *e; + int rv; + + if (argc != 1) { + fprintf(stderr, + "Usage: pwmsetkblight <percent>\n"); + return -1; + } + p.percent = strtol(argv[0], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad percent.\n"); + return -1; + } + + rv = ec_command(EC_LPC_COMMAND_PWM_SET_KEYBOARD_BACKLIGHT, + &p, sizeof(p), NULL, 0); + if (rv) + return rv; + + printf("Keyboard backlight set.\n"); + return 0; +} + int cmd_usb_charge_set_mode(int argc, char *argv[]) { struct lpc_params_usb_charge_set_mode p; @@ -578,6 +623,10 @@ int main(int argc, char *argv[]) return cmd_pwm_get_fan_rpm(); if (!strcasecmp(argv[1], "pwmsetfanrpm")) return cmd_pwm_set_fan_rpm(argc - 2, argv + 2); + if (!strcasecmp(argv[1], "pwmgetkblight")) + return cmd_pwm_get_keyboard_backlight(); + if (!strcasecmp(argv[1], "pwmsetkblight")) + return cmd_pwm_set_keyboard_backlight(argc - 2, argv + 2); if (!strcasecmp(argv[1], "usbchargemode")) return cmd_usb_charge_set_mode(argc - 2, argv + 2); |