Input: synaptics-rmi4 - switch to reduced reporting mode
authorLucas Stach <l.stach@pengutronix.de>
Sat, 1 Feb 2020 01:38:19 +0000 (17:38 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 1 Feb 2020 01:39:22 +0000 (17:39 -0800)
When the distance thresholds are set the controller must be in reduced
reporting mode for them to have any effect on the interrupt generation.
This has a potentially large impact on the number of events the host
needs to process.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Andrew Duggan <aduggan@synaptics.com>
Link: https://lore.kernel.org/r/20200120111628.18376-1-l.stach@pengutronix.de
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/rmi4/rmi_f11.c

index bbf9ae9..6adea8a 100644 (file)
@@ -412,6 +412,10 @@ struct f11_2d_sensor_queries {
 
 /* Defs for Ctrl0. */
 #define RMI_F11_REPORT_MODE_MASK        0x07
+#define RMI_F11_REPORT_MODE_CONTINUOUS  (0 << 0)
+#define RMI_F11_REPORT_MODE_REDUCED     (1 << 0)
+#define RMI_F11_REPORT_MODE_FS_CHANGE   (2 << 0)
+#define RMI_F11_REPORT_MODE_FP_CHANGE   (3 << 0)
 #define RMI_F11_ABS_POS_FILT            (1 << 3)
 #define RMI_F11_REL_POS_FILT            (1 << 4)
 #define RMI_F11_REL_BALLISTICS          (1 << 5)
@@ -1195,6 +1199,16 @@ static int rmi_f11_initialize(struct rmi_function *fn)
                ctrl->ctrl0_11[RMI_F11_DELTA_Y_THRESHOLD] =
                        sensor->axis_align.delta_y_threshold;
 
+       /*
+        * If distance threshold values are set, switch to reduced reporting
+        * mode so they actually get used by the controller.
+        */
+       if (ctrl->ctrl0_11[RMI_F11_DELTA_X_THRESHOLD] ||
+           ctrl->ctrl0_11[RMI_F11_DELTA_Y_THRESHOLD]) {
+               ctrl->ctrl0_11[0] &= ~RMI_F11_REPORT_MODE_MASK;
+               ctrl->ctrl0_11[0] |= RMI_F11_REPORT_MODE_REDUCED;
+       }
+
        if (f11->sens_query.has_dribble) {
                switch (sensor->dribble) {
                case RMI_REG_STATE_OFF: