mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-08 12:45:26 -05:00
Clean up the Synaptics touchpad driver.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21344 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
753064fccf
commit
4c58ad26ba
8 changed files with 248 additions and 236 deletions
|
|
@ -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)
|
||||
{
|
||||
/* disable interrupt while we read the touchpad */
|
||||
syn_int_enable(false);
|
||||
/* 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)
|
||||
{
|
||||
/* 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 */
|
||||
|
||||
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);
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
/* disable interrupt while we read the touchpad */
|
||||
syn_int_enable(false);
|
||||
/* Buttons packet */
|
||||
if (data[1] & 0x1)
|
||||
int_btn |= BUTTON_LEFT;
|
||||
if (data[1] & 0x2)
|
||||
int_btn |= BUTTON_RIGHT;
|
||||
}
|
||||
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 */
|
||||
|
||||
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);
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue