summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/iriver/h10/button-h10.c21
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
34void button_init_device(void) 34void 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
39bool button_hold(void) 41bool 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