summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/creative-zen/button-zen.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/creative-zen/button-zen.c')
-rw-r--r--firmware/target/arm/imx233/creative-zen/button-zen.c46
1 files changed, 40 insertions, 6 deletions
diff --git a/firmware/target/arm/imx233/creative-zen/button-zen.c b/firmware/target/arm/imx233/creative-zen/button-zen.c
index 8f20961a57..c0e7205675 100644
--- a/firmware/target/arm/imx233/creative-zen/button-zen.c
+++ b/firmware/target/arm/imx233/creative-zen/button-zen.c
@@ -25,6 +25,14 @@
25#include "power-imx233.h" 25#include "power-imx233.h"
26#include "button-lradc-imx233.h" 26#include "button-lradc-imx233.h"
27 27
28#if defined(CREATIVE_ZENXFI) || defined(CREATIVE_ZENMOZAIC)
29#define JACK_DET_BANK 2
30#define JACK_DET_PIN 8
31#elif defined(CREATIVE_ZENXFISTYLE)
32#define JACK_DET_BANK 2
33#define JACK_DET_PIN 7
34#endif
35
28struct imx233_button_lradc_mapping_t imx233_button_lradc_mapping[] = 36struct imx233_button_lradc_mapping_t imx233_button_lradc_mapping[] =
29{ 37{
30#if defined(CREATIVE_ZEN) 38#if defined(CREATIVE_ZEN)
@@ -84,6 +92,18 @@ struct imx233_button_lradc_mapping_t imx233_button_lradc_mapping[] =
84 {2945, BUTTON_PLAYPAUSE}, 92 {2945, BUTTON_PLAYPAUSE},
85 {3400, 0}, 93 {3400, 0},
86 {0, IMX233_BUTTON_LRADC_END}, 94 {0, IMX233_BUTTON_LRADC_END},
95#elif defined(CREATIVE_ZENXFISTYLE)
96 {230, BUTTON_MENU},
97 {480, BUTTON_SHORTCUT},
98 {690, BUTTON_UP},
99 {920, BUTTON_LEFT},
100 {1120, BUTTON_RIGHT},
101 {1335, BUTTON_DOWN},
102 {1565, BUTTON_SELECT},
103 {2850, BUTTON_BACK},
104 {3110, BUTTON_PLAYPAUSE},
105 {3620, 0},
106 {0, IMX233_BUTTON_LRADC_END},
87#else 107#else
88#error wrong target 108#error wrong target
89#endif 109#endif
@@ -92,29 +112,43 @@ struct imx233_button_lradc_mapping_t imx233_button_lradc_mapping[] =
92void button_init_device(void) 112void button_init_device(void)
93{ 113{
94 imx233_button_lradc_init(); 114 imx233_button_lradc_init();
95#if defined(CREATIVE_ZENXFI) || defined(CREATIVE_ZENMOZAIC) 115#ifdef HAVE_HEADPHONE_DETECTION
96 imx233_pinctrl_acquire(2, 8, "jack_detect"); 116 imx233_pinctrl_acquire(JACK_DET_BANK, JACK_DET_PIN, "jack_detect");
97 imx233_pinctrl_set_function(2, 8, PINCTRL_FUNCTION_GPIO); 117 imx233_pinctrl_set_function(JACK_DET_BANK, JACK_DET_PIN, PINCTRL_FUNCTION_GPIO);
98 imx233_pinctrl_enable_gpio(2, 8, false); 118 imx233_pinctrl_enable_gpio(JACK_DET_BANK, JACK_DET_PIN, false);
119#endif
120#ifdef CREATIVE_ZENXFISTYLE
121 imx233_pinctrl_acquire(0, 11, "power_detect");
122 imx233_pinctrl_set_function(0, 11, PINCTRL_FUNCTION_GPIO);
123 imx233_pinctrl_enable_gpio(0, 11, false);
99#endif 124#endif
100} 125}
101 126
127#ifdef HAS_BUTTON_HOLD
102bool button_hold(void) 128bool button_hold(void)
103{ 129{
104 return imx233_button_lradc_hold(); 130 return imx233_button_lradc_hold();
105} 131}
132#endif
106 133
107#if defined(CREATIVE_ZENXFI) || defined(CREATIVE_ZENMOZAIC) 134#ifdef HAVE_HEADPHONE_DETECTION
108bool headphones_inserted(void) 135bool headphones_inserted(void)
109{ 136{
110 return !imx233_pinctrl_get_gpio(2, 8); 137 return !imx233_pinctrl_get_gpio(JACK_DET_BANK, JACK_DET_PIN);
111} 138}
112#endif 139#endif
113 140
114int button_read_device(void) 141int button_read_device(void)
115{ 142{
116 int btn = 0; 143 int btn = 0;
144#ifdef CREATIVE_ZENXFISTYLE
145 /* The ZEN X-Fi Style uses a GPIO because both select and power are wired
146 * to PSWITCH resulting in slow and unreliable readings */
147 if(!imx233_pinctrl_get_gpio(0, 11))
148 btn |= BUTTON_POWER;
149#else
117 if(imx233_power_read_pswitch() == 1) 150 if(imx233_power_read_pswitch() == 1)
118 btn |= BUTTON_POWER; 151 btn |= BUTTON_POWER;
152#endif
119 return imx233_button_lradc_read(btn); 153 return imx233_button_lradc_read(btn);
120} 154}