summaryrefslogtreecommitdiff
path: root/chip/stm32/host_command_common.c
diff options
context:
space:
mode:
authorBhanu Prakash Maiya <bhanumaiya@google.com>2020-04-30 15:26:52 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-05 10:06:44 +0000
commit86aacabcd3c2e496a43d291d9dee61e29edcc2d0 (patch)
tree5a87bbbee684ce95de718f654b0086abfa87daac /chip/stm32/host_command_common.c
parentbc96d7077db615d849d398115af76b7b85f63e01 (diff)
downloadchrome-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.c56
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 */