Skip to content

Commit 05ba999

Browse files
aduggan-synaJiri Kosina
authored andcommitted
HID: rmi: disable dribble packets on Synaptics touchpads
When a finger is lifted from a Synaptics touchpad the firmware will continue to interrupts for up to a second. These additional interrupts are know and dribble interrupts. Since the data read from the touchpad does not change the input subsystem only reports a single event. This makes the servicing of dribble interrupts on Linux unnecessary. This patch simply disables dribble interupts when configuring the touchpad. Signed-off-by: Andrew Duggan <[email protected]> Tested-by: Gabriele Mazzotta <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent dd8df28 commit 05ba999

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

drivers/hid/hid-rmi.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,7 @@ static int rmi_populate_f11(struct hid_device *hdev)
751751
bool has_gestures;
752752
bool has_rel;
753753
bool has_data40 = false;
754+
bool has_dribble = false;
754755
unsigned x_size, y_size;
755756
u16 query_offset;
756757

@@ -792,6 +793,14 @@ static int rmi_populate_f11(struct hid_device *hdev)
792793
has_rel = !!(buf[0] & BIT(3));
793794
has_gestures = !!(buf[0] & BIT(5));
794795

796+
ret = rmi_read(hdev, data->f11.query_base_addr + 5, buf);
797+
if (ret) {
798+
hid_err(hdev, "can not get absolute data sources: %d.\n", ret);
799+
return ret;
800+
}
801+
802+
has_dribble = !!(buf[0] & BIT(4));
803+
795804
/*
796805
* At least 4 queries are guaranteed to be present in F11
797806
* +1 for query 5 which is present since absolute events are
@@ -908,6 +917,16 @@ static int rmi_populate_f11(struct hid_device *hdev)
908917
data->max_x = buf[6] | (buf[7] << 8);
909918
data->max_y = buf[8] | (buf[9] << 8);
910919

920+
if (has_dribble) {
921+
buf[0] = buf[0] & ~BIT(6);
922+
ret = rmi_write(hdev, data->f11.control_base_addr, buf);
923+
if (ret) {
924+
hid_err(hdev, "can not write to control reg 0: %d.\n",
925+
ret);
926+
return ret;
927+
}
928+
}
929+
911930
return 0;
912931
}
913932

0 commit comments

Comments
 (0)