diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-22 20:33:20 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-22 20:33:20 +0100 |
commit | a2bfbe9ebc9797894507e1a11bdcc372e4379509 (patch) | |
tree | c2cb75b8569ed4cd52a40955dff0dd26a3e5b2d2 /firmware/target/arm/imx233 | |
parent | 82b86d4316d0e9d74c5ea086797750b0975e9023 (diff) | |
download | rockbox-a2bfbe9ebc9797894507e1a11bdcc372e4379509.tar.gz rockbox-a2bfbe9ebc9797894507e1a11bdcc372e4379509.zip |
zen{,xfi,mozaic,xfistyle,v}: switch to the new button driver
Change-Id: I206b16f6374f536ab6d84e84fefc8370a96ef759
Diffstat (limited to 'firmware/target/arm/imx233')
-rw-r--r-- | firmware/target/arm/imx233/creative-zen/button-target.h | 17 | ||||
-rw-r--r-- | firmware/target/arm/imx233/creative-zen/button-zen.c | 216 |
2 files changed, 105 insertions, 128 deletions
diff --git a/firmware/target/arm/imx233/creative-zen/button-target.h b/firmware/target/arm/imx233/creative-zen/button-target.h index e9a3ac5ab7..eb4f45ccf7 100644 --- a/firmware/target/arm/imx233/creative-zen/button-target.h +++ b/firmware/target/arm/imx233/creative-zen/button-target.h | |||
@@ -28,23 +28,6 @@ bool button_debug_screen(void); | |||
28 | /* HOLD button */ | 28 | /* HOLD button */ |
29 | #if !defined(CREATIVE_ZENXFISTYLE) | 29 | #if !defined(CREATIVE_ZENXFISTYLE) |
30 | #define HAS_BUTTON_HOLD | 30 | #define HAS_BUTTON_HOLD |
31 | #define IMX233_BUTTON_LRADC_HOLD_DET BLH_ADC | ||
32 | #endif | ||
33 | |||
34 | /* VDDIO value */ | ||
35 | #if defined(CREATIVE_ZENXFISTYLE) | ||
36 | #define IMX233_BUTTON_LRADC_VDDIO 3660 | ||
37 | #elif defined(CREATIVE_ZEN) | ||
38 | #define IMX233_BUTTON_LRADC_VDDIO 3480 | ||
39 | #elif defined(CREATIVE_ZENXFI) | ||
40 | #define IMX233_BUTTON_LRADC_VDDIO 3500 | ||
41 | #endif | ||
42 | |||
43 | /* LRADC channel */ | ||
44 | #if defined(CREATIVE_ZENXFISTYLE) | ||
45 | #define IMX233_BUTTON_LRADC_CHANNEL 2 | ||
46 | #else | ||
47 | #define IMX233_BUTTON_LRADC_CHANNEL 0 | ||
48 | #endif | 31 | #endif |
49 | 32 | ||
50 | /* Main unit's buttons */ | 33 | /* Main unit's buttons */ |
diff --git a/firmware/target/arm/imx233/creative-zen/button-zen.c b/firmware/target/arm/imx233/creative-zen/button-zen.c index fa01e9370e..ed54d42eb8 100644 --- a/firmware/target/arm/imx233/creative-zen/button-zen.c +++ b/firmware/target/arm/imx233/creative-zen/button-zen.c | |||
@@ -23,137 +23,131 @@ | |||
23 | #include "system-target.h" | 23 | #include "system-target.h" |
24 | #include "pinctrl-imx233.h" | 24 | #include "pinctrl-imx233.h" |
25 | #include "power-imx233.h" | 25 | #include "power-imx233.h" |
26 | #include "button-lradc-imx233.h" | 26 | #include "button-imx233.h" |
27 | 27 | ||
28 | #if defined(CREATIVE_ZENXFI) || defined(CREATIVE_ZENMOZAIC) | 28 | #if defined(CREATIVE_ZENXFISTYLE) |
29 | #define JACK_DET_BANK 2 | 29 | #define CHAN 2 |
30 | #define JACK_DET_PIN 8 | 30 | #define I_VDDIO 0 /* index in the table */ |
31 | #define JACK_DET_INVERTED | 31 | |
32 | #elif defined(CREATIVE_ZENXFISTYLE) | 32 | struct imx233_button_map_t imx233_button_map[] = |
33 | #define JACK_DET_BANK 2 | 33 | { |
34 | #define JACK_DET_PIN 7 | 34 | [I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3660), "vddio"), /* we need VDDIO for relative */ |
35 | #endif | 35 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 230, I_VDDIO), "menu"), |
36 | IMX233_BUTTON(SHORTCUT, LRADC_REL(CHAN, 480, I_VDDIO), "shortcut"), | ||
37 | IMX233_BUTTON(UP, LRADC_REL(CHAN, 690, I_VDDIO), "up"), | ||
38 | IMX233_BUTTON(LEFT, LRADC_REL(CHAN, 920, I_VDDIO), "left"), | ||
39 | IMX233_BUTTON(RIGHT, LRADC_REL(CHAN, 1120, I_VDDIO), "right"), | ||
40 | IMX233_BUTTON(DOWN, LRADC_REL(CHAN, 1335, I_VDDIO), "down"), | ||
41 | IMX233_BUTTON(SELECT, LRADC_REL(CHAN, 1565, I_VDDIO), "select"), | ||
42 | IMX233_BUTTON(BACK, LRADC_REL(CHAN, 2850, I_VDDIO), "back"), | ||
43 | IMX233_BUTTON(PLAYPAUSE, LRADC_REL(CHAN, 3110, I_VDDIO), "play"), | ||
44 | IMX233_BUTTON_(JACK, GPIO(2, 7), "jack"), | ||
45 | IMX233_BUTTON(POWER, GPIO(0, 11), "power", INVERTED), | ||
46 | IMX233_BUTTON_(END, END(), "") | ||
47 | }; | ||
48 | #elif defined(CREATIVE_ZEN) | ||
49 | #define CHAN 0 | ||
50 | #define I_VDDIO 0 /* index in the table */ | ||
36 | 51 | ||
37 | struct imx233_button_lradc_mapping_t imx233_button_lradc_mapping[] = | 52 | struct imx233_button_map_t imx233_button_map[] = |
38 | { | 53 | { |
39 | #if defined(CREATIVE_ZEN) | 54 | [I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3480), "vddio"), /* we need VDDIO for relative */ |
40 | {200, IMX233_BUTTON_LRADC_HOLD}, | 55 | IMX233_BUTTON_(HOLD, LRADC_REL(CHAN, 200, I_VDDIO), "hold"), |
41 | {250, BUTTON_MENU}, | 56 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 250, I_VDDIO), "menu"), |
42 | {520, BUTTON_SHORTCUT}, | 57 | IMX233_BUTTON(SHORTCUT, LRADC_REL(CHAN, 520, I_VDDIO), "shortcut"), |
43 | {1490, BUTTON_UP}, | 58 | IMX233_BUTTON(UP, LRADC_REL(CHAN, 1490, I_VDDIO), "up"), |
44 | {1740, BUTTON_SELECT}, | 59 | IMX233_BUTTON(SELECT, LRADC_REL(CHAN, 1740, I_VDDIO), "select"), |
45 | {2015, BUTTON_LEFT}, | 60 | IMX233_BUTTON(LEFT, LRADC_REL(CHAN, 2015, I_VDDIO), "left"), |
46 | {2255, BUTTON_RIGHT}, | 61 | IMX233_BUTTON(RIGHT, LRADC_REL(CHAN, 2255, I_VDDIO), "right"), |
47 | {2485, BUTTON_DOWN}, | 62 | IMX233_BUTTON(DOWN, LRADC_REL(CHAN, 2485, I_VDDIO), "down"), |
48 | {2700, BUTTON_BACK}, | 63 | IMX233_BUTTON(BACK, LRADC_REL(CHAN, 2700, I_VDDIO), "back"), |
49 | {2945, BUTTON_PLAYPAUSE}, | 64 | IMX233_BUTTON(PLAYPAUSE, LRADC_REL(CHAN, 2945, I_VDDIO), "play"), |
50 | {3400, 0}, | 65 | IMX233_BUTTON(POWER, PSWITCH(1), "power"), |
51 | {0, IMX233_BUTTON_LRADC_END}, | 66 | IMX233_BUTTON_(END, END(), "") |
67 | }; | ||
52 | #elif defined(CREATIVE_ZENXFI) | 68 | #elif defined(CREATIVE_ZENXFI) |
53 | {0, IMX233_BUTTON_LRADC_HOLD}, | 69 | #define CHAN 0 |
54 | {200, BUTTON_MENU}, | 70 | #define I_VDDIO 0 /* index in the table */ |
55 | {445, BUTTON_SHORTCUT}, | 71 | |
56 | {645, BUTTON_UP}, | 72 | struct imx233_button_map_t imx233_button_map[] = |
57 | {860, BUTTON_LEFT}, | 73 | { |
58 | {1060, BUTTON_RIGHT}, | 74 | [I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3500), "vddio"), /* we need VDDIO for relative */ |
59 | {1260, BUTTON_DOWN}, | 75 | IMX233_BUTTON_(HOLD, LRADC_REL(CHAN, 0, I_VDDIO), "hold"), |
60 | {1480, BUTTON_SELECT}, | 76 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 200, I_VDDIO), "menu"), |
61 | {1700, BUTTON_TOPRIGHT}, | 77 | IMX233_BUTTON(SHORTCUT, LRADC_REL(CHAN, 445, I_VDDIO), "shortcut"), |
62 | {1920, BUTTON_BOTTOMLEFT}, | 78 | IMX233_BUTTON(UP, LRADC_REL(CHAN, 645, I_VDDIO), "up"), |
63 | {2145, BUTTON_TOPLEFT}, | 79 | IMX233_BUTTON(LEFT, LRADC_REL(CHAN, 860, I_VDDIO), "left"), |
64 | {2460, BUTTON_BOTTOMRIGHT}, | 80 | IMX233_BUTTON(RIGHT, LRADC_REL(CHAN, 1060, I_VDDIO), "right"), |
65 | {2700, BUTTON_BACK}, | 81 | IMX233_BUTTON(DOWN, LRADC_REL(CHAN, 1260, I_VDDIO), "down"), |
66 | {2945, BUTTON_PLAYPAUSE}, | 82 | IMX233_BUTTON(SELECT, LRADC_REL(CHAN, 1480, I_VDDIO), "select"), |
67 | {3400, 0}, | 83 | IMX233_BUTTON(TOPRIGHT, LRADC_REL(CHAN, 1700, I_VDDIO), "topright"), |
68 | {0, IMX233_BUTTON_LRADC_END}, | 84 | IMX233_BUTTON(BOTTOMLEFT, LRADC_REL(CHAN, 1920, I_VDDIO), "bottomleft"), |
69 | #elif defined(CREATIVE_ZENV) | 85 | IMX233_BUTTON(TOPLEFT, LRADC_REL(CHAN, 2145, I_VDDIO), "topleft"), |
70 | {190, IMX233_BUTTON_LRADC_HOLD}, | 86 | IMX233_BUTTON(BOTTOMRIGHT, LRADC_REL(CHAN, 2460, I_VDDIO), "bottomright"), |
71 | {250, BUTTON_PLAYPAUSE}, | 87 | IMX233_BUTTON(BACK, LRADC_REL(CHAN, 2700, I_VDDIO), "back"), |
72 | {530, BUTTON_BACK}, | 88 | IMX233_BUTTON(PLAYPAUSE, LRADC_REL(CHAN, 2945, I_VDDIO), "play"), |
73 | {785, BUTTON_VOL_UP}, | 89 | IMX233_BUTTON(POWER, PSWITCH(1), "power"), |
74 | {1040, BUTTON_VOL_DOWN}, | 90 | IMX233_BUTTON_(JACK, GPIO(2, 8), "jack", INVERTED), |
75 | {1295, BUTTON_MENU}, | 91 | IMX233_BUTTON_(END, END(), "") |
76 | {1540, BUTTON_UP}, | ||
77 | {1800, BUTTON_SELECT}, | ||
78 | {2070, BUTTON_LEFT}, | ||
79 | {2315, BUTTON_RIGHT}, | ||
80 | {2550, BUTTON_DOWN}, | ||
81 | {3450, 0}, | ||
82 | {0, IMX233_BUTTON_LRADC_END}, | ||
83 | #elif defined(CREATIVE_ZENMOZAIC) | ||
84 | {0, IMX233_BUTTON_LRADC_HOLD}, | ||
85 | {200, BUTTON_MENU}, | ||
86 | {445, BUTTON_SHORTCUT}, | ||
87 | {645, BUTTON_UP}, | ||
88 | {860, BUTTON_LEFT}, | ||
89 | {1060, BUTTON_RIGHT}, | ||
90 | {1260, BUTTON_DOWN}, | ||
91 | {1480, BUTTON_SELECT}, | ||
92 | {2700, BUTTON_BACK}, | ||
93 | {2945, BUTTON_PLAYPAUSE}, | ||
94 | {3400, 0}, | ||
95 | {0, IMX233_BUTTON_LRADC_END}, | ||
96 | #elif defined(CREATIVE_ZENXFISTYLE) | ||
97 | {230, BUTTON_MENU}, | ||
98 | {480, BUTTON_SHORTCUT}, | ||
99 | {690, BUTTON_UP}, | ||
100 | {920, BUTTON_LEFT}, | ||
101 | {1120, BUTTON_RIGHT}, | ||
102 | {1335, BUTTON_DOWN}, | ||
103 | {1565, BUTTON_SELECT}, | ||
104 | {2850, BUTTON_BACK}, | ||
105 | {3110, BUTTON_PLAYPAUSE}, | ||
106 | {3620, 0}, | ||
107 | {0, IMX233_BUTTON_LRADC_END}, | ||
108 | #else | ||
109 | #error wrong target | ||
110 | #endif | ||
111 | }; | 92 | }; |
93 | #elif defined(CREATIVE_ZENMOZAIC) | ||
94 | #define CHAN 0 | ||
95 | #define I_VDDIO 0 /* index in the table */ | ||
112 | 96 | ||
113 | void button_init_device(void) | 97 | struct imx233_button_map_t imx233_button_map[] = |
114 | { | 98 | { |
115 | imx233_button_lradc_init(); | 99 | [I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3500), "vddio"), /* we need VDDIO for relative */ |
116 | #ifdef HAVE_HEADPHONE_DETECTION | 100 | IMX233_BUTTON_(HOLD, LRADC_REL(CHAN, 0, I_VDDIO), "hold"), |
117 | imx233_pinctrl_acquire(JACK_DET_BANK, JACK_DET_PIN, "jack_detect"); | 101 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 200, I_VDDIO), "menu"), |
118 | imx233_pinctrl_set_function(JACK_DET_BANK, JACK_DET_PIN, PINCTRL_FUNCTION_GPIO); | 102 | IMX233_BUTTON(SHORTCUT, LRADC_REL(CHAN, 445, I_VDDIO), "shortcut"), |
119 | imx233_pinctrl_enable_gpio(JACK_DET_BANK, JACK_DET_PIN, false); | 103 | IMX233_BUTTON(UP, LRADC_REL(CHAN, 645, I_VDDIO), "up"), |
120 | #endif | 104 | IMX233_BUTTON(LEFT, LRADC_REL(CHAN, 860, I_VDDIO), "left"), |
121 | #ifdef CREATIVE_ZENXFISTYLE | 105 | IMX233_BUTTON(RIGHT, LRADC_REL(CHAN, 1060, I_VDDIO), "right"), |
122 | imx233_pinctrl_acquire(0, 11, "power_detect"); | 106 | IMX233_BUTTON(DOWN, LRADC_REL(CHAN, 1260, I_VDDIO), "down"), |
123 | imx233_pinctrl_set_function(0, 11, PINCTRL_FUNCTION_GPIO); | 107 | IMX233_BUTTON(SELECT, LRADC_REL(CHAN, 1480, I_VDDIO), "select"), |
124 | imx233_pinctrl_enable_gpio(0, 11, false); | 108 | IMX233_BUTTON(BACK, LRADC_REL(CHAN, 2700, I_VDDIO), "back"), |
125 | #endif | 109 | IMX233_BUTTON(PLAYPAUSE, LRADC_REL(CHAN, 2945, I_VDDIO), "play"), |
126 | } | 110 | IMX233_BUTTON(POWER, PSWITCH(1), "power"), |
111 | IMX233_BUTTON_(JACK, GPIO(2, 8), "jack"), | ||
112 | IMX233_BUTTON_(END, END(), "") | ||
113 | }; | ||
114 | #elif defined(CREATIVE_ZENV) | ||
115 | #define CHAN 0 | ||
116 | #define I_VDDIO 0 /* index in the table */ | ||
127 | 117 | ||
128 | #ifdef HAS_BUTTON_HOLD | 118 | struct imx233_button_map_t imx233_button_map[] = |
129 | bool button_hold(void) | ||
130 | { | 119 | { |
131 | return imx233_button_lradc_hold(); | 120 | [I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3500), "vddio"), /* we need VDDIO for relative */ |
132 | } | 121 | IMX233_BUTTON_(HOLD, LRADC_REL(CHAN, 190, I_VDDIO), "hold"), |
122 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 250, I_VDDIO), "play"), | ||
123 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 530, I_VDDIO), "back"), | ||
124 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 785, I_VDDIO), "vol_up"), | ||
125 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 1040, I_VDDIO), "vol_down"), | ||
126 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 1295, I_VDDIO), "menu"), | ||
127 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 1540, I_VDDIO), "up"), | ||
128 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 1800, I_VDDIO), "select"), | ||
129 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 2070, I_VDDIO), "left"), | ||
130 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 2315, I_VDDIO), "right"), | ||
131 | IMX233_BUTTON(MENU, LRADC_REL(CHAN, 2550, I_VDDIO), "down"), | ||
132 | IMX233_BUTTON(POWER, PSWITCH(1), "power"), | ||
133 | IMX233_BUTTON_(END, END(), "") | ||
134 | }; | ||
135 | #else | ||
136 | #error wrong target | ||
133 | #endif | 137 | #endif |
134 | 138 | ||
135 | #ifdef HAVE_HEADPHONE_DETECTION | 139 | void button_init_device(void) |
136 | bool headphones_inserted(void) | ||
137 | { | 140 | { |
138 | bool det = imx233_pinctrl_get_gpio(JACK_DET_BANK, JACK_DET_PIN); | 141 | imx233_button_init(); |
139 | #ifdef JACK_DET_INVERTED | ||
140 | det = !det; | ||
141 | #endif | ||
142 | return det; | ||
143 | } | 142 | } |
144 | #endif | ||
145 | 143 | ||
146 | int button_read_device(void) | 144 | int button_read_device(void) |
147 | { | 145 | { |
148 | int btn = 0; | 146 | int btn = 0; |
149 | #ifdef CREATIVE_ZENXFISTYLE | 147 | #ifdef CREATIVE_ZENXFISTYLE |
150 | /* The ZEN X-Fi Style uses a GPIO because both select and power are wired | ||
151 | * to PSWITCH resulting in slow and unreliable readings */ | ||
152 | if(!imx233_pinctrl_get_gpio(0, 11)) | ||
153 | btn |= BUTTON_POWER; | ||
154 | #else | 148 | #else |
155 | if(imx233_power_read_pswitch() == 1) | 149 | if(imx233_power_read_pswitch() == 1) |
156 | btn |= BUTTON_POWER; | 150 | btn |= BUTTON_POWER; |
157 | #endif | 151 | #endif |
158 | return imx233_button_lradc_read(btn); | 152 | return imx233_button_read(btn); |
159 | } | 153 | } |