diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-06 14:40:06 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-06 14:40:06 -0500 |
| commit | 12133258d7fe309b42a35677549c606b15a0822d (patch) | |
| tree | 1551465e4fd9b3409083c3e452405ba59da38f45 /drivers | |
| parent | 66e012f6188fb37b18c774277f34fb52278059c3 (diff) | |
| parent | cdd6a4a0e2ec590c30ad0e965fa08bf37461cadb (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.c | 22 |
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 | ||
| 576 | int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event) | 576 | int 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; |
