diff options
author | Bhanu Prakash Maiya <bhanumaiya@google.com> | 2020-04-30 15:26:52 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-05 10:06:44 +0000 |
commit | 86aacabcd3c2e496a43d291d9dee61e29edcc2d0 (patch) | |
tree | 5a87bbbee684ce95de718f654b0086abfa87daac /chip/stm32/host_command_common.c | |
parent | bc96d7077db615d849d398115af76b7b85f63e01 (diff) | |
download | chrome-ec-86aacabcd3c2e496a43d291d9dee61e29edcc2d0.tar.gz |
Bloonchipper: USART based transport layer for host command
1. USART host command layer in chip/stm32
2. Fix usart implementation in stm32
BUG=b:147849609
BRANCH=none
TEST=1. make BOARD=bloonchipper -j
2. usart request and response works on dragonclaw
Change-Id: Idd89d3e490f23aa528ecaf6510c13d16b405de13
Signed-off-by: Bhanu Prakash Maiya <bhanumaiya@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2190531
Tested-by: Bhanu Prakash Maiya <bhanumaiya@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Reviewed-by: Craig Hesling <hesling@chromium.org>
Commit-Queue: Bhanu Prakash Maiya <bhanumaiya@chromium.org>
Auto-Submit: Bhanu Prakash Maiya <bhanumaiya@chromium.org>
Diffstat (limited to 'chip/stm32/host_command_common.c')
-rw-r--r-- | chip/stm32/host_command_common.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/chip/stm32/host_command_common.c b/chip/stm32/host_command_common.c new file mode 100644 index 0000000000..f1d5a0f103 --- /dev/null +++ b/chip/stm32/host_command_common.c @@ -0,0 +1,56 @@ +/* Copyright 2020 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. + */ + +#include "common.h" +#include "fpsensor_detect.h" +#include "host_command.h" +#include "spi.h" +#include "usart_host_command.h" + +#ifndef CONFIG_I2C_SLAVE + +/* Store current transport type */ +static enum fp_transport_type curr_transport_type = FP_TRANSPORT_TYPE_UNKNOWN; + +/* + * Get protocol information + */ +static enum ec_status host_command_protocol_info(struct host_cmd_handler_args + *args) +{ + enum ec_status ret_status = EC_RES_INVALID_COMMAND; + + /* + * If FP sensor task is enabled, read transport type from TRANSPORT_SEL + * bootstrap pin for the first time this function is called. + */ + if ((IS_ENABLED(HAS_TASK_FPSENSOR)) && + (curr_transport_type == FP_TRANSPORT_TYPE_UNKNOWN)) { + curr_transport_type = get_fp_transport_type(); + } + + /* + * Transport select is only enabled on boards with fp sensor tasks. + * If fp sensor task is enabled, transport is USART and + * host command layer is present, call usart_get_protocol. + * If fp sensor task is enabled and transport is SPI or else if only + * spi layer is enabled on non fp boards, call spi_get_protocol_info. + */ + if (IS_ENABLED(HAS_TASK_FPSENSOR) && + IS_ENABLED(CONFIG_USART_HOST_COMMAND) && + curr_transport_type == FP_TRANSPORT_TYPE_UART) + ret_status = usart_get_protocol_info(args); + else if (IS_ENABLED(CONFIG_SPI) || + (IS_ENABLED(HAS_TASK_FPSENSOR) && + curr_transport_type == FP_TRANSPORT_TYPE_SPI)) + ret_status = spi_get_protocol_info(args); + + return ret_status; +} +DECLARE_HOST_COMMAND(EC_CMD_GET_PROTOCOL_INFO, + host_command_protocol_info, + EC_VER_MASK(0)); + +#endif /* CONFIG_I2C_SLAVE */ |