platform/chrome: cros_ec_chardev: Add a poll handler to receive MKBP events
authorEnric Balletbo i Serra <enric.balletbo@collabora.com>
Mon, 2 Sep 2019 16:08:48 +0000 (18:08 +0200)
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>
Thu, 12 Sep 2019 14:20:54 +0000 (16:20 +0200)
commit96a0a80738461d6d2421ae64ee9990b702efd2a6
tree2e76f435ee7540f036e20cda22f6197a1c29bce0
parent71cddb7097e2b0feb855d7fd7d59afd12cbee4bb
platform/chrome: cros_ec_chardev: Add a poll handler to receive MKBP events

Allow to poll on the cros_ec device to receive the MKBP events.

The /dev/cros_[ec|fp|..] file operations now implements the poll
operation. The userspace can now receive specific MKBP events by doing
the following:

- Open the /dev/cros_XX file.
- Call the CROS_EC_DEV_IOCEVENTMASK ioctl with the bitmap of the MKBP
  events it wishes to receive as argument.
- Poll on the file descriptor.
- When it gets POLLIN, do a read on the file descriptor, the first
  queued event will be returned (using the struct
  ec_response_get_next_event format: one byte of event type, then
  the payload).

The read() operation returns at most one event even if there are several
queued, and it might be truncated if the buffer is smaller than the
event (but the caller should know the maximum size of the events it is
reading).

read() used to return the EC version string, it still does it when no
event mask or an empty event is set for backward compatibility (despite
nobody really using this feature).

This will be used, for example, by the userspace daemon to receive and
treat the EC_MKBP_EVENT_FINGERPRINT sent by the FP MCU.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
drivers/platform/chrome/cros_ec_chardev.c
include/linux/platform_data/cros_ec_chardev.h