diff options
author | Stefan Adolfsson <sadolfsson@google.com> | 2018-05-04 05:17:40 +0200 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-06-19 20:02:10 +0000 |
commit | 63aaa1ab2b166ed48e5a52d54ba6d3714660db8e (patch) | |
tree | febd8919b791d6c75da2d205f6f09ac1a7e9966e | |
parent | 6d53bce60b499d17e1337452bafaed2764d51d74 (diff) | |
download | chrome-ec-63aaa1ab2b166ed48e5a52d54ba6d3714660db8e.tar.gz |
npcx: CEC: Get/set logical address
Logical address selection is best done from the AP since
it depends on what kind of CEC device type we want to be.
Signed-off-by: Stefan Adolfsson <sadolfsson@chromium.org>
BUG=b:76467407
BRANCH=none
TEST=Set address to different values and verify that it
only receives messages on that address (or broadcast)
CQ-DEPEND=CL:1030229
Reviewed-on: https://chromium-review.googlesource.com/1030370
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Change-Id: Ia5ef182b22f2345831caaa7f29cc9f009f932c99
Reviewed-on: https://chromium-review.googlesource.com/1055829
Tested-by: Stefan Adolfsson <sadolfsson@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Commit-Queue: Stefan Adolfsson <sadolfsson@chromium.org>
-rw-r--r-- | chip/npcx/cec.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/chip/npcx/cec.c b/chip/npcx/cec.c index 566e9a0ab6..6e152714a9 100644 --- a/chip/npcx/cec.c +++ b/chip/npcx/cec.c @@ -259,9 +259,8 @@ static int cap_charge; * However, the AP is responsible for writing the initiator address * on writes. UINT32_MAX means means that the address hasn't been * set by the AP yet. - * TODO(sadolfsson): Make it possible to change this using cecset */ -static uint8_t cec_addr = 5; +static uint8_t cec_addr = UINT8_MAX; /* Events to send to AP */ static uint32_t cec_events; @@ -1045,6 +1044,17 @@ static int cec_set_enable(uint8_t enable) return EC_RES_SUCCESS; } +static int cec_set_logical_addr(uint8_t logical_addr) +{ + if (logical_addr >= CEC_BROADCAST_ADDR) + return EC_RES_INVALID_PARAM; + + cec_addr = logical_addr; + CPRINTF("CEC address set to: %u\n", cec_addr); + + return EC_RES_SUCCESS; +} + static int hc_cec_set(struct host_cmd_handler_args *args) { const struct ec_params_cec_set *params = args->params; @@ -1052,6 +1062,8 @@ static int hc_cec_set(struct host_cmd_handler_args *args) switch (params->cmd) { case CEC_CMD_ENABLE: return cec_set_enable(params->val); + case CEC_CMD_LOGICAL_ADDRESS: + return cec_set_logical_addr(params->val); } return EC_RES_INVALID_PARAM; @@ -1068,6 +1080,9 @@ static int hc_cec_get(struct host_cmd_handler_args *args) case CEC_CMD_ENABLE: response->val = cec_state == CEC_STATE_DISABLED ? 0 : 1; break; + case CEC_CMD_LOGICAL_ADDRESS: + response->val = cec_addr; + break; default: return EC_RES_INVALID_PARAM; } |