Hi Joe, On Fri, Oct 11, 2013 at 12:30:43PM -0400, Joseph Salisbury wrote: > On 09/30/2013 04:12 PM, Kamal Mostafa wrote: > > On Tue, 2013-09-24 at 11:44 -0400, Joseph Salisbury wrote: > >> BugLink: http://bugs.launchpad.net/bugs/1229361 > >> > >> This patch sets the finger count to 0 in the case of palm contact. > >> > >> Signed-off-by: Joseph Salisbury <joseph.salisbury@xxxxxxxxxxxxx> > >> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> (maintainer:INPUT (KEYBOARD,...,commit_signer:2/2=100%) > >> Cc: Henrik Rydberg <rydberg@xxxxxxxxxxx> (maintainer:INPUT MULTITOUCH...) > >> Cc: Kamal Mostafa <kamal@xxxxxxxxxxxxx> (commit_signer:2/2=100%) > >> Cc: Dudley Du <dudl@xxxxxxxxxxx> (commit_signer:2/2=100%) > >> Cc: Kyle Fazzari <git@xxxxxxxxxxxxxxxxx> (commit_signer:1/2=50%) > >> Cc: Tim Gardner <tim.gardner@xxxxxxxxxxxxx> (commit_signer:1/2=50%) > >> Cc: linux-input@xxxxxxxxxxxxxxx (open list:INPUT (KEYBOARD,...) > >> Cc: linux-kernel@xxxxxxxxxxxxxxx (open list) > >> Cc: stable@xxxxxxxxxxxxxxx > > This patch works fine: eliminates stream of junk driver messages with no > > ill effects. > > > > Tested-by: Kamal Mostafa <kamal@xxxxxxxxxxxxx> > > > > -Kamal > > > > > >> --- > >> drivers/input/mouse/cypress_ps2.c | 4 ++-- > >> 1 file changed, 2 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/input/mouse/cypress_ps2.c b/drivers/input/mouse/cypress_ps2.c > >> index 45b3eda..95b2c40 100644 > >> --- a/drivers/input/mouse/cypress_ps2.c > >> +++ b/drivers/input/mouse/cypress_ps2.c > >> @@ -441,7 +441,7 @@ static int cypress_get_finger_count(unsigned char header_byte) > >> case 2: return 5; > >> default: > >> /* Invalid contact (e.g. palm). Ignore it. */ > >> - return -1; > >> + return 0; > >> } > >> } > >> > >> @@ -460,7 +460,7 @@ static int cypress_parse_packet(struct psmouse *psmouse, > >> > >> contact_cnt = cypress_get_finger_count(header_byte); > >> > >> - if (contact_cnt < 0) /* e.g. palm detect */ > >> + if (contact_cnt < 0) > >> return -EINVAL; > >> > >> report_data->contact_cnt = contact_cnt; > Hi Dmitry and Henrik, > > Have you had a chance to review this patch to consider it for inclusion > in mainline? I think the main problem is that we were reporting PSMOUSE_BAD_DATA for palm packets. Could you try a slightly extended patch below to make sure it all still works? Thanks! -- Dmitry Input: cypress_ps2 - do not consider data bad if palm is detected From: Joseph Salisbury <joseph.salisbury@xxxxxxxxxxxxx> If hardware (or firmware) detects palm on the surface of the device it does not mean that the data packet is bad from the protocol standpoint. Instead of reporting PSMOUSE_BAD_DATA in this case simply threat it as if nothing touches the surface. BugLink: http://bugs.launchpad.net/bugs/1229361 Signed-off-by: Joseph Salisbury <joseph.salisbury@xxxxxxxxxxxxx> Tested-by: Kamal Mostafa <kamal@xxxxxxxxxxxxx> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> --- drivers/input/mouse/cypress_ps2.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/drivers/input/mouse/cypress_ps2.c b/drivers/input/mouse/cypress_ps2.c index ef651cc..e499e55 100644 --- a/drivers/input/mouse/cypress_ps2.c +++ b/drivers/input/mouse/cypress_ps2.c @@ -439,7 +439,7 @@ static int cypress_get_finger_count(unsigned char header_byte) case 2: return 5; default: /* Invalid contact (e.g. palm). Ignore it. */ - return -1; + return 0; } } @@ -452,17 +452,10 @@ static int cypress_parse_packet(struct psmouse *psmouse, { unsigned char *packet = psmouse->packet; unsigned char header_byte = packet[0]; - int contact_cnt; memset(report_data, 0, sizeof(struct cytp_report_data)); - contact_cnt = cypress_get_finger_count(header_byte); - - if (contact_cnt < 0) /* e.g. palm detect */ - return -EINVAL; - - report_data->contact_cnt = contact_cnt; - + report_data->contact_cnt = cypress_get_finger_count(header_byte); report_data->tap = (header_byte & ABS_MULTIFINGER_TAP) ? 1 : 0; if (report_data->contact_cnt == 1) { @@ -535,11 +528,9 @@ static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt) int slots[CYTP_MAX_MT_SLOTS]; int n; - if (cypress_parse_packet(psmouse, cytp, &report_data)) - return; + cypress_parse_packet(psmouse, cytp, &report_data); n = report_data.contact_cnt; - if (n > CYTP_MAX_MT_SLOTS) n = CYTP_MAX_MT_SLOTS; @@ -604,11 +595,6 @@ static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse) if ((packet[0] & 0x08) == 0x08) return PSMOUSE_BAD_DATA; - contact_cnt = cypress_get_finger_count(packet[0]); - - if (contact_cnt < 0) - return PSMOUSE_BAD_DATA; - if (cytp->mode & CYTP_BIT_ABS_NO_PRESSURE) cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4); else -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html