summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-02-19 22:54:48 +0000
committerThomas Martitz <kugel@rockbox.org>2009-02-19 22:54:48 +0000
commit7d0b9f7fb7d66dd3b03e6a9ccfebeb9d0e92d2ab (patch)
tree52c8afcf292c28a8d7be46697e3783e1d3fb796c
parent4d32457410c94d5fd035f4698a9d6458ddc35e62 (diff)
downloadrockbox-7d0b9f7fb7d66dd3b03e6a9ccfebeb9d0e92d2ab.zip
rockbox-7d0b9f7fb7d66dd3b03e6a9ccfebeb9d0e92d2ab.tar.gz
rockbox-7d0b9f7fb7d66dd3b03e6a9ccfebeb9d0e92d2ab.tar.bz2
rockbox-7d0b9f7fb7d66dd3b03e6a9ccfebeb9d0e92d2ab.tar.xz
Fix occasional power button ghost presses and get rid of the delay which was needed to reduce the ghost presses (i.e. don't read power button too during lcd updates)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20058 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/sansa-fuze/button-fuze.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
index 9b6df70..f5dca44 100644
--- a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
+++ b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
@@ -128,13 +128,14 @@ bool button_hold(void)
static short button_dbop(void)
{
- /* skip home reading if lcd_button_support was blocked,
+ /* skip home and power reading if lcd_button_support was blocked,
* since the dbop bit 15 is invalid then, and use the old value instead */
- /* -20 (arbitary value) indicates valid home button read */
- int old_home = -20;
- int delay = 0;
+ /* -20 (arbitary value) indicates valid home&power button read */
+ int old_home_power = -20;
if(!lcd_button_support())
- old_home = (_dbop_din & 1<<15);
+ {
+ old_home_power = (_dbop_din & (1<<15|1<<8));
+ }
/* Wait for fifo to empty */
while ((DBOP_STAT & (1<<10)) == 0);
@@ -145,10 +146,8 @@ static short button_dbop(void)
DBOP_TIMPOL_01 = 0xe167e167;
DBOP_TIMPOL_23 = 0xe167006e;
- while(delay++ < 64);
-
DBOP_CTRL |= (1<<15); /* start read */
- ((DBOP_STAT & (1<<16)) == 0); /* wait for valid data */
+ while((DBOP_STAT & (1<<16)) == 0); /* wait for valid data */
_dbop_din = DBOP_DIN; /* now read */
@@ -158,8 +157,12 @@ static short button_dbop(void)
DBOP_CTRL |= (1<<16);
DBOP_CTRL &= ~(1<<19);
- if (old_home != -20)
- _dbop_din |= old_home;
+ /* write back old values if blocked */
+ if (old_home_power != -20)
+ {
+ _dbop_din |= old_home_power & 1<<15;
+ _dbop_din &= 0xfeff|(old_home_power & 1<<8);
+ }
return _dbop_din;
}