touch devices: Disable touch on softlock.

Target that have a touchpad/touchscreen should disable it while
being locked (In order to avoid LCD to drain battery power due to
"key locked" constant reporting messages. If they a have a keylock
button this was already handled at driver level. If not (e.g. fuze+),
they will have to implement a switch at driver level that action.c
can operate on softlock.
This patch does the following for any target having a touchpad
or a touchscreen and no HAS_BUTTON_HOLD (ie any softlock target)
1) it implements the code to call button_enable_touch(bool en) in
action.c.
2) button_enable_touch is implemented in button.c and call
either touchpad_enable or touchscreen_enable
3) those two function are implemented respectively in touchscreen.c
and a new touchpad.c file. They provide a generic way to silents touch's
device and call a function at driver level where target specific code
can be implemented if possible/needed (for power saving for instance).
Those function name are touchpad_enable_device and touchscreen_enable_device
4) we implement an empty function at driver level of targets that need it
to have them still being able to compiled.

Change-Id: I9ead78a25bd33466a8533f5b9f259b395cb5ce49
Reviewed-on: http://gerrit.rockbox.org/569
Reviewed-by: Thomas Martitz <kugel@rockbox.org>
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
This commit is contained in:
Jean-Louis Biasini 2013-09-02 11:03:56 +02:00 committed by Amaury Pouly
parent ef2dd06d5e
commit df6eb82f51
15 changed files with 174 additions and 6 deletions

View file

@ -66,7 +66,7 @@ void button_init_device(void)
bottomright.px_x = LCD_WIDTH;
bottomright.px_y = LCD_HEIGHT;
imx233_touchscreen_init();
imx233_touchscreen_enable(true);
@ -104,6 +104,11 @@ static int touch_to_pixels(int *val_x, int *val_y)
return (x<<16)|y;
}
void touchscreen_enable_device(bool en)
{
imx233_touchscreen_enable(en);
}
static int touchscreen_read_device(int *data)
{
int x, y;

View file

@ -28,6 +28,7 @@
#include "string.h"
#include "usb.h"
#include "power-imx233.h"
#include "touchpad.h"
#ifndef BOOTLOADER
@ -274,7 +275,7 @@ static void do_interrupt(void)
imx233_pinctrl_setup_irq(0, 27, true, true, false, &rmi_attn_cb, 0);
}
void touchdev_enable(bool en)
void touchpad_enable_device(bool en)
{
t_enable = en;
queue_post(&rmi_queue, RMI_SET_SLEEP_MODE, en ? RMI_SLEEP_MODE_LOW_POWER : RMI_SLEEP_MODE_SENSOR_SLEEP);
@ -433,5 +434,5 @@ int button_read_device(void)
default:
break;
}
return res | touchpad_read_device();
return res | touchpad_filter(touchpad_read_device());
}

View file

@ -24,7 +24,7 @@
#include <stdbool.h>
bool button_debug_screen(void);
void touchpad_set_sensitivity(int level);
void touchdev_enable(bool en);
void touchpad_enable_device(bool en);
/* Main unit's buttons */
#define BUTTON_POWER 0x00000001
@ -47,6 +47,10 @@ void touchdev_enable(bool en);
BUTTON_PLAYPAUSE|BUTTON_BACK| \
BUTTON_BOTTOMRIGHT|BUTTON_BOTTOMLEFT)
#define BUTTON_TOUCHPAD (BUTTON_LEFT|BUTTON_UP|BUTTON_RIGHT|BUTTON_DOWN| \
BUTTON_SELECT|BUTTON_PLAYPAUSE|BUTTON_BACK| \
BUTTON_BOTTOMRIGHT|BUTTON_BOTTOMLEFT)
/* Software power-off */
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10