aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/rmi.h
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2016-12-02 17:48:51 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2016-12-02 17:51:31 -0800
commitb908d3cd812abe3f4a74d7550bbf0a8cbcfbe6ed (patch)
treeee455c7a27dc2dbb32a0b5c6689998fc90597e1d /include/linux/rmi.h
parentInput: synaptics-rmi4 - f03 - grab data passed by transport device (diff)
downloadlinux-dev-b908d3cd812abe3f4a74d7550bbf0a8cbcfbe6ed.tar.xz
linux-dev-b908d3cd812abe3f4a74d7550bbf0a8cbcfbe6ed.zip
Input: synaptics-rmi4 - allow to add attention data
The HID implementation of RMI4 provides the data during the interrupt (in the input report). We need to provide a way for this transport driver to provide the attention data while calling an IRQ. We use a fifo in rmi_core to not lose any incoming event. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Reviewed-by: Andrew Duggan <aduggan@synaptics.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'include/linux/rmi.h')
-rw-r--r--include/linux/rmi.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/rmi.h b/include/linux/rmi.h
index 7780e40a2573..1d4865621493 100644
--- a/include/linux/rmi.h
+++ b/include/linux/rmi.h
@@ -13,6 +13,7 @@
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/input.h>
+#include <linux/kfifo.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/types.h>
@@ -331,6 +332,12 @@ struct rmi_device {
};
+struct rmi4_attn_data {
+ unsigned long irq_status;
+ size_t size;
+ void *data;
+};
+
struct rmi_driver_data {
struct list_head function_list;
@@ -357,11 +364,15 @@ struct rmi_driver_data {
bool enabled;
struct mutex enabled_mutex;
+ DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16);
};
int rmi_register_transport_device(struct rmi_transport_dev *xport);
void rmi_unregister_transport_device(struct rmi_transport_dev *xport);
+void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
+ void *data, size_t size);
+
int rmi_driver_suspend(struct rmi_device *rmi_dev, bool enable_wake);
int rmi_driver_resume(struct rmi_device *rmi_dev, bool clear_wake);
#endif