mfd: cros_ec: Add helper for event notifier.
authorGwendal Grignou <gwendal@chromium.org>
Tue, 16 May 2017 15:46:48 +0000 (17:46 +0200)
committerBenson Leung <bleung@chromium.org>
Fri, 16 Jun 2017 20:57:44 +0000 (13:57 -0700)
Add cros_ec_get_event() entry point to retrieve event within functions
called by the notifier.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Benson Leung <bleung@chromium.org>
drivers/platform/chrome/cros_ec_proto.c
include/linux/mfd/cros_ec.h

index ed5dee7..7428c2b 100644 (file)
@@ -494,3 +494,23 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev)
                return get_keyboard_state_event(ec_dev);
 }
 EXPORT_SYMBOL(cros_ec_get_next_event);
+
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev)
+{
+       u32 host_event;
+
+       BUG_ON(!ec_dev->mkbp_event_supported);
+
+       if (ec_dev->event_data.event_type != EC_MKBP_EVENT_HOST_EVENT)
+               return 0;
+
+       if (ec_dev->event_size != sizeof(host_event)) {
+               dev_warn(ec_dev->dev, "Invalid host event size\n");
+               return 0;
+       }
+
+       host_event = get_unaligned_le32(&ec_dev->event_data.data.host_event);
+
+       return host_event;
+}
+EXPORT_SYMBOL(cros_ec_get_host_event);
index 28baee6..b61b2e0 100644 (file)
@@ -300,6 +300,16 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev);
  */
 int cros_ec_get_next_event(struct cros_ec_device *ec_dev);
 
+/**
+ * cros_ec_get_host_event - Return a mask of event set by the EC.
+ *
+ * When MKBP is supported, when the EC raises an interrupt,
+ * We collect the events raised and call the functions in the ec notifier.
+ *
+ * This function is a helper to know which events are raised.
+ */
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
+
 /* sysfs stuff */
 extern struct attribute_group cros_ec_attr_group;
 extern struct attribute_group cros_ec_lightbar_attr_group;