diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2011-01-20 17:11:23 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2011-01-20 17:11:23 +0000 |
commit | 2da0f9bcfdf056255b298c0e61f0f4f0f950f869 (patch) | |
tree | 4bb8e4de0f500f73b6e81ce347c0b36ab763e4bf /firmware/target/arm/as3525 | |
parent | 5f52f6ee01fdd060fab9b72736daf06b3dbda212 (diff) |
Fuze v2: Do button reading more efficiently by mapping button codes directly to the GPIO pin states where possible (all but 'home' and hold). This makes plugins incompatible; up the min version and sort things.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29097 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525')
-rw-r--r-- | firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c | 24 | ||||
-rw-r--r-- | firmware/target/arm/as3525/sansa-fuzev2/button-target.h | 9 |
2 files changed, 10 insertions, 23 deletions
diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c index 4907de11f3..30f2c0df16 100644 --- a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c +++ b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c @@ -213,9 +213,9 @@ void button_gpioa_isr(void) */ int button_read_device(void) { - int btn = 0; static long power_counter = 0; bool hold = false; + int btn; unsigned gpiod6; /* if we don't wait for the fifo to empty, we'll see screen corruption @@ -240,28 +240,16 @@ int button_read_device(void) GPIOB_PIN(0) = 0; udelay(2); - if (GPIOC_PIN(1) & 1<<1) - btn |= BUTTON_DOWN; - if (GPIOC_PIN(2) & 1<<2) - btn |= BUTTON_UP; - if (GPIOC_PIN(3) & 1<<3) - btn |= BUTTON_LEFT; - if (GPIOC_PIN(4) & 1<<4) - btn |= BUTTON_SELECT; - if (GPIOC_PIN(5) & 1<<5) - btn |= BUTTON_RIGHT; - if (GPIOB_PIN(1) & 1<<1) - btn |= BUTTON_HOME; + btn = GPIOC_PIN_MASK(0x3e) | (GPIOB_PIN(1) >> 1); + if (amsv2_variant == 1) btn ^= BUTTON_HOME; - if (gpiod6 & 1<<6) + if (gpiod6) { /* power/hold is on the same pin. we know it's hold if the bit isn't * set now anymore */ - if (GPIOD_PIN(6) & 1<<6) - btn |= BUTTON_POWER; - else - hold = true; + btn |= GPIOD_PIN(6); + hold = !(btn & BUTTON_POWER); } if(gpiob_pin0_dir) diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-target.h b/firmware/target/arm/as3525/sansa-fuzev2/button-target.h index c64c68f951..596ac01262 100644 --- a/firmware/target/arm/as3525/sansa-fuzev2/button-target.h +++ b/firmware/target/arm/as3525/sansa-fuzev2/button-target.h @@ -32,15 +32,14 @@ bool button_hold(void); int button_read_device(void); /* Sandisk Sansa Fuze button codes */ -/* Main unit's buttons */ +/* Main unit's buttons - mapped for optimal reading */ #define BUTTON_HOME 0x00000001 - #define BUTTON_DOWN 0x00000002 -#define BUTTON_RIGHT 0x00000004 - +#define BUTTON_UP 0x00000004 #define BUTTON_LEFT 0x00000008 #define BUTTON_SELECT 0x00000010 -#define BUTTON_UP 0x00000020 +#define BUTTON_RIGHT 0x00000020 + #define BUTTON_POWER 0x00000040 #define BUTTON_SCROLL_BACK 0x00000080 |