summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-02-21 12:51:42 -0800
committerRandall Spangler <rspangler@chromium.org>2012-02-21 12:59:44 -0800
commit12b12e53346a6c80e33e1f88beb620b01efac2d9 (patch)
tree7c0f7ae780a57e83d0c057cd82df49ebb1a14025
parent63c9ebaac95d0d95cae132533ca30708ea87a0f7 (diff)
downloadchrome-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.c22
-rw-r--r--common/host_command.c16
-rw-r--r--common/pwm_commands.c25
-rw-r--r--include/lpc_commands.h11
-rw-r--r--include/pwm.h5
-rw-r--r--include/pwm_commands.h4
-rw-r--r--util/ectool.c49
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);