summaryrefslogtreecommitdiff
path: root/common/keyboard_mkbp.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /common/keyboard_mkbp.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-quickfix-14526.91.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'common/keyboard_mkbp.c')
-rw-r--r--common/keyboard_mkbp.c224
1 files changed, 0 insertions, 224 deletions
diff --git a/common/keyboard_mkbp.c b/common/keyboard_mkbp.c
deleted file mode 100644
index d8e9f8d909..0000000000
--- a/common/keyboard_mkbp.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright 2013 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.
- *
- * MKBP keyboard protocol
- */
-
-#include "chipset.h"
-#include "common.h"
-#include "host_command.h"
-#include "keyboard_config.h"
-#include "keyboard_mkbp.h"
-#include "keyboard_protocol.h"
-#include "keyboard_raw.h"
-#include "keyboard_scan.h"
-#include "keyboard_test.h"
-#include "mkbp_event.h"
-#include "mkbp_fifo.h"
-#include "task.h"
-#include "util.h"
-
-/* Console output macros */
-#define CPUTS(outstr) cputs(CC_KEYBOARD, outstr)
-#define CPRINTS(format, args...) cprints(CC_KEYBOARD, format, ## args)
-
-/* Changes to col,row here need to also be reflected in kernel.
- * drivers/input/mkbp.c ... see KEY_BATTERY.
- */
-#define BATTERY_KEY_COL 0
-#define BATTERY_KEY_ROW 7
-#define BATTERY_KEY_ROW_MASK BIT(BATTERY_KEY_ROW)
-
-#ifndef HAS_TASK_KEYSCAN
-#error "Task KEYSCAN has to be enabled for MKBP keyboard"
-#endif /* !defined(HAS_TASK_KEYSCAN) */
-
-/* Config for mkbp protocol; does not include fields from scan config */
-struct ec_mkbp_protocol_config {
- uint32_t valid_mask; /* valid fields */
- uint8_t flags; /* some flags (enum mkbp_config_flags) */
- uint8_t valid_flags; /* which flags are valid */
-
- /* maximum depth to allow for fifo (0 = no keyscan output) */
- uint8_t fifo_max_depth;
-} __packed;
-
-static struct ec_mkbp_protocol_config config = {
- .valid_mask = EC_MKBP_VALID_SCAN_PERIOD | EC_MKBP_VALID_POLL_TIMEOUT |
- EC_MKBP_VALID_MIN_POST_SCAN_DELAY |
- EC_MKBP_VALID_OUTPUT_SETTLE | EC_MKBP_VALID_DEBOUNCE_DOWN |
- EC_MKBP_VALID_DEBOUNCE_UP | EC_MKBP_VALID_FIFO_MAX_DEPTH,
- .valid_flags = EC_MKBP_FLAGS_ENABLE,
- .flags = EC_MKBP_FLAGS_ENABLE,
- .fifo_max_depth = FIFO_DEPTH,
-};
-
-/*****************************************************************************/
-/* Interface */
-
-void keyboard_clear_buffer(void)
-{
- mkbp_fifo_clear_keyboard();
-}
-
-test_mockable int mkbp_keyboard_add(const uint8_t *buffp)
-{
- /*
- * If the keyboard protocol is not enabled, don't save the state to
- * the FIFO or trigger an interrupt.
- */
- if (!(config.flags & EC_MKBP_FLAGS_ENABLE))
- return EC_SUCCESS;
-
- return mkbp_fifo_add((uint8_t)EC_MKBP_EVENT_KEY_MATRIX, buffp);
-}
-
-static int keyboard_get_next_event(uint8_t *out)
-{
- return mkbp_fifo_get_next_event(out, EC_MKBP_EVENT_KEY_MATRIX);
-}
-DECLARE_EVENT_SOURCE(EC_MKBP_EVENT_KEY_MATRIX, keyboard_get_next_event);
-
-void keyboard_send_battery_key(void)
-{
- uint8_t state[KEYBOARD_COLS_MAX];
-
- /* Copy debounced state and add battery pseudo-key */
- memcpy(state, keyboard_scan_get_state(), sizeof(state));
- state[BATTERY_KEY_COL] ^= BATTERY_KEY_ROW_MASK;
-
- /* Add to FIFO only if AP is on or else it will wake from suspend */
- if (chipset_in_state(CHIPSET_STATE_ON))
- mkbp_keyboard_add(state);
-}
-
-void clear_typematic_key(void)
-{ }
-
-static void set_keyscan_config(const struct ec_mkbp_config *src,
- struct ec_mkbp_protocol_config *dst,
- uint32_t valid_mask, uint8_t new_flags)
-{
- struct keyboard_scan_config *ksc = keyboard_scan_get_config();
-
- if (valid_mask & EC_MKBP_VALID_SCAN_PERIOD)
- ksc->scan_period_us = src->scan_period_us;
-
- if (valid_mask & EC_MKBP_VALID_POLL_TIMEOUT)
- ksc->poll_timeout_us = src->poll_timeout_us;
-
- if (valid_mask & EC_MKBP_VALID_MIN_POST_SCAN_DELAY) {
- /*
- * Key scanning is high priority, so we should require at
- * least 100us min delay here. Setting this to 0 will cause
- * watchdog events. Use 200 to be safe.
- */
- ksc->min_post_scan_delay_us =
- MAX(src->min_post_scan_delay_us, 200);
- }
-
- if (valid_mask & EC_MKBP_VALID_OUTPUT_SETTLE)
- ksc->output_settle_us = src->output_settle_us;
-
- if (valid_mask & EC_MKBP_VALID_DEBOUNCE_DOWN)
- ksc->debounce_down_us = src->debounce_down_us;
-
- if (valid_mask & EC_MKBP_VALID_DEBOUNCE_UP)
- ksc->debounce_up_us = src->debounce_up_us;
-
- /*
- * If we just enabled key scanning, kick the task so that it will
- * fall out of the task_wait_event() in keyboard_scan_task().
- */
- if ((new_flags & EC_MKBP_FLAGS_ENABLE) &&
- !(dst->flags & EC_MKBP_FLAGS_ENABLE))
- task_wake(TASK_ID_KEYSCAN);
-}
-
-static void get_keyscan_config(struct ec_mkbp_config *dst)
-{
- const struct keyboard_scan_config *ksc = keyboard_scan_get_config();
-
- /* Copy fields from keyscan config to mkbp config */
- dst->output_settle_us = ksc->output_settle_us;
- dst->debounce_down_us = ksc->debounce_down_us;
- dst->debounce_up_us = ksc->debounce_up_us;
- dst->scan_period_us = ksc->scan_period_us;
- dst->min_post_scan_delay_us = ksc->min_post_scan_delay_us;
- dst->poll_timeout_us = ksc->poll_timeout_us;
-}
-
-/**
- * Copy keyscan configuration from one place to another according to flags
- *
- * This is like a structure copy, except that only selected fields are
- * copied.
- *
- * @param src Source config
- * @param dst Destination config
- * @param valid_mask Bits representing which fields to copy - each bit is
- * from enum mkbp_config_valid
- * @param valid_flags Bit mask controlling flags to copy. Any 1 bit means
- * that the corresponding bit in src->flags is copied
- * over to dst->flags
- */
-static void keyscan_copy_config(const struct ec_mkbp_config *src,
- struct ec_mkbp_protocol_config *dst,
- uint32_t valid_mask, uint8_t valid_flags)
-{
- uint8_t new_flags;
-
- if (valid_mask & EC_MKBP_VALID_FIFO_MAX_DEPTH) {
- /* Validity check for fifo depth */
- dst->fifo_max_depth = MIN(src->fifo_max_depth,
- FIFO_DEPTH);
- }
-
- new_flags = dst->flags & ~valid_flags;
- new_flags |= src->flags & valid_flags;
-
- set_keyscan_config(src, dst, valid_mask, new_flags);
- dst->flags = new_flags;
-}
-
-static enum ec_status
-host_command_mkbp_set_config(struct host_cmd_handler_args *args)
-{
- const struct ec_params_mkbp_set_config *req = args->params;
-
- keyscan_copy_config(&req->config, &config,
- config.valid_mask & req->config.valid_mask,
- config.valid_flags & req->config.valid_flags);
-
- mkbp_fifo_depth_update(config.fifo_max_depth);
-
- return EC_RES_SUCCESS;
-}
-DECLARE_HOST_COMMAND(EC_CMD_MKBP_SET_CONFIG,
- host_command_mkbp_set_config,
- EC_VER_MASK(0));
-
-static enum ec_status
-host_command_mkbp_get_config(struct host_cmd_handler_args *args)
-{
- struct ec_response_mkbp_get_config *resp = args->response;
- struct ec_mkbp_config *dst = &resp->config;
-
- memcpy(&resp->config, &config, sizeof(config));
-
- /* Copy fields from mkbp protocol config to mkbp config */
- dst->valid_mask = config.valid_mask;
- dst->flags = config.flags;
- dst->valid_flags = config.valid_flags;
- dst->fifo_max_depth = config.fifo_max_depth;
-
- get_keyscan_config(dst);
-
- args->response_size = sizeof(*resp);
-
- return EC_RES_SUCCESS;
-}
-DECLARE_HOST_COMMAND(EC_CMD_MKBP_GET_CONFIG,
- host_command_mkbp_get_config,
- EC_VER_MASK(0));