summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/philips/hdd1630/button-hdd1630.c
diff options
context:
space:
mode:
authorMark Arigo <markarigo@gmail.com>2009-06-19 02:48:15 +0000
committerMark Arigo <markarigo@gmail.com>2009-06-19 02:48:15 +0000
commit4c58ad26ba462309f95790c32421130a73909f05 (patch)
tree96af9c1cda5f21e5af6443b13171ed66ccb1d9d1 /firmware/target/arm/philips/hdd1630/button-hdd1630.c
parent753064fccf270643edc8d60e46886e327b099c49 (diff)
downloadrockbox-4c58ad26ba462309f95790c32421130a73909f05.tar.gz
rockbox-4c58ad26ba462309f95790c32421130a73909f05.tar.bz2
rockbox-4c58ad26ba462309f95790c32421130a73909f05.zip
Clean up the Synaptics touchpad driver.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21344 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/philips/hdd1630/button-hdd1630.c')
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-hdd1630.c89
1 files changed, 25 insertions, 64 deletions
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