From 902c43a9689ec2c49dedc579b3d7d9fa45293652 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Wed, 9 Oct 2002 09:29:04 +0000 Subject: Filters out AN5 keys if UP is pressed. Solves bug #619028. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2545 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/button.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 30b7622f53..4657e1d84b 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -271,16 +271,22 @@ static int button_read(void) else if (data >= LEVEL1) btn |= BUTTON_F1; - /* Check DOWN, PLAY, LEFT, RIGHT */ - data = adc_read(ADC_BUTTON_ROW2); - if (data >= LEVEL4) - btn |= BUTTON_DOWN; - else if (data >= LEVEL3) - btn |= BUTTON_PLAY; - else if (data >= LEVEL2) - btn |= BUTTON_LEFT; - else if (data >= LEVEL1) - btn |= BUTTON_RIGHT; + /* Some units have mushy keypads, so pressing UP also activates + the Left/Right buttons. Let's combat that by skipping the AN5 + checks when UP is pressed. */ + if(!(btn & BUTTON_UP)) + { + /* Check DOWN, PLAY, LEFT, RIGHT */ + data = adc_read(ADC_BUTTON_ROW2); + if (data >= LEVEL4) + btn |= BUTTON_DOWN; + else if (data >= LEVEL3) + btn |= BUTTON_PLAY; + else if (data >= LEVEL2) + btn |= BUTTON_LEFT; + else if (data >= LEVEL1) + btn |= BUTTON_RIGHT; + } return btn; } -- cgit v1.2.3