diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/synaptics-mep.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/firmware/drivers/synaptics-mep.c b/firmware/drivers/synaptics-mep.c index 87b78d09c1..d200e7ca79 100644 --- a/firmware/drivers/synaptics-mep.c +++ b/firmware/drivers/synaptics-mep.c | |||
@@ -580,6 +580,27 @@ int touchpad_read_device(char *data, int len) | |||
580 | return val; | 580 | return val; |
581 | } | 581 | } |
582 | 582 | ||
583 | int touchpad_set_parameter(char par_nr, unsigned int param) | ||
584 | { | ||
585 | char data[4]; | ||
586 | int val=0; | ||
587 | |||
588 | if (syn_status) | ||
589 | { | ||
590 | syn_enable_int(false); | ||
591 | |||
592 | data[0]=0x03; /* header - addr:0,global:0,control:0,len:3 */ | ||
593 | data[1]=0x40+par_nr; /* parameter number */ | ||
594 | data[2]=(param >> 8) & 0xff; /* param_hi */ | ||
595 | data[3]=param & 0xff; /* param_lo */ | ||
596 | syn_send(data,4); | ||
597 | val=syn_read(data,1); /* get the simple ACK = 0x18 */ | ||
598 | |||
599 | syn_enable_int(true); | ||
600 | } | ||
601 | return val; | ||
602 | } | ||
603 | |||
583 | int touchpad_set_buttonlights(unsigned int led_mask, char brightness) | 604 | int touchpad_set_buttonlights(unsigned int led_mask, char brightness) |
584 | { | 605 | { |
585 | char data[6]; | 606 | char data[6]; |
@@ -588,26 +609,7 @@ int touchpad_set_buttonlights(unsigned int led_mask, char brightness) | |||
588 | if (syn_status) | 609 | if (syn_status) |
589 | { | 610 | { |
590 | syn_enable_int(false); | 611 | syn_enable_int(false); |
591 | #if defined(PBELL_VIBE500) | ||
592 | /* In Packard Bell Vibe 500 leds are controlled through the MEP parameters 0x62 - 0x63 | ||
593 | There is no 0x31 order - grup led control */ | ||
594 | |||
595 | /* Make sure we have a led_block_mask = 0 - obtained experimentally */ | ||
596 | data[0] = 0x03; /* header - addr:0,global:0,control:0,len:3 */ | ||
597 | data[1] = 0x63; /* parameter nr: 0x23 (-0x40) - led_block_mask */ | ||
598 | data[2] = 0x00; /* par_hi = 0 */ | ||
599 | data[3] = 0x00; /* par_lo = 0 */ | ||
600 | syn_send(data,4); | ||
601 | val = syn_read(data, 1); /* get the simple ACK = 0x18 */ | ||
602 | 612 | ||
603 | /* Turn on/off the lights (there is no brightness control) - obtained experimentally */ | ||
604 | data[0] = 0x03; /* header - addr:0,global:0,control:0,len:3 */ | ||
605 | data[1] = 0x62; /* parameter nr: 0x22 (-0x40) - led_mask */ | ||
606 | data[2] = 0x00; /* par_hi = 0 */ | ||
607 | data[3] = (led_mask & 0x0f) | (brightness&0); /* par_lo = led_mask */ | ||
608 | syn_send(data,4); | ||
609 | val = syn_read(data, 1); /* get the simple ACK = 0x18 */ | ||
610 | #else | ||
611 | /* turn on all touchpad leds */ | 613 | /* turn on all touchpad leds */ |
612 | data[0] = 0x05; | 614 | data[0] = 0x05; |
613 | data[1] = 0x31; | 615 | data[1] = 0x31; |
@@ -619,7 +621,7 @@ int touchpad_set_buttonlights(unsigned int led_mask, char brightness) | |||
619 | 621 | ||
620 | /* device responds with a single-byte ACK packet */ | 622 | /* device responds with a single-byte ACK packet */ |
621 | val = syn_read(data, 2); | 623 | val = syn_read(data, 2); |
622 | #endif | 624 | |
623 | syn_enable_int(true); | 625 | syn_enable_int(true); |
624 | } | 626 | } |
625 | 627 | ||