diff options
-rw-r--r-- | bootloader/ondavx747.c | 60 | ||||
-rw-r--r-- | firmware/export/config-ondavx747.h | 8 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | 10 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c | 86 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c | 2 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c | 140 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/usb-jz4740.c | 33 |
7 files changed, 161 insertions, 178 deletions
diff --git a/bootloader/ondavx747.c b/bootloader/ondavx747.c index 1f6e3cbeac..d8fefd4f48 100644 --- a/bootloader/ondavx747.c +++ b/bootloader/ondavx747.c | |||
@@ -42,48 +42,6 @@ static void audiotest(void) | |||
42 | __aic_enable_loopback(); | 42 | __aic_enable_loopback(); |
43 | } | 43 | } |
44 | 44 | ||
45 | /* CP0 hazard avoidance. */ | ||
46 | #define BARRIER __asm__ __volatile__(".set noreorder\n\t" \ | ||
47 | "nop; nop; nop; nop; nop; nop;\n\t" \ | ||
48 | ".set reorder\n\t") | ||
49 | static void show_tlb(void) | ||
50 | { | ||
51 | #define ASID_MASK 0xFF | ||
52 | |||
53 | unsigned int old_ctx; | ||
54 | unsigned int entry; | ||
55 | unsigned int entrylo0, entrylo1, entryhi; | ||
56 | unsigned int pagemask; | ||
57 | |||
58 | cli(); | ||
59 | |||
60 | /* Save old context */ | ||
61 | old_ctx = (read_c0_entryhi() & 0xff); | ||
62 | |||
63 | printf("TLB content:"); | ||
64 | for(entry = 0; entry < 32; entry++) | ||
65 | { | ||
66 | write_c0_index(entry); | ||
67 | BARRIER; | ||
68 | tlb_read(); | ||
69 | BARRIER; | ||
70 | entryhi = read_c0_entryhi(); | ||
71 | entrylo0 = read_c0_entrylo0(); | ||
72 | entrylo1 = read_c0_entrylo1(); | ||
73 | pagemask = read_c0_pagemask(); | ||
74 | printf("%02d: ASID=%02d%s VA=0x%08x", entry, entryhi & ASID_MASK, (entrylo0 & entrylo1 & 1) ? "(G)" : " ", entryhi & ~ASID_MASK); | ||
75 | printf("PA0=0x%08x C0=%x %s%s%s", (entrylo0>>6)<<12, (entrylo0>>3) & 7, (entrylo0 & 4) ? "Dirty " : "", (entrylo0 & 2) ? "Valid " : "Invalid ", (entrylo0 & 1) ? "Global" : ""); | ||
76 | printf("PA1=0x%08x C1=%x %s%s%s", (entrylo1>>6)<<12, (entrylo1>>3) & 7, (entrylo1 & 4) ? "Dirty " : "", (entrylo1 & 2) ? "Valid " : "Invalid ", (entrylo1 & 1) ? "Global" : ""); | ||
77 | |||
78 | printf("pagemask=0x%08x entryhi=0x%08x", pagemask, entryhi); | ||
79 | printf("entrylo0=0x%08x entrylo1=0x%08x", entrylo0, entrylo1); | ||
80 | } | ||
81 | BARRIER; | ||
82 | write_c0_entryhi(old_ctx); | ||
83 | |||
84 | sti(); | ||
85 | } | ||
86 | |||
87 | int main(void) | 45 | int main(void) |
88 | { | 46 | { |
89 | kernel_init(); | 47 | kernel_init(); |
@@ -135,12 +93,15 @@ int main(void) | |||
135 | { | 93 | { |
136 | memset(testdata, 0, 4096); | 94 | memset(testdata, 0, 4096); |
137 | reset_screen(); | 95 | reset_screen(); |
138 | jz_nand_read(2, j, &testdata); | 96 | jz_nand_read(0, j, &testdata); |
139 | printf("Page %d", j); | 97 | printf("Page %d", j); |
140 | int i; | 98 | int i; |
141 | for(i=0; i<256; i+=8) | 99 | for(i=0; i<768; i+=16) |
142 | { | 100 | { |
143 | snprintf(msg, 30, "%02c%02c%02c%02c%02c%02c%02c%02c", testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7]); | 101 | snprintf(msg, 30, "%02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x", |
102 | testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7], | ||
103 | testdata[i+8], testdata[i+9], testdata[i+10], testdata[i+11], testdata[i+12], testdata[i+13], testdata[i+14], testdata[i+15] | ||
104 | ); | ||
144 | printf(msg); | 105 | printf(msg); |
145 | } | 106 | } |
146 | while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN))); | 107 | while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN))); |
@@ -155,9 +116,13 @@ int main(void) | |||
155 | while(1) | 116 | while(1) |
156 | { | 117 | { |
157 | #ifdef ONDA_VX747 | 118 | #ifdef ONDA_VX747 |
119 | #if 1 | ||
158 | btn = button_get(false); | 120 | btn = button_get(false); |
159 | touch = button_get_data(); | 121 | touch = button_get_data(); |
160 | #else | 122 | #else |
123 | btn = button_read_device(&touch); | ||
124 | #endif | ||
125 | #else | ||
161 | btn = button_read_device(); | 126 | btn = button_read_device(); |
162 | #endif | 127 | #endif |
163 | #define KNOP(x,y) lcd_set_foreground(LCD_BLACK); \ | 128 | #define KNOP(x,y) lcd_set_foreground(LCD_BLACK); \ |
@@ -174,11 +139,6 @@ int main(void) | |||
174 | printf("BUTTON_HOLD"); | 139 | printf("BUTTON_HOLD"); |
175 | asm("break 0x7"); | 140 | asm("break 0x7"); |
176 | } | 141 | } |
177 | if(btn & BUTTON_VOL_DOWN) | ||
178 | { | ||
179 | reset_screen(); | ||
180 | show_tlb(); | ||
181 | } | ||
182 | if(btn & BUTTON_POWER) | 142 | if(btn & BUTTON_POWER) |
183 | { | 143 | { |
184 | power_off(); | 144 | power_off(); |
diff --git a/firmware/export/config-ondavx747.h b/firmware/export/config-ondavx747.h index e015a53374..9a7f53568a 100644 --- a/firmware/export/config-ondavx747.h +++ b/firmware/export/config-ondavx747.h | |||
@@ -83,10 +83,10 @@ | |||
83 | #define HAVE_BACKLIGHT_BRIGHTNESS | 83 | #define HAVE_BACKLIGHT_BRIGHTNESS |
84 | 84 | ||
85 | /* Main LCD backlight brightness range and defaults */ | 85 | /* Main LCD backlight brightness range and defaults */ |
86 | #define MIN_BRIGHTNESS_SETTING 0 /* TODO */ | 86 | #define MIN_BRIGHTNESS_SETTING 100 |
87 | #define MAX_BRIGHTNESS_SETTING 127 | 87 | #define MAX_BRIGHTNESS_SETTING 300 |
88 | #define DEFAULT_BRIGHTNESS_SETTING 85 | 88 | #define DEFAULT_BRIGHTNESS_SETTING 300 /* "full brightness" */ |
89 | #define DEFAULT_DIMNESS_SETTING 22 | 89 | #define DEFAULT_DIMNESS_SETTING 100 /* "most dim" */ |
90 | 90 | ||
91 | /* Define this if you have a software controlled poweroff */ | 91 | /* Define this if you have a software controlled poweroff */ |
92 | //#define HAVE_SW_POWEROFF | 92 | //#define HAVE_SW_POWEROFF |
diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c index 90ecfc6a3a..af5a132e30 100644 --- a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include "lcd.h" | 24 | #include "lcd.h" |
25 | #include "lcd-target.h" | 25 | #include "lcd-target.h" |
26 | #include "system-target.h" | 26 | #include "system-target.h" |
27 | #include "kernel.h" | ||
27 | 28 | ||
28 | static volatile bool _lcd_on = false; | 29 | static volatile bool _lcd_on = false; |
29 | static volatile bool lcd_poweroff = false; | 30 | static volatile bool lcd_poweroff = false; |
@@ -70,11 +71,18 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
70 | 71 | ||
71 | __dcache_writeback_all(); /* Size of framebuffer is way bigger than cache size */ | 72 | __dcache_writeback_all(); /* Size of framebuffer is way bigger than cache size */ |
72 | 73 | ||
74 | while(REG_SLCD_STATE & SLCD_STATE_BUSY); | ||
75 | REG_SLCD_CTRL = SLCD_CTRL_DMA_EN; | ||
76 | |||
73 | REG_DMAC_DMACR = DMAC_DMACR_DMAE; | 77 | REG_DMAC_DMACR = DMAC_DMACR_DMAE; |
74 | 78 | ||
75 | while( !(REG_DMAC_DCCSR(0) & DMAC_DCCSR_TT) ) | 79 | while( !(REG_DMAC_DCCSR(0) & DMAC_DCCSR_TT) ) |
76 | asm("nop"); | 80 | yield(); |
81 | |||
82 | REG_DMAC_DMACR = 0; | ||
77 | 83 | ||
84 | while(REG_SLCD_STATE & SLCD_STATE_BUSY); | ||
85 | REG_SLCD_CTRL = 0; | ||
78 | } | 86 | } |
79 | 87 | ||
80 | /* Update the display. | 88 | /* Update the display. |
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 | } |
diff --git a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c index cf107397e3..2121d3e4b0 100644 --- a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c | |||
@@ -497,7 +497,7 @@ static inline u32 jz_readl(u32 address) | |||
497 | 497 | ||
498 | #define TXFIFOEP0 USB_FIFO_EP0 | 498 | #define TXFIFOEP0 USB_FIFO_EP0 |
499 | 499 | ||
500 | u32 Bulk_in_buf[BULK_IN_BUF_SIZE]; | 500 | u8 *Bulk_in_buf; |
501 | u32 Bulk_out_buf[BULK_OUT_BUF_SIZE]; | 501 | u32 Bulk_out_buf[BULK_OUT_BUF_SIZE]; |
502 | u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size; | 502 | u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size; |
503 | u16 handshake_PKT[4]={0,0,0,0}; | 503 | u16 handshake_PKT[4]={0,0,0,0}; |
@@ -560,12 +560,14 @@ void HW_SendPKT(int ep, const u8 *buf, int size) | |||
560 | Bulk_in_size - Bulk_in_finish); | 560 | Bulk_in_size - Bulk_in_finish); |
561 | usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); | 561 | usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); |
562 | Bulk_in_finish = Bulk_in_size; | 562 | Bulk_in_finish = Bulk_in_size; |
563 | } else | 563 | } |
564 | else | ||
564 | { | 565 | { |
565 | udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish), | 566 | udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish), |
566 | fifosize[ep]); | 567 | fifosize[ep]); |
567 | usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); | 568 | usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY); |
568 | Bulk_in_finish += fifosize[ep]; | 569 | Bulk_in_finish += fifosize[ep]; |
570 | Bulk_in_buf = (u8*)buf; | ||
569 | } | 571 | } |
570 | } | 572 | } |
571 | else //EP0 | 573 | else //EP0 |
@@ -645,7 +647,7 @@ static struct { | |||
645 | (1 << 7) | 1,// endpoint 2 is IN endpoint | 647 | (1 << 7) | 1,// endpoint 2 is IN endpoint |
646 | 2, /* bulk */ | 648 | 2, /* bulk */ |
647 | 512, | 649 | 512, |
648 | 16 | 650 | 0 |
649 | }, | 651 | }, |
650 | { | 652 | { |
651 | sizeof(USB_EndPointDescriptor), | 653 | sizeof(USB_EndPointDescriptor), |
@@ -653,7 +655,7 @@ static struct { | |||
653 | (0 << 7) | 1,// endpoint 5 is OUT endpoint | 655 | (0 << 7) | 1,// endpoint 5 is OUT endpoint |
654 | 2, /* bulk */ | 656 | 2, /* bulk */ |
655 | 512, /* OUT EP FIFO size */ | 657 | 512, /* OUT EP FIFO size */ |
656 | 16 | 658 | 0 |
657 | } | 659 | } |
658 | } | 660 | } |
659 | }; | 661 | }; |
@@ -822,21 +824,27 @@ void usbHandleStandDevReq(u8 *buf) | |||
822 | } | 824 | } |
823 | } | 825 | } |
824 | 826 | ||
825 | extern char printfbuf[256]; | 827 | unsigned char nandbuffer[4096]; |
826 | 828 | ||
827 | void usbHandleVendorReq(u8 *buf) | 829 | void usbHandleVendorReq(u8 *buf) |
828 | { | 830 | { |
829 | int ret_state, i; | ||
830 | USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; | 831 | USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf; |
831 | switch (dreq->bRequest) | 832 | switch (dreq->bRequest) |
832 | { | 833 | { |
834 | case 0xB0: | ||
835 | memset(&nandbuffer, 0, 4096); | ||
836 | jz_nand_read(dreq->wValue, dreq->wIndex, &nandbuffer); | ||
837 | //printf("Read block %d page %d", dreq->wValue, dreq->wIndex); | ||
838 | udc_state = IDLE; | ||
839 | break; | ||
833 | case 0xAB: | 840 | case 0xAB: |
834 | //for(i=0; i<256; i+=64) | 841 | HW_SendPKT(1, nandbuffer, 4096); |
835 | HW_SendPKT(0, printfbuf, 64); | 842 | //printf("Send data"); |
836 | udc_state = IDLE; | 843 | //udc_state = BULK_OUT; |
837 | break; | 844 | break; |
838 | case 0x12: | 845 | case 0x12: |
839 | HW_SendPKT(0, "TEST", 4); | 846 | HW_SendPKT(0, "TEST", 4); |
847 | //printf("Send test"); | ||
840 | udc_state = IDLE; | 848 | udc_state = IDLE; |
841 | break; | 849 | break; |
842 | } | 850 | } |
@@ -874,7 +882,7 @@ void EP0_Handler (void) | |||
874 | byCSR0 = jz_readb(USB_REG_CSR0); | 882 | byCSR0 = jz_readb(USB_REG_CSR0); |
875 | 883 | ||
876 | /* Check for SentStall | 884 | /* Check for SentStall |
877 | if sendtall is set ,clear the sendstall bit*/ | 885 | if sendstall is set ,clear the sendstall bit*/ |
878 | if (byCSR0 & USB_CSR0_SENTSTALL) | 886 | if (byCSR0 & USB_CSR0_SENTSTALL) |
879 | { | 887 | { |
880 | jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL)); | 888 | jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL)); |
@@ -942,7 +950,8 @@ void EPIN_Handler(u8 EP) | |||
942 | Bulk_in_size - Bulk_in_finish); | 950 | Bulk_in_size - Bulk_in_finish); |
943 | usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY); | 951 | usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY); |
944 | Bulk_in_finish = Bulk_in_size; | 952 | Bulk_in_finish = Bulk_in_size; |
945 | } else | 953 | } |
954 | else | ||
946 | { | 955 | { |
947 | udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish), | 956 | udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish), |
948 | fifosize[EP]); | 957 | fifosize[EP]); |
@@ -1030,6 +1039,8 @@ void __udc_start(void) | |||
1030 | 1039 | ||
1031 | void usb_init_device(void) | 1040 | void usb_init_device(void) |
1032 | { | 1041 | { |
1042 | REG_USB_REG_POWER &= ~USB_POWER_SOFTCONN; | ||
1043 | REG_USB_REG_POWER |= USB_POWER_SOFTCONN; | ||
1033 | __udc_start(); | 1044 | __udc_start(); |
1034 | } | 1045 | } |
1035 | 1046 | ||