summaryrefslogtreecommitdiff
path: root/board/cr50/rdd.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2017-08-17 12:02:45 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-08-23 17:01:21 -0700
commitb91ff0a480304a8b831e943d7b62c528c16b2e83 (patch)
treeec7b5081c8c8862636446af1b38f1a3f6fc719ab /board/cr50/rdd.c
parentc592ced088d9a252d62081e083dd8659770b7b93 (diff)
downloadchrome-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.c56
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");