diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/iriver/h10/button-h10.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/firmware/target/arm/iriver/h10/button-h10.c b/firmware/target/arm/iriver/h10/button-h10.c index 340f51c34c..cd28e25c71 100644 --- a/firmware/target/arm/iriver/h10/button-h10.c +++ b/firmware/target/arm/iriver/h10/button-h10.c | |||
@@ -33,7 +33,9 @@ | |||
33 | 33 | ||
34 | void button_init_device(void) | 34 | void button_init_device(void) |
35 | { | 35 | { |
36 | /* No hardware initialisation required as it is done by the bootloader */ | 36 | /* We need to output to pin 6 of GPIOD when reading the scroll pad value */ |
37 | GPIOD_OUTPUT_EN |= 0x40; | ||
38 | GPIOD_OUTPUT_VAL |= 0x40; | ||
37 | } | 39 | } |
38 | 40 | ||
39 | bool button_hold(void) | 41 | bool button_hold(void) |
@@ -73,10 +75,21 @@ int button_read_device(void) | |||
73 | if (GPIOB_INPUT_VAL & 0x1) btn |= BUTTON_POWER; | 75 | if (GPIOB_INPUT_VAL & 0x1) btn |= BUTTON_POWER; |
74 | 76 | ||
75 | /* Read scroller */ | 77 | /* Read scroller */ |
76 | if ( (GPIOC_INPUT_VAL & 0x8) && (GPIOD_INPUT_VAL & 0x20) ) | 78 | if ( GPIOD_INPUT_VAL & 0x20 ) |
77 | { | 79 | { |
78 | /* Scroller is pressed */ | 80 | int scroll_pos; |
79 | btn |= BUTTON_SCROLL_DOWN; | 81 | |
82 | GPIOD_OUTPUT_VAL &=~ 0x40; | ||
83 | udelay(50); | ||
84 | scroll_pos = adc_scan(ADC_SCROLLPAD); | ||
85 | GPIOD_OUTPUT_VAL |= 0x40; | ||
86 | |||
87 | if(scroll_pos < 0x210) | ||
88 | { | ||
89 | btn |= BUTTON_SCROLL_DOWN; | ||
90 | } else { | ||
91 | btn |= BUTTON_SCROLL_UP; | ||
92 | } | ||
80 | } | 93 | } |
81 | } | 94 | } |
82 | 95 | ||