diff options
author | Randall Spangler <rspangler@chromium.org> | 2017-08-17 12:02:45 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-08-23 17:01:21 -0700 |
commit | b91ff0a480304a8b831e943d7b62c528c16b2e83 (patch) | |
tree | ec7b5081c8c8862636446af1b38f1a3f6fc719ab /board/cr50/rdd.c | |
parent | c592ced088d9a252d62081e083dd8659770b7b93 (diff) | |
download | chrome-ec-b91ff0a480304a8b831e943d7b62c528c16b2e83.tar.gz |
cr50: Refactor Rdd state machine
The code to mirror Rdd detect into CCD_MODE_L and handle keepalive is
now inside chip/g/rdd.c It uses a HOOK_SECOND state machine similar to
what's coming for EC/AP/Servo.
This also removes the explicit 'ccd enable' / 'ccd disable' commands,
since they'd be overridden by the HOOK_SECOND handler. If you need to
force CCD enabled, use 'ccd keepalive enable'.
BUG=b:64799106
BRANCH=cr50
TEST=With a CR50_DEV=1 images:
Disconnect CCD cable (pull RDCC1 and RDCC2 outside 0.2-2.0V)
gpioget --> CCD_MODE_L = 1
ccd --> CCD disabled
Connect CCD cable --> see 'Debug accessory connected'
gpioget --> CCD_MODE_L = 0
ccd --> CCD enabled
Briefly disconnect and reconnect CCD cable --> No debug output
gpioget --> CCD_MODE_L = 0
ccd --> CCD enabled
Disconnect CCD cable and wait a second --> 'disconnected'
gpioget --> CCD_MODE_L = 1
ccd --> CCD disabled
Force CCD_MODE_L = 0 externally, wait a second
gpioget --> CCD_MODE_L = 0
ccd --> CCD enabled
Stop forcing CCD_MODE_L externally, wait a second
gpioget --> CCD_MODE_L = 1
ccd --> CCD disabled
ccd keepalive enable
gpioget --> CCD_MODE_L = 0
ccd --> CCD enabled
ccd keepalive disable
gpioget --> CCD_MODE_L = 1
ccd --> CCD disabled
Change-Id: I65110b45e76f60390828e0fbbac8f36fc2cc9b37
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/619393
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'board/cr50/rdd.c')
-rw-r--r-- | board/cr50/rdd.c | 56 |
1 files changed, 3 insertions, 53 deletions
diff --git a/board/cr50/rdd.c b/board/cr50/rdd.c index 75c8a202ce..074ffac858 100644 --- a/board/cr50/rdd.c +++ b/board/cr50/rdd.c @@ -19,8 +19,6 @@ #define CPRINTS(format, args...) cprints(CC_USB, format, ## args) -static int keep_ccd_enabled; - struct uart_config { const char *name; enum device_type device; @@ -127,38 +125,11 @@ static void configure_ccd(int enable) CPRINTS("CCD is now %sabled.", enable ? "en" : "dis"); } -void rdd_attached(void) -{ - /* Change CCD_MODE_L to an output which follows the internal GPIO. */ - GWRITE(PINMUX, DIOM1_SEL, GC_PINMUX_GPIO0_GPIO5_SEL); - /* Indicate case-closed debug mode (active low) */ - gpio_set_flags(GPIO_CCD_MODE_L, GPIO_OUT_LOW); -} - -void rdd_detached(void) -{ - /* - * Done with case-closed debug mode, therefore re-setup the CCD_MODE_L - * pin as an input only if CCD mode isn't being forced enabled. - * - * NOTE: A pull up is required on this pin, however it was already - * configured during the set up of the pinmux in gpio_pre_init(). The - * chip-specific GPIO module will ignore any pull up/down configuration - * anyways. - */ - if (!keep_ccd_enabled) - gpio_set_flags(GPIO_CCD_MODE_L, GPIO_INPUT); -} - static void rdd_check_pin(void) { /* The CCD mode pin is active low. */ int enable = !gpio_get_level(GPIO_CCD_MODE_L); - /* Keep CCD enabled if it's being forced enabled. */ - if (keep_ccd_enabled) - enable = 1; - if (enable == rdd_is_connected()) return; @@ -190,12 +161,6 @@ static void rdd_ccd_change_hook(void) } DECLARE_HOOK(HOOK_CCD_CHANGE, rdd_ccd_change_hook, HOOK_PRIO_DEFAULT); -static void clear_keepalive(void) -{ - keep_ccd_enabled = 0; - ccprintf("Cleared CCD keepalive\n"); -} - static int command_ccd(int argc, char **argv) { int val; @@ -215,34 +180,19 @@ static int command_ccd(int argc, char **argv) else usb_i2c_board_disable(); } else if (!strcasecmp("keepalive", argv[1])) { + force_rdd_detect(val); if (val) { - /* Make sure ccd is enabled */ - if (!rdd_is_connected()) - rdd_attached(); - - keep_ccd_enabled = 1; ccprintf("Warning CCD will remain " "enabled until it is " "explicitly disabled.\n"); - } else { - clear_keepalive(); - } - } else if (argc == 2) { - if (val) { - rdd_attached(); - } else { - if (keep_ccd_enabled) - clear_keepalive(); - - rdd_detached(); } } else return EC_ERROR_PARAM1; } ccprintf("CCD: %s\n", - keep_ccd_enabled ? "forced enable" : - rdd_is_connected() ? "enabled" : "disabled"); + rdd_detect_is_forced() ? "forced enable" : + rdd_is_connected() ? "enabled" : "disabled"); ccprintf("AP UART: %s\n", uartn_is_enabled(UART_AP) ? uart_tx_is_connected(UART_AP) ? "RX+TX" : "RX" : "disabled"); |