From 8a36f0bad4846b9e7d49b2c598c23c0443c2d1b5 Mon Sep 17 00:00:00 2001 From: Szymon Dziok Date: Sat, 6 Feb 2010 19:15:43 +0000 Subject: Packard Bell Vibe 500: touchpad code rework. Improve touch sensivity a bit by setting the MEP parameters in the power_init() function. Implement new function in synaptics-mep driver (touchpad_set_parameter) necessary for it. Move the button lights code to the target backlight file. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24541 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/synaptics-mep.c | 42 +++++++++++----------- firmware/export/synaptics-mep.h | 1 + .../target/arm/pbell/vibe500/backlight-vibe500.c | 9 ++--- firmware/target/arm/pbell/vibe500/power-vibe500.c | 12 +++++++ 4 files changed, 40 insertions(+), 24 deletions(-) (limited to 'firmware') 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) return val; } +int touchpad_set_parameter(char par_nr, unsigned int param) +{ + char data[4]; + int val=0; + + if (syn_status) + { + syn_enable_int(false); + + data[0]=0x03; /* header - addr:0,global:0,control:0,len:3 */ + data[1]=0x40+par_nr; /* parameter number */ + data[2]=(param >> 8) & 0xff; /* param_hi */ + data[3]=param & 0xff; /* param_lo */ + syn_send(data,4); + val=syn_read(data,1); /* get the simple ACK = 0x18 */ + + syn_enable_int(true); + } + return val; +} + int touchpad_set_buttonlights(unsigned int led_mask, char brightness) { char data[6]; @@ -588,26 +609,7 @@ int touchpad_set_buttonlights(unsigned int led_mask, char brightness) if (syn_status) { syn_enable_int(false); -#if defined(PBELL_VIBE500) - /* In Packard Bell Vibe 500 leds are controlled through the MEP parameters 0x62 - 0x63 - There is no 0x31 order - grup led control */ - - /* Make sure we have a led_block_mask = 0 - obtained experimentally */ - data[0] = 0x03; /* header - addr:0,global:0,control:0,len:3 */ - data[1] = 0x63; /* parameter nr: 0x23 (-0x40) - led_block_mask */ - data[2] = 0x00; /* par_hi = 0 */ - data[3] = 0x00; /* par_lo = 0 */ - syn_send(data,4); - val = syn_read(data, 1); /* get the simple ACK = 0x18 */ - /* Turn on/off the lights (there is no brightness control) - obtained experimentally */ - data[0] = 0x03; /* header - addr:0,global:0,control:0,len:3 */ - data[1] = 0x62; /* parameter nr: 0x22 (-0x40) - led_mask */ - data[2] = 0x00; /* par_hi = 0 */ - data[3] = (led_mask & 0x0f) | (brightness&0); /* par_lo = led_mask */ - syn_send(data,4); - val = syn_read(data, 1); /* get the simple ACK = 0x18 */ -#else /* turn on all touchpad leds */ data[0] = 0x05; data[1] = 0x31; @@ -619,7 +621,7 @@ int touchpad_set_buttonlights(unsigned int led_mask, char brightness) /* device responds with a single-byte ACK packet */ val = syn_read(data, 2); -#endif + syn_enable_int(true); } diff --git a/firmware/export/synaptics-mep.h b/firmware/export/synaptics-mep.h index 225891383e..aa45e70475 100644 --- a/firmware/export/synaptics-mep.h +++ b/firmware/export/synaptics-mep.h @@ -24,5 +24,6 @@ int touchpad_init(void); int touchpad_read_device(char *data, int len); int touchpad_set_buttonlights(unsigned int led_mask, char brightness); +int touchpad_set_parameter(char par_nr, unsigned int param); #endif diff --git a/firmware/target/arm/pbell/vibe500/backlight-vibe500.c b/firmware/target/arm/pbell/vibe500/backlight-vibe500.c index 727370633b..321484cd9a 100644 --- a/firmware/target/arm/pbell/vibe500/backlight-vibe500.c +++ b/firmware/target/arm/pbell/vibe500/backlight-vibe500.c @@ -64,16 +64,16 @@ void _buttonlight_on(void) { if (!buttonlight_status) { - touchpad_set_buttonlights(0x0f, 0); + touchpad_set_parameter(0x22, 0x000f); /* 0x22 - GPO_ENABLE */ buttonlight_status = 1; } } - + void _buttonlight_off(void) { if (buttonlight_status) { - touchpad_set_buttonlights(0x00, 0); + touchpad_set_parameter(0x22, 0x0000); /* 0x22 - GPO_ENABLE */ buttonlight_status = 0; } } @@ -81,7 +81,8 @@ void _buttonlight_off(void) void _buttonlight_set_brightness(int brightness) { /* no brightness control, but lights stays on - for compatibility */ - touchpad_set_buttonlights(0x0f, brightness); + (void)brightness; + touchpad_set_parameter(0x22, 0x000f); /* 0x22 - GPO_ENABLE */ buttonlight_status = 1; } #endif diff --git a/firmware/target/arm/pbell/vibe500/power-vibe500.c b/firmware/target/arm/pbell/vibe500/power-vibe500.c index e55c69e033..45ab7fb1fd 100644 --- a/firmware/target/arm/pbell/vibe500/power-vibe500.c +++ b/firmware/target/arm/pbell/vibe500/power-vibe500.c @@ -46,6 +46,18 @@ void power_init(void) { logf("touchpad not ready"); } + /* Max touch sensivity = 0x77, Rate=80/s,NoFilter=0, + KeyMatrix=0,Buttons=1,Relative=0,Absolute=1. + MEP parameter 0x20 - Report Modes */ + touchpad_set_parameter(0x20,0x7785); + /* MinAbsReporting=0, NotAllCapButtons=0,SingleCapButton=0, + 50msDebounce=0,MotionReporting=1 (reduce transmission overhead), + ClipZifnoFinger=0,DisableDeceleration=0,Dribble=0. + MEP parameter 0x21 - Enhanced Operating Configuration */ + touchpad_set_parameter(0x21,0x0008); + /* Set the GPO_LEVEL = 0 - for the button lights */ + touchpad_set_parameter(0x23,0x0000); + /* Sound unmute (on) */ GPIO_CLEAR_BITWISE(GPIOL_OUTPUT_VAL, 0x10); } -- cgit v1.2.3