aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-01-06 14:40:06 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2019-01-06 14:40:06 -0500
commit12133258d7fe309b42a35677549c606b15a0822d (patch)
tree1551465e4fd9b3409083c3e452405ba59da38f45 /drivers
parent66e012f6188fb37b18c774277f34fb52278059c3 (diff)
parentcdd6a4a0e2ec590c30ad0e965fa08bf37461cadb (diff)
Merge tag 'tag-chrome-platform-for-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/bleung/chrome-platform
Pull chrome platform updates from Benson Leung: - Changes for EC_MKBP_EVENT_SENSOR_FIFO handling. - Also, maintainership changes. Olofj out, Enric balletbo in. * tag 'tag-chrome-platform-for-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/bleung/chrome-platform: MAINTAINERS: add maintainers for ChromeOS EC sub-drivers MAINTAINERS: platform/chrome: Add Enric as a maintainer MAINTAINERS: platform/chrome: remove myself as maintainer platform/chrome: don't report EC_MKBP_EVENT_SENSOR_FIFO as wakeup platform/chrome: straighten out cros_ec_get_{next,host}_event() error codes
Diffstat (limited to 'drivers')
-rw-r--r--drivers/platform/chrome/cros_ec_proto.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index b6fd4838f60f..cc7baf0ecb3c 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -575,12 +575,13 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
575 575
576int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event) 576int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event)
577{ 577{
578 u8 event_type;
578 u32 host_event; 579 u32 host_event;
579 int ret; 580 int ret;
580 581
581 if (!ec_dev->mkbp_event_supported) { 582 if (!ec_dev->mkbp_event_supported) {
582 ret = get_keyboard_state_event(ec_dev); 583 ret = get_keyboard_state_event(ec_dev);
583 if (ret < 0) 584 if (ret <= 0)
584 return ret; 585 return ret;
585 586
586 if (wake_event) 587 if (wake_event)
@@ -590,15 +591,26 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event)
590 } 591 }
591 592
592 ret = get_next_event(ec_dev); 593 ret = get_next_event(ec_dev);
593 if (ret < 0) 594 if (ret <= 0)
594 return ret; 595 return ret;
595 596
596 if (wake_event) { 597 if (wake_event) {
598 event_type = ec_dev->event_data.event_type;
597 host_event = cros_ec_get_host_event(ec_dev); 599 host_event = cros_ec_get_host_event(ec_dev);
598 600
599 /* Consider non-host_event as wake event */ 601 /*
600 *wake_event = !host_event || 602 * Sensor events need to be parsed by the sensor sub-device.
601 !!(host_event & ec_dev->host_event_wake_mask); 603 * Defer them, and don't report the wakeup here.
604 */
605 if (event_type == EC_MKBP_EVENT_SENSOR_FIFO)
606 *wake_event = false;
607 /* Masked host-events should not count as wake events. */
608 else if (host_event &&
609 !(host_event & ec_dev->host_event_wake_mask))
610 *wake_event = false;
611 /* Consider all other events as wake events. */
612 else
613 *wake_event = true;
602 } 614 }
603 615
604 return ret; 616 return ret;