diff options
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/onda_vx747')
3 files changed, 116 insertions, 112 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c index 9deab7712a..598fa1a0eb 100644 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c | |||
@@ -23,58 +23,74 @@ | |||
23 | #include "jz4740.h" | 23 | #include "jz4740.h" |
24 | #include "backlight-target.h" | 24 | #include "backlight-target.h" |
25 | 25 | ||
26 | #define GPIO_PWM 123 | 26 | #define GPIO_PWM (32*3)+31 |
27 | #define PWM_CHN 7 | 27 | #define PWM_CHN 7 |
28 | #define PWM_FULL 101 | 28 | #define __gpio_as_PWM_CHN __gpio_as_pwm7 |
29 | 29 | ||
30 | static void set_backlight(int unk, int val) | 30 | static void set_backlight(int val) |
31 | { | 31 | { |
32 | if(val == 0) | 32 | /* Taken from the OF */ |
33 | __gpio_as_pwm7(); | 33 | int tmp; |
34 | else | 34 | tmp = (val/2 + __cpm_get_rtcclk()) / val; |
35 | { | 35 | if(tmp > 0xFFFF) |
36 | REG_TCU_TCSR(7) |= 2; | 36 | tmp = 0xFFFF; |
37 | REG_TCU_TCSR(7) &= ~0x100; | 37 | |
38 | int tmp; | 38 | __tcu_set_half_data(PWM_CHN, (tmp * val * 1374389535) >> 5); |
39 | tmp = (unk/2 + __cpm_get_rtcclk()) / unk; | 39 | __tcu_set_full_data(PWM_CHN, tmp); |
40 | if(tmp > 0xFFFF) | ||
41 | tmp = 0xFFFF; | ||
42 | |||
43 | __tcu_set_half_data(7, (tmp * unk * 1374389535) >> 5); | ||
44 | __tcu_set_full_data(7, tmp); | ||
45 | |||
46 | REG_TCU_TSCR = (1 << 7); | ||
47 | REG_TCU_TESR = (1 << 7); | ||
48 | |||
49 | __tcu_enable_pwm_output(7); | ||
50 | } | ||
51 | __tcu_set_count(7, 0); | ||
52 | } | 40 | } |
53 | 41 | ||
54 | bool _backlight_init(void) | 42 | static void set_backlight_on(void) |
55 | { | 43 | { |
56 | __gpio_as_pwm7(); | 44 | __tcu_start_timer_clock(PWM_CHN); |
57 | |||
58 | __tcu_stop_counter(7); | ||
59 | __tcu_disable_pwm_output(7); | ||
60 | |||
61 | set_backlight(300, 7); | ||
62 | 45 | ||
46 | set_backlight(MAX_BRIGHTNESS_SETTING); | ||
47 | |||
48 | __tcu_set_count(PWM_CHN, 0); | ||
49 | __tcu_start_counter(PWM_CHN); | ||
50 | |||
51 | __tcu_enable_pwm_output(PWM_CHN); | ||
52 | } | ||
53 | |||
54 | static void set_backlight_off(void) | ||
55 | { | ||
56 | __tcu_stop_counter(PWM_CHN); | ||
57 | __tcu_disable_pwm_output(PWM_CHN); | ||
58 | __tcu_stop_timer_clock(PWM_CHN); | ||
59 | } | ||
60 | |||
61 | bool _backlight_init(void) | ||
62 | { | ||
63 | __gpio_as_PWM_CHN(); | ||
64 | __tcu_start_timer_clock(PWM_CHN); | ||
65 | |||
66 | __tcu_stop_counter(PWM_CHN); | ||
67 | __tcu_disable_pwm_output(PWM_CHN); | ||
68 | |||
69 | __tcu_init_pwm_output_low(PWM_CHN); | ||
70 | __tcu_select_rtcclk(PWM_CHN); | ||
71 | __tcu_select_clk_div1(PWM_CHN); | ||
72 | |||
73 | __tcu_mask_half_match_irq(PWM_CHN); | ||
74 | __tcu_mask_full_match_irq(PWM_CHN); | ||
75 | |||
76 | set_backlight_on(); | ||
77 | |||
63 | return true; | 78 | return true; |
64 | } | 79 | } |
80 | |||
65 | void _backlight_on(void) | 81 | void _backlight_on(void) |
66 | { | 82 | { |
67 | set_backlight(300, 7); | 83 | set_backlight_on(); |
68 | } | 84 | } |
85 | |||
69 | void _backlight_off(void) | 86 | void _backlight_off(void) |
70 | { | 87 | { |
71 | set_backlight(300, 0); | 88 | set_backlight_off(); |
72 | } | 89 | } |
73 | 90 | ||
74 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS | 91 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS |
75 | void _backlight_set_brightness(int brightness) | 92 | void _backlight_set_brightness(int brightness) |
76 | { | 93 | { |
77 | (void)brightness; | 94 | set_backlight(brightness); |
78 | return; | ||
79 | } | 95 | } |
80 | #endif | 96 | #endif |
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c index 3846987026..f7c6a137fc 100644 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c | |||
@@ -194,8 +194,6 @@ static void _set_lcd_bus(void) | |||
194 | REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT | 194 | REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT |
195 | | SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING | 195 | | SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING |
196 | | SLCD_CFG_TYPE_PARALLEL); | 196 | | SLCD_CFG_TYPE_PARALLEL); |
197 | |||
198 | REG_SLCD_CTRL = SLCD_CTRL_DMA_EN; | ||
199 | } | 197 | } |
200 | 198 | ||
201 | static void _set_lcd_clock(void) | 199 | static void _set_lcd_clock(void) |
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c index dd169c3a44..0f1cfca937 100644 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c | |||
@@ -22,21 +22,22 @@ | |||
22 | #include "config.h" | 22 | #include "config.h" |
23 | #include "system.h" | 23 | #include "system.h" |
24 | #include "jz4740.h" | 24 | #include "jz4740.h" |
25 | #include "button.h" | ||
25 | #include "button-target.h" | 26 | #include "button-target.h" |
26 | 27 | ||
27 | #define BTN_VOL_DOWN (1 << 27) | ||
28 | #define BTN_VOL_UP (1 << 0) | ||
29 | #define BTN_MENU (1 << 1) | ||
30 | #define BTN_OFF (1 << 29) | 28 | #define BTN_OFF (1 << 29) |
29 | #define BTN_VOL_DOWN (1 << 27) | ||
31 | #define BTN_HOLD (1 << 16) | 30 | #define BTN_HOLD (1 << 16) |
32 | #define BTN_MASK (BTN_VOL_DOWN | BTN_VOL_UP \ | 31 | #define BTN_MENU (1 << 1) |
33 | | BTN_MENU | BTN_OFF ) | 32 | #define BTN_VOL_UP (1 << 0) |
33 | #define BTN_MASK (BTN_OFF | BTN_VOL_DOWN | \ | ||
34 | BTN_MENU | BTN_VOL_UP) | ||
34 | 35 | ||
35 | 36 | ||
36 | #define TS_AD_COUNT 5 | 37 | #define TS_AD_COUNT 5 |
37 | #define M_SADC_CFG_SNUM ((TS_AD_COUNT - 1) << SADC_CFG_SNUM_BIT) | 38 | #define M_SADC_CFG_SNUM ((TS_AD_COUNT - 1) << SADC_CFG_SNUM_BIT) |
38 | 39 | ||
39 | #define SADC_CFG_INIT ( \ | 40 | #define SADC_CFG_INIT ( \ |
40 | (2 << SADC_CFG_CLKOUT_NUM_BIT) | \ | 41 | (2 << SADC_CFG_CLKOUT_NUM_BIT) | \ |
41 | SADC_CFG_XYZ1Z2 | \ | 42 | SADC_CFG_XYZ1Z2 | \ |
42 | M_SADC_CFG_SNUM | \ | 43 | M_SADC_CFG_SNUM | \ |
@@ -45,20 +46,23 @@ | |||
45 | SADC_CFG_CMD_INT_PEN \ | 46 | SADC_CFG_CMD_INT_PEN \ |
46 | ) | 47 | ) |
47 | 48 | ||
48 | static bool pendown_flag = false; | ||
49 | static short x_pos = -1, y_pos = -1, datacount = 0; | 49 | static short x_pos = -1, y_pos = -1, datacount = 0; |
50 | static short stable_x_pos = -1, stable_y_pos = -1; | 50 | static bool pen_down = false; |
51 | static int cur_touch = 0; | ||
51 | 52 | ||
52 | bool button_hold(void) | 53 | static enum touchscreen_mode current_mode = TOUCHSCREEN_POINT; |
54 | static int touchscreen_buttons[3][3] = | ||
53 | { | 55 | { |
54 | return (~REG_GPIO_PXPIN(3) & BTN_HOLD ? 1 : 0); | 56 | {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT}, |
55 | } | 57 | {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT}, |
58 | {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT} | ||
59 | }; | ||
56 | 60 | ||
57 | void button_init_device(void) | 61 | void button_init_device(void) |
58 | { | 62 | { |
59 | REG_SADC_ENA = 0; | 63 | REG_SADC_ENA = 0; |
60 | REG_SADC_STATE &= (~REG_SADC_STATE); | 64 | REG_SADC_STATE &= (~REG_SADC_STATE); |
61 | REG_SADC_CTRL = 0x1f; | 65 | REG_SADC_CTRL = 0x1F; |
62 | 66 | ||
63 | __cpm_start_sadc(); | 67 | __cpm_start_sadc(); |
64 | REG_SADC_CFG = SADC_CFG_INIT; | 68 | REG_SADC_CFG = SADC_CFG_INIT; |
@@ -71,15 +75,15 @@ void button_init_device(void) | |||
71 | REG_SADC_CTRL &= (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM)); | 75 | REG_SADC_CTRL &= (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM)); |
72 | REG_SADC_ENA = SADC_ENA_TSEN; //| SADC_ENA_PBATEN | SADC_ENA_SADCINEN); | 76 | REG_SADC_ENA = SADC_ENA_TSEN; //| SADC_ENA_PBATEN | SADC_ENA_SADCINEN); |
73 | 77 | ||
74 | __gpio_port_as_input(3, 29); | 78 | __gpio_as_input(32*3 + 29); |
75 | __gpio_port_as_input(3, 27); | 79 | __gpio_as_input(32*3 + 27); |
76 | __gpio_port_as_input(3, 16); | 80 | __gpio_as_input(32*3 + 16); |
77 | __gpio_port_as_input(3, 1); | 81 | __gpio_as_input(32*3 + 1); |
78 | __gpio_port_as_input(3, 0); | 82 | __gpio_as_input(32*3 + 0); |
79 | } | 83 | } |
80 | 84 | ||
81 | static int touch_to_pixels(short x, short y) | 85 | static int touch_to_pixels(short x, short y) |
82 | { | 86 | { |
83 | /* X:300 -> 3800 Y:300->3900 */ | 87 | /* X:300 -> 3800 Y:300->3900 */ |
84 | x -= 300; | 88 | x -= 300; |
85 | y -= 300; | 89 | y -= 300; |
@@ -102,68 +106,56 @@ static int touch_to_pixels(short x, short y) | |||
102 | #endif | 106 | #endif |
103 | } | 107 | } |
104 | 108 | ||
109 | bool button_hold(void) | ||
110 | { | ||
111 | return ((~REG_GPIO_PXPIN(3)) & BTN_HOLD ? true : false); | ||
112 | } | ||
113 | |||
105 | int button_read_device(int *data) | 114 | int button_read_device(int *data) |
106 | { | 115 | { |
107 | if(button_hold()) | 116 | int ret = 0, tmp; |
117 | |||
118 | if((~REG_GPIO_PXPIN(3)) & BTN_HOLD) | ||
108 | return 0; | 119 | return 0; |
109 | 120 | ||
110 | unsigned int key = ~(__gpio_get_port(3)); | 121 | tmp = (~REG_GPIO_PXPIN(3)) & BTN_MASK; |
111 | int ret = 0; | 122 | |
112 | 123 | if(tmp & BTN_VOL_DOWN) | |
113 | if(key & BTN_MASK) | 124 | ret |= BUTTON_VOL_DOWN; |
125 | if(tmp & BTN_VOL_UP) | ||
126 | ret |= BUTTON_VOL_UP; | ||
127 | if(tmp & BTN_MENU) | ||
128 | ret |= BUTTON_MENU; | ||
129 | if(tmp & BTN_OFF) | ||
130 | ret |= BUTTON_POWER; | ||
131 | |||
132 | if(current_mode == TOUCHSCREEN_BUTTON && cur_touch != 0) | ||
114 | { | 133 | { |
115 | if(key & BTN_VOL_DOWN) | 134 | int px_x = cur_touch >> 16; |
116 | ret |= BUTTON_VOL_DOWN; | 135 | int px_y = cur_touch & 0xFFFF; |
117 | if(key & BTN_VOL_UP) | 136 | ret |= touchscreen_buttons[px_y/(LCD_HEIGHT/3)] |
118 | ret |= BUTTON_VOL_UP; | 137 | [px_x/(LCD_WIDTH/3)]; |
119 | if(key & BTN_MENU) | ||
120 | ret |= BUTTON_MENU; | ||
121 | if(key & BTN_OFF) | ||
122 | ret |= BUTTON_POWER; | ||
123 | } | 138 | } |
124 | 139 | else if(pen_down) | |
125 | if(data != NULL) | ||
126 | { | 140 | { |
127 | if(pendown_flag) | 141 | ret |= BUTTON_TOUCH; |
128 | { | 142 | if(data != NULL) |
129 | *data = touch_to_pixels(stable_x_pos, stable_y_pos); | 143 | *data = cur_touch; |
130 | ret |= BUTTON_TOUCH; | ||
131 | } | ||
132 | else | ||
133 | *data = 0; | ||
134 | } | 144 | } |
135 | 145 | ||
136 | return ret; | 146 | return ret; |
137 | } | 147 | } |
138 | 148 | ||
139 | /* | 149 | void touchscreen_set_mode(enum touchscreen_mode mode) |
140 | static enum touchpad_mode current_mode = TOUCHPAD_POINT; | ||
141 | |||
142 | static bool touch_available = false; | ||
143 | |||
144 | static int touchpad_buttons[3][3] = | ||
145 | { | ||
146 | {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT}, | ||
147 | {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT}, | ||
148 | {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT} | ||
149 | }; | ||
150 | |||
151 | void touchpad_set_mode(enum touchpad_mode mode) | ||
152 | { | 150 | { |
153 | current_mode = mode; | 151 | current_mode = mode; |
154 | } | 152 | } |
155 | 153 | ||
156 | enum touchpad_mode touchpad_get_mode(void) | 154 | enum touchscreen_mode touchscreen_get_mode(void) |
157 | { | 155 | { |
158 | return current_mode; | 156 | return current_mode; |
159 | } | 157 | } |
160 | 158 | ||
161 | void button_set_touch_available(void) | ||
162 | { | ||
163 | touch_available = true; | ||
164 | } | ||
165 | */ | ||
166 | |||
167 | /* Interrupt handler */ | 159 | /* Interrupt handler */ |
168 | void SADC(void) | 160 | void SADC(void) |
169 | { | 161 | { |
@@ -179,18 +171,17 @@ void SADC(void) | |||
179 | /* Pen down IRQ */ | 171 | /* Pen down IRQ */ |
180 | REG_SADC_CTRL &= (~(SADC_CTRL_PENUM | SADC_CTRL_TSRDYM)); | 172 | REG_SADC_CTRL &= (~(SADC_CTRL_PENUM | SADC_CTRL_TSRDYM)); |
181 | REG_SADC_CTRL |= (SADC_CTRL_PENDM); | 173 | REG_SADC_CTRL |= (SADC_CTRL_PENDM); |
182 | pendown_flag = true; | 174 | pen_down = true; |
183 | } | 175 | } |
184 | if(state & SADC_CTRL_PENUM) | 176 | if(state & SADC_CTRL_PENUM) |
185 | { | 177 | { |
186 | /* Pen up IRQ */ | 178 | /* Pen up IRQ */ |
187 | REG_SADC_CTRL &= (~SADC_CTRL_PENDM ); | 179 | REG_SADC_CTRL &= (~SADC_CTRL_PENDM ); |
188 | REG_SADC_CTRL |= SADC_CTRL_PENUM; | 180 | REG_SADC_CTRL |= SADC_CTRL_PENUM; |
189 | pendown_flag = false; | 181 | pen_down = false; |
190 | x_pos = -1; | 182 | x_pos = -1; |
191 | y_pos = -1; | 183 | y_pos = -1; |
192 | stable_x_pos = -1; | 184 | cur_touch = 0; |
193 | stable_y_pos = -1; | ||
194 | } | 185 | } |
195 | if(state & SADC_CTRL_TSRDYM) | 186 | if(state & SADC_CTRL_TSRDYM) |
196 | { | 187 | { |
@@ -200,15 +191,15 @@ void SADC(void) | |||
200 | 191 | ||
201 | dat = REG_SADC_TSDAT; | 192 | dat = REG_SADC_TSDAT; |
202 | 193 | ||
203 | xData = (dat >> 0) & 0xfff; | 194 | xData = (dat >> 0) & 0xFFF; |
204 | yData = (dat >> 16) & 0xfff; | 195 | yData = (dat >> 16) & 0xFFF; |
205 | 196 | ||
206 | dat = REG_SADC_TSDAT; | 197 | dat = REG_SADC_TSDAT; |
207 | tsz1Data = (dat >> 0) & 0xfff; | 198 | tsz1Data = (dat >> 0) & 0xFFF; |
208 | tsz2Data = (dat >> 16) & 0xfff; | 199 | tsz2Data = (dat >> 16) & 0xFFF; |
209 | 200 | ||
210 | if(!pendown_flag) | 201 | if( !pen_down ) |
211 | return ; | 202 | return; |
212 | 203 | ||
213 | tsz1Data = tsz2Data - tsz1Data; | 204 | tsz1Data = tsz2Data - tsz1Data; |
214 | 205 | ||
@@ -231,8 +222,7 @@ void SADC(void) | |||
231 | { | 222 | { |
232 | if(x_pos != -1) | 223 | if(x_pos != -1) |
233 | { | 224 | { |
234 | stable_x_pos = x_pos; | 225 | cur_touch = touch_to_pixels(x_pos, y_pos); |
235 | stable_y_pos = y_pos; | ||
236 | x_pos = -1; | 226 | x_pos = -1; |
237 | y_pos = -1; | 227 | y_pos = -1; |
238 | } | 228 | } |