diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2017-05-16 17:46:48 +0200 |
---|---|---|
committer | Benson Leung <bleung@chromium.org> | 2017-06-16 13:57:44 -0700 |
commit | 68c35ea25bdd4ad10445c4c02f7d48b3dccab8cc (patch) | |
tree | ef13d2554f06434b37f871311168228aa95594bf | |
parent | 32c1431eea4881a6b17bd7c639315010aeefa452 (diff) | |
download | linux-stable-68c35ea25bdd4ad10445c4c02f7d48b3dccab8cc.tar.gz linux-stable-68c35ea25bdd4ad10445c4c02f7d48b3dccab8cc.tar.bz2 linux-stable-68c35ea25bdd4ad10445c4c02f7d48b3dccab8cc.zip |
mfd: cros_ec: Add helper for event notifier.
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>
-rw-r--r-- | drivers/platform/chrome/cros_ec_proto.c | 20 | ||||
-rw-r--r-- | include/linux/mfd/cros_ec.h | 10 |
2 files changed, 30 insertions, 0 deletions
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c index ed5dee744c74..7428c2b965bb 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -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); diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h index 28baee63eaf6..b61b2e013698 100644 --- a/include/linux/mfd/cros_ec.h +++ b/include/linux/mfd/cros_ec.h @@ -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; |