From 4c58ad26ba462309f95790c32421130a73909f05 Mon Sep 17 00:00:00 2001 From: Mark Arigo Date: Fri, 19 Jun 2009 02:48:15 +0000 Subject: Clean up the Synaptics touchpad driver. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21344 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/philips/hdd1630/backlight-hdd1630.c | 32 +------- .../target/arm/philips/hdd1630/button-hdd1630.c | 89 ++++++---------------- .../target/arm/philips/hdd1630/button-target.h | 4 + .../target/arm/philips/hdd1630/power-hdd1630.c | 5 +- 4 files changed, 36 insertions(+), 94 deletions(-) (limited to 'firmware/target/arm/philips') diff --git a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c index eafce13759..cc8f04dda9 100755 --- a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c @@ -47,41 +47,15 @@ void _backlight_off(void) } #ifdef HAVE_BUTTON_LIGHT - #define BUTTONLIGHT_MASK 0x7f - static unsigned short buttonight_brightness = DEFAULT_BRIGHTNESS_SETTING - 1; static unsigned short buttonlight_status = 0; -static void set_buttonlight(int brightness) -{ - int data[6]; - - if (syn_get_status()) - { - syn_int_enable(false); - - /* turn on all touchpad leds */ - data[0] = 0x05; - data[1] = 0x31; - data[2] = (brightness & 0xff) << 4; - data[3] = 0x00; - data[4] = 0x00; - data[5] = BUTTONLIGHT_MASK; - syn_send(data, 6); - - /* device responds with a single-byte ACK packet */ - syn_read(data, 2); - - syn_int_enable(true); - } -} - void _buttonlight_on(void) { if (!buttonlight_status) { - set_buttonlight(buttonight_brightness); + touchpad_set_buttonlights(BUTTONLIGHT_MASK, buttonight_brightness); buttonlight_status = 1; } } @@ -90,7 +64,7 @@ void _buttonlight_off(void) { if (buttonlight_status) { - set_buttonlight(0); + touchpad_set_buttonlights(BUTTONLIGHT_MASK, 0); buttonlight_status = 0; } } @@ -98,7 +72,7 @@ void _buttonlight_off(void) void _buttonlight_set_brightness(int brightness) { buttonight_brightness = brightness - 1; - set_buttonlight(buttonight_brightness); + touchpad_set_buttonlights(BUTTONLIGHT_MASK, buttonight_brightness); buttonlight_status = 1; } #endif diff --git a/firmware/target/arm/philips/hdd1630/button-hdd1630.c b/firmware/target/arm/philips/hdd1630/button-hdd1630.c index e8214edf91..d45944ef10 100755 --- a/firmware/target/arm/philips/hdd1630/button-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/button-hdd1630.c @@ -27,10 +27,6 @@ #define LOGF_ENABLE #include "logf.h" -#define MEP_BUTTON_HEADER 0x19 -#define MEP_BUTTON_ID 0x9 -#define MEP_ABSOLUTE_HEADER 0x0b - static int int_btn = BUTTON_NONE; /* @@ -48,10 +44,8 @@ void button_click(void) #ifndef BOOTLOADER void button_init_device(void) { - if (!syn_get_status()) - { - logf("button_init_dev: touchpad not ready"); - } + /* The touchpad is powered on and initialized in power-hdd1630.c + since it needs to be ready for both buttons and button lights. */ } /* @@ -59,66 +53,33 @@ void button_init_device(void) */ void button_int(void) { - int data[4]; - int val, id; + char data[4]; + int val; int_btn = BUTTON_NONE; - if (syn_get_status()) + val = touchpad_read_device(data, 4); + + if (val == MEP_BUTTON_HEADER) + { + /* Buttons packet */ + if (data[1] & 0x1) + int_btn |= BUTTON_LEFT; + if (data[1] & 0x2) + int_btn |= BUTTON_RIGHT; + } + else if (val == MEP_ABSOLUTE_HEADER) { - /* disable interrupt while we read the touchpad */ - syn_int_enable(false); - - val = syn_read(data, 4); - if (val > 0) - { - val = data[0] & 0xff; /* packet header */ - id = (data[1] >> 4) & 0xf; /* packet id */ - - logf("syn_read:"); - logf(" data[0] = 0x%08x", data[0]); - logf(" data[1] = 0x%08x", data[1]); - logf(" data[2] = 0x%08x", data[2]); - logf(" data[3] = 0x%08x", data[3]); - - if ((val == MEP_BUTTON_HEADER) && (id == MEP_BUTTON_ID)) - { - /* Buttons packet */ - if (data[1] & 0x1) - int_btn |= BUTTON_LEFT; - if (data[1] & 0x2) - int_btn |= BUTTON_RIGHT; - - /* An Absolute packet should follow which we ignore */ - val = syn_read(data, 4); - logf(" int_btn = 0x%04x", int_btn); - } - else if (val == MEP_ABSOLUTE_HEADER) - { - /* Absolute packet - the finger is on the vertical strip. - Position ranges from 1-4095, with 1 at the bottom. */ - val = ((data[1] >> 4) << 8) | data[2]; /* position */ - - logf(" pos %d", val); - logf(" z %d", data[3]); - logf(" finger %d", data[1] & 0x1); - logf(" gesture %d", data[1] & 0x2); - logf(" RelPosVld %d", data[1] & 0x4); - - if(data[1] & 0x1) /* if finger on touch strip */ - { - if ((val > 0) && (val <= 1365)) - int_btn |= BUTTON_DOWN; - else if ((val > 1365) && (val <= 2730)) - int_btn |= BUTTON_SELECT; - else if ((val > 2730) && (val <= 4095)) - int_btn |= BUTTON_UP; - } - } - } - - /* re-enable interrupts */ - syn_int_enable(true); + /* Absolute packet - the finger is on the vertical strip. + Position ranges from 1-4095, with 1 at the bottom. */ + val = ((data[1] >> 4) << 8) | data[2]; /* position */ + + if ((val > 0) && (val <= 1365)) + int_btn |= BUTTON_DOWN; + else if ((val > 1365) && (val <= 2730)) + int_btn |= BUTTON_SELECT; + else if ((val > 2730) && (val <= 4095)) + int_btn |= BUTTON_UP; } } #else diff --git a/firmware/target/arm/philips/hdd1630/button-target.h b/firmware/target/arm/philips/hdd1630/button-target.h index cd5b13775e..b7fc21aca2 100755 --- a/firmware/target/arm/philips/hdd1630/button-target.h +++ b/firmware/target/arm/philips/hdd1630/button-target.h @@ -25,6 +25,10 @@ #include #include "config.h" +#define MEP_BUTTON_HEADER 0x19 +#define MEP_BUTTON_ID 0x9 +#define MEP_ABSOLUTE_HEADER 0x0b + #define HAS_BUTTON_HOLD bool button_hold(void); diff --git a/firmware/target/arm/philips/hdd1630/power-hdd1630.c b/firmware/target/arm/philips/hdd1630/power-hdd1630.c index 81d5040d23..c348567529 100755 --- a/firmware/target/arm/philips/hdd1630/power-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/power-hdd1630.c @@ -65,7 +65,10 @@ void power_init(void) GPIOA_OUTPUT_EN |= 0x10; /* set DATA */ GPIOA_OUTPUT_VAL |= 0x10; /* high */ - syn_init(); + if (!touchpad_init()) + { + logf("touchpad not ready"); + } #endif } -- cgit v1.2.3