Skip to content

Commit

Permalink
Input: cypress_ps2 - do not consider data bad if palm is detected
Browse files Browse the repository at this point in the history
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@canonical.com>
Tested-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
  • Loading branch information
Joseph Salisbury authored and Dmitry Torokhov committed Oct 31, 2013
1 parent c2e6095 commit 5df682b
Showing 1 changed file with 3 additions and 16 deletions.
19 changes: 3 additions & 16 deletions drivers/input/mouse/cypress_ps2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand All @@ -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) {
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -605,10 +596,6 @@ static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse)
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
Expand Down

0 comments on commit 5df682b

Please sign in to comment.