]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform/chrome: cros_ec_proto: Upgrade get_next_event to v3
authorDaisuke Nojiri <dnojiri@chromium.org>
Tue, 4 Jun 2024 23:08:25 +0000 (16:08 -0700)
committerTzung-Bi Shih <tzungbi@kernel.org>
Wed, 5 Jun 2024 02:44:48 +0000 (02:44 +0000)
Upgrade EC_CMD_GET_NEXT_EVENT to version 3.

The max supported version will be v3. So, we speak v3 even if the EC
says it supports v4+.

Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Link: https://lore.kernel.org/r/20240604230837.2878737-1-dnojiri@chromium.org
[tzungbi: uint32_t -> u32 per suggested by checkpatch.pl]
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
drivers/platform/chrome/cros_ec_proto.c
include/linux/platform_data/cros_ec_proto.h

index 2ad1b8221ec0dc1883ed02dede8a521c7a3ee6f3..fe68be66ee988d4af017ad6b552258ec24706229 100644 (file)
@@ -684,7 +684,7 @@ EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
 
 static int get_next_event_xfer(struct cros_ec_device *ec_dev,
                               struct cros_ec_command *msg,
-                              struct ec_response_get_next_event_v1 *event,
+                              struct ec_response_get_next_event_v3 *event,
                               int version, uint32_t size)
 {
        int ret;
@@ -707,11 +707,12 @@ static int get_next_event(struct cros_ec_device *ec_dev)
 {
        struct {
                struct cros_ec_command msg;
-               struct ec_response_get_next_event_v1 event;
+               struct ec_response_get_next_event_v3 event;
        } __packed buf;
        struct cros_ec_command *msg = &buf.msg;
-       struct ec_response_get_next_event_v1 *event = &buf.event;
-       const int cmd_version = ec_dev->mkbp_event_supported - 1;
+       struct ec_response_get_next_event_v3 *event = &buf.event;
+       int cmd_version = ec_dev->mkbp_event_supported - 1;
+       u32 size;
 
        memset(msg, 0, sizeof(*msg));
        if (ec_dev->suspended) {
@@ -719,12 +720,20 @@ static int get_next_event(struct cros_ec_device *ec_dev)
                return -EHOSTDOWN;
        }
 
-       if (cmd_version == 0)
-               return get_next_event_xfer(ec_dev, msg, event, 0,
-                                 sizeof(struct ec_response_get_next_event));
+       if (cmd_version == 0) {
+               size = sizeof(struct ec_response_get_next_event);
+       } else if (cmd_version < 3) {
+               size = sizeof(struct ec_response_get_next_event_v1);
+       } else {
+               /*
+                * The max version we support is v3. So, we speak v3 even if the
+                * EC says it supports v4+.
+                */
+               cmd_version = 3;
+               size = sizeof(struct ec_response_get_next_event_v3);
+       }
 
-       return get_next_event_xfer(ec_dev, msg, event, cmd_version,
-                               sizeof(struct ec_response_get_next_event_v1));
+       return get_next_event_xfer(ec_dev, msg, event, cmd_version, size);
 }
 
 static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
index 1ddc52603f9ae27bd1d187ae8690ed072285b1b4..6e9225bdf903d1dfa47881aafb0c58c7c0cbd8a9 100644 (file)
@@ -185,7 +185,7 @@ struct cros_ec_device {
        bool host_sleep_v1;
        struct blocking_notifier_head event_notifier;
 
-       struct ec_response_get_next_event_v1 event_data;
+       struct ec_response_get_next_event_v3 event_data;
        int event_size;
        u32 host_event_wake_mask;
        u32 last_resume_result;