Re: [PATCH] Input: Do not add SYN_REPORT in between a single packet data
flat view
From: Aniroop Mathur <hidden>
Date: 2016-05-11 14:10:19
Hello Mr. Torokhov, Would you please provide update for this patch? As you can notice it is really pending for a long time, I'll be grateful if you could update and conclude it quickly. Thank you. BR, Aniroop Mathur On Wed, May 4, 2016 at 9:12 PM, Aniroop Mathur [off-list ref] wrote:
quoted hunk ↗ jump to hunk
As mentioned in documentation, SYN_REPORT should be used to separate two packets and should not be inserted in between a single packet as otherwise with multiple SYN_REPORT in a single packet, input reader would not be able to know when the packet ended really. Documentation snippet: * SYN_REPORT: - Used to synchronize and separate events into packets of input data changes occurring at the same moment in time. For example, motion of a mouse may set the REL_X and REL_Y values for one motion, then emit a SYN_REPORT. The next motion will emit more REL_X and REL_Y values and send another SYN_REPORT. Signed-off-by: Aniroop Mathur <redacted> --- drivers/input/input.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)diff --git a/drivers/input/input.c b/drivers/input/input.c index 8806059..5b0b1ae 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c@@ -401,12 +401,14 @@ static void input_handle_event(struct input_dev *dev, if (dev->num_vals >= 2) input_pass_values(dev, dev->vals, dev->num_vals); dev->num_vals = 0; - } else if (dev->num_vals >= dev->max_vals - 2) { - dev->vals[dev->num_vals++] = input_value_sync; - input_pass_values(dev, dev->vals, dev->num_vals); - dev->num_vals = 0; + } else if (dev->num_vals >= dev->max_vals - 1) { + /* Pass all events except the newest event in order to + * not suppress the immediate EV_SYN/SYN_REPORT event. + */ + input_pass_values(dev, dev->vals, dev->num_vals - 1); + dev->vals[0] = dev->vals[dev->num_vals - 1]; + dev->num_vals = 1; } - } /** --2.6.2