diff options
-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) | |||
494 | return get_keyboard_state_event(ec_dev); | 494 | return get_keyboard_state_event(ec_dev); |
495 | } | 495 | } |
496 | EXPORT_SYMBOL(cros_ec_get_next_event); | 496 | EXPORT_SYMBOL(cros_ec_get_next_event); |
497 | |||
498 | u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev) | ||
499 | { | ||
500 | u32 host_event; | ||
501 | |||
502 | BUG_ON(!ec_dev->mkbp_event_supported); | ||
503 | |||
504 | if (ec_dev->event_data.event_type != EC_MKBP_EVENT_HOST_EVENT) | ||
505 | return 0; | ||
506 | |||
507 | if (ec_dev->event_size != sizeof(host_event)) { | ||
508 | dev_warn(ec_dev->dev, "Invalid host event size\n"); | ||
509 | return 0; | ||
510 | } | ||
511 | |||
512 | host_event = get_unaligned_le32(&ec_dev->event_data.data.host_event); | ||
513 | |||
514 | return host_event; | ||
515 | } | ||
516 | 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); | |||
300 | */ | 300 | */ |
301 | int cros_ec_get_next_event(struct cros_ec_device *ec_dev); | 301 | int cros_ec_get_next_event(struct cros_ec_device *ec_dev); |
302 | 302 | ||
303 | /** | ||
304 | * cros_ec_get_host_event - Return a mask of event set by the EC. | ||
305 | * | ||
306 | * When MKBP is supported, when the EC raises an interrupt, | ||
307 | * We collect the events raised and call the functions in the ec notifier. | ||
308 | * | ||
309 | * This function is a helper to know which events are raised. | ||
310 | */ | ||
311 | u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev); | ||
312 | |||
303 | /* sysfs stuff */ | 313 | /* sysfs stuff */ |
304 | extern struct attribute_group cros_ec_attr_group; | 314 | extern struct attribute_group cros_ec_attr_group; |
305 | extern struct attribute_group cros_ec_lightbar_attr_group; | 315 | extern struct attribute_group cros_ec_lightbar_attr_group; |