summaryrefslogtreecommitdiffstats
path: root/firmware/target
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
parent753064fccf270643edc8d60e46886e327b099c49 (diff)
downloadrockbox-4c58ad26ba462309f95790c32421130a73909f05.tar.gz
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')
-rw-r--r--firmware/target/arm/olympus/mrobe-100/button-mr100.c95
-rw-r--r--firmware/target/arm/olympus/mrobe-100/button-target.h4
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/backlight-hdd1630.c32
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-hdd1630.c89
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-target.h4
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/power-hdd1630.c5
6 files changed, 66 insertions, 163 deletions
diff --git a/firmware/target/arm/olympus/mrobe-100/button-mr100.c b/firmware/target/arm/olympus/mrobe-100/button-mr100.c
index 130c32739a..d4479278ef 100644
--- a/firmware/target/arm/olympus/mrobe-100/button-mr100.c
+++ b/firmware/target/arm/olympus/mrobe-100/button-mr100.c
@@ -28,10 +28,6 @@
#define LOGF_ENABLE
#include "logf.h"
-#define MEP_BUTTON_HEADER 0x1a
-#define MEP_BUTTON_ID 0x9
-#define MEP_ABSOLUTE_HEADER 0x0b
-
static int int_btn = BUTTON_NONE;
#ifndef BOOTLOADER
@@ -56,9 +52,9 @@ void button_init_device(void)
GPIOD_OUTPUT_EN |= 0x4; /* DATA */
GPIOD_OUTPUT_VAL |= 0x4; /* high */
- if (!syn_init())
+ if (!touchpad_init())
{
- logf("button_init_dev: touchpad not ready");
+ logf("touchpad not ready");
}
}
@@ -67,73 +63,34 @@ 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 - touched one of the 5 "buttons" */
+ if (data[1] & 0x1) int_btn |= BUTTON_PLAY;
+ if (data[1] & 0x2) int_btn |= BUTTON_MENU;
+ if (data[1] & 0x4) int_btn |= BUTTON_LEFT;
+ if (data[1] & 0x8) int_btn |= BUTTON_DISPLAY;
+ if (data[2] & 0x1) 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("button_read_device...");
- 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 - touched one of the 5 "buttons" */
- if (data[1] & 0x1)
- int_btn |= BUTTON_PLAY;
- if (data[1] & 0x2)
- int_btn |= BUTTON_MENU;
- if (data[1] & 0x4)
- int_btn |= BUTTON_LEFT;
- if (data[1] & 0x8)
- int_btn |= BUTTON_DISPLAY;
- if (data[2] & 0x1)
- 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/olympus/mrobe-100/button-target.h b/firmware/target/arm/olympus/mrobe-100/button-target.h
index c6b2c1067f..900211ebe4 100644
--- a/firmware/target/arm/olympus/mrobe-100/button-target.h
+++ b/firmware/target/arm/olympus/mrobe-100/button-target.h
@@ -25,6 +25,10 @@
#include <stdbool.h>
#include "config.h"
+#define MEP_BUTTON_HEADER 0x1a
+#define MEP_BUTTON_ID 0x09
+#define MEP_ABSOLUTE_HEADER 0x0b
+
#define HAS_BUTTON_HOLD
bool button_hold(void);
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 <stdbool.h>
#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
}