summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/synaptics-mep.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/firmware/drivers/synaptics-mep.c b/firmware/drivers/synaptics-mep.c
index 98c8829ead..48139534f2 100644
--- a/firmware/drivers/synaptics-mep.c
+++ b/firmware/drivers/synaptics-mep.c
@@ -590,7 +590,7 @@ int touchpad_read_device(char *data, int len)
590int touchpad_set_parameter(char mod_nr, char par_nr, unsigned int param) 590int touchpad_set_parameter(char mod_nr, char par_nr, unsigned int param)
591{ 591{
592 char data[4]; 592 char data[4];
593 int val=0; 593 int i, val=0;
594 594
595 if (syn_status) 595 if (syn_status)
596 { 596 {
@@ -601,7 +601,16 @@ int touchpad_set_parameter(char mod_nr, char par_nr, unsigned int param)
601 data[2]=(param >> 8) & 0xff; /* param_hi */ 601 data[2]=(param >> 8) & 0xff; /* param_hi */
602 data[3]=param & 0xff; /* param_lo */ 602 data[3]=param & 0xff; /* param_lo */
603 syn_send(data,4); 603 syn_send(data,4);
604 val=syn_read(data,1); /* get the simple ACK = 0x18 */ 604 val=syn_read(data,4); /* try to get the simple ACK = 0x18 */
605
606 /* modules > 0 sometimes don't give ACK immediately but other packets like */
607 /* absolute from the scroll strip, so it has to be ignored until we receive ACK */
608 if ((mod_nr > 0) && ((data[0] & 7) != 0))
609 for (i = 0; i < 2; i++)
610 {
611 val=syn_read(data,4);
612 if (data[0] == 0x18) break;
613 }
605 614
606 syn_enable_int(true); 615 syn_enable_int(true);
607 } 616 }