lid_switch: Support forced lid open

Factory test process need lid switch no function or keep lid opened

BUG=chrome-os-partner:33304
BRANCH=paine,yuna
TEST=Run command "ectool forcelidopen 1" and "reboot". Then lid close
quickly, the system boot as lid opened.
Deault value  or run command "ectool forcelidopen 0" make the device normal.

Change-Id: I94527b7ef7f9efe779c6b86f3eab651f99af6000
Signed-off-by: Henry Hsu <Henry.Hsu@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/230180
Reviewed-by: Mohammed Habibulla <moch@chromium.org>
Reviewed-by: Bowgo Tsai <bowgotsai@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Shawn Nematbakhsh <shawnn@chromium.org>
Tested-by: Shawn Nematbakhsh <shawnn@chromium.org>
This commit is contained in:
Henry Hsu
2014-10-01 12:32:12 +08:00
committed by chrome-internal-fetch
parent e96afe490f
commit 89442037be
3 changed files with 56 additions and 1 deletions

View File

@@ -21,6 +21,7 @@
#define LID_DEBOUNCE_US (30 * MSEC) /* Debounce time for lid switch */
static int debounced_lid_open; /* Debounced lid state */
static int forced_lid_open; /* Forced lid open */
/**
* Get raw lid switch state.
@@ -29,7 +30,7 @@ static int debounced_lid_open; /* Debounced lid state */
*/
static int raw_lid_open(void)
{
return gpio_get_level(GPIO_LID_OPEN) ? 1 : 0;
return (forced_lid_open || gpio_get_level(GPIO_LID_OPEN)) ? 1 : 0;
}
/**
@@ -125,3 +126,21 @@ DECLARE_CONSOLE_COMMAND(lidclose, command_lidclose,
NULL,
"Simulate lid close",
NULL);
/**
* Host command to enable/disable lid opened.
*/
static int hc_force_lid_open(struct host_cmd_handler_args *args)
{
const struct ec_params_force_lid_open *p = args->params;
/* Override lid open if necessary */
forced_lid_open = p->enabled ? 1 : 0;
/* Make this take effect immediately; no debounce time */
hook_call_deferred(lid_change_deferred, 0);
return EC_RES_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_FORCE_LID_OPEN, hc_force_lid_open,
EC_VER_MASK(0));

View File

@@ -1465,6 +1465,16 @@ struct ec_response_motion_sense {
};
} __packed;
/*****************************************************************************/
/* Force lid open command */
/* Make lid event always open */
#define EC_CMD_FORCE_LID_OPEN 0x2c
struct ec_params_force_lid_open {
uint8_t enabled;
} __packed;
/*****************************************************************************/
/* USB charging control commands */

View File

@@ -104,6 +104,8 @@ const char help_str[] =
" Reads from EC flash to a file\n"
" flashwrite <offset> <infile>\n"
" Writes to EC flash from a file\n"
" forcelidopen <enable>\n"
" Forces the lid switch to open position\n"
" gpioget <GPIO name>\n"
" Get the value of GPIO signal\n"
" gpioset <GPIO name>\n"
@@ -5131,6 +5133,29 @@ struct command {
int (*handler)(int argc, char *argv[]);
};
int cmd_force_lid_open(int argc, char *argv[])
{
struct ec_params_force_lid_open p;
char *e;
int rv;
if (argc != 2) {
fprintf(stderr, "Usage: %s <0|1>\n", argv[0]);
return -1;
}
p.enabled = strtol(argv[1], &e, 0);
if (e && *e) {
fprintf(stderr, "Bad value.\n");
return -1;
}
rv = ec_command(EC_CMD_FORCE_LID_OPEN, 0, &p, sizeof(p), NULL, 0);
if (rv < 0)
return rv;
printf("Success.\n");
return 0;
}
/* NULL-terminated list of commands */
const struct command commands[] = {
{"extpwrcurrentlimit", cmd_ext_power_current_limit},
@@ -5164,6 +5189,7 @@ const struct command commands[] = {
{"flashwrite", cmd_flash_write},
{"flashinfo", cmd_flash_info},
{"flashpd", cmd_flash_pd},
{"forcelidopen", cmd_force_lid_open},
{"gpioget", cmd_gpio_get},
{"gpioset", cmd_gpio_set},
{"hangdetect", cmd_hang_detect},