diff options
author | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2009-07-26 13:27:12 +0000 |
---|---|---|
committer | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2009-07-26 13:27:12 +0000 |
commit | 4ce26ff328c632260441c30ffad66856bd9a2e0d (patch) | |
tree | 66af83d84a88a4b5d47ca7e3b9b5c14657e741a5 /firmware | |
parent | 9e9fb929b43ece21ce47c27052e6f0fef057ce22 (diff) | |
download | rockbox-4ce26ff328c632260441c30ffad66856bd9a2e0d.tar.gz rockbox-4ce26ff328c632260441c30ffad66856bd9a2e0d.zip |
Onda VX747: don't fully init the LCD when not doing an USB_BOOT compile (fixes flashes when booting up)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22051 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c | 29 |
1 files changed, 19 insertions, 10 deletions
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 f9ce62f7da..b2ed9bc439 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 | |||
@@ -36,23 +36,24 @@ do { \ | |||
36 | REG_GPIO_PXPES(2) = 0x001cffff; \ | 36 | REG_GPIO_PXPES(2) = 0x001cffff; \ |
37 | } while (0) | 37 | } while (0) |
38 | 38 | ||
39 | |||
40 | #define SLEEP(x) { register int __i; for(__i=0; __i<x; __i++) asm volatile("nop\n nop\n"); } | 39 | #define SLEEP(x) { register int __i; for(__i=0; __i<x; __i++) asm volatile("nop\n nop\n"); } |
41 | #define DELAY SLEEP(700000); | 40 | #define DELAY SLEEP(700000); |
41 | #ifdef USB_BOOT | ||
42 | static void _display_pin_init(void) | 42 | static void _display_pin_init(void) |
43 | { | 43 | { |
44 | my__gpio_as_lcd_16bit(); | 44 | my__gpio_as_lcd_16bit(); |
45 | __gpio_as_output(PIN_CS_N); | 45 | __gpio_as_output(PIN_CS_N); |
46 | __gpio_as_output(PIN_RESET_N); | 46 | __gpio_as_output(PIN_RESET_N); |
47 | __gpio_clear_pin(PIN_CS_N); | 47 | __gpio_clear_pin(PIN_CS_N); |
48 | 48 | ||
49 | __gpio_set_pin(PIN_RESET_N); | 49 | __gpio_set_pin(PIN_RESET_N); |
50 | DELAY; | 50 | DELAY; |
51 | __gpio_clear_pin(PIN_RESET_N); | 51 | __gpio_clear_pin(PIN_RESET_N); |
52 | DELAY; | 52 | DELAY; |
53 | __gpio_set_pin(PIN_RESET_N); | 53 | __gpio_set_pin(PIN_RESET_N); |
54 | DELAY; | 54 | DELAY; |
55 | } | 55 | } |
56 | #endif | ||
56 | 57 | ||
57 | #define WAIT_ON_SLCD while(REG_SLCD_STATE & SLCD_STATE_BUSY); | 58 | #define WAIT_ON_SLCD while(REG_SLCD_STATE & SLCD_STATE_BUSY); |
58 | #define SLCD_SET_DATA(x) WAIT_ON_SLCD; REG_SLCD_DATA = (x) | SLCD_DATA_RS_DATA; | 59 | #define SLCD_SET_DATA(x) WAIT_ON_SLCD; REG_SLCD_DATA = (x) | SLCD_DATA_RS_DATA; |
@@ -60,23 +61,28 @@ static void _display_pin_init(void) | |||
60 | #define SLCD_SEND_COMMAND(cmd,val) SLCD_SET_COMMAND(cmd); SLCD_SET_DATA(val); | 61 | #define SLCD_SEND_COMMAND(cmd,val) SLCD_SET_COMMAND(cmd); SLCD_SET_DATA(val); |
61 | static void _display_init(void) | 62 | static void _display_init(void) |
62 | { | 63 | { |
64 | #ifdef USB_BOOT | ||
63 | SLCD_SEND_COMMAND(REG_SOFT_RESET, SOFT_RESET(1)); | 65 | SLCD_SEND_COMMAND(REG_SOFT_RESET, SOFT_RESET(1)); |
64 | SLEEP(700000); | 66 | SLEEP(700000); |
65 | SLCD_SEND_COMMAND(REG_SOFT_RESET, SOFT_RESET(0)); | 67 | SLCD_SEND_COMMAND(REG_SOFT_RESET, SOFT_RESET(0)); |
66 | SLEEP(700000); | 68 | SLEEP(700000); |
67 | SLCD_SEND_COMMAND(REG_ENDIAN_CTRL, 0); | 69 | SLCD_SEND_COMMAND(REG_ENDIAN_CTRL, 0); |
68 | 70 | ||
69 | SLCD_SEND_COMMAND(REG_DRIVER_OUTPUT, 0x100); | 71 | SLCD_SEND_COMMAND(REG_DRIVER_OUTPUT, 0x100); |
70 | SLCD_SEND_COMMAND(REG_LCD_DR_WAVE_CTRL, 0x100); | 72 | SLCD_SEND_COMMAND(REG_LCD_DR_WAVE_CTRL, 0x100); |
73 | #endif | ||
74 | |||
71 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT | 75 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT |
72 | SLCD_SEND_COMMAND(REG_ENTRY_MODE, (ENTRY_MODE_BGR | ENTRY_MODE_VID | ENTRY_MODE_HID)); | 76 | SLCD_SEND_COMMAND(REG_ENTRY_MODE, (ENTRY_MODE_BGR | ENTRY_MODE_VID | ENTRY_MODE_HID)); |
73 | #else | 77 | #else |
74 | SLCD_SEND_COMMAND(REG_ENTRY_MODE, (ENTRY_MODE_BGR | ENTRY_MODE_VID | ENTRY_MODE_AM)); | 78 | SLCD_SEND_COMMAND(REG_ENTRY_MODE, (ENTRY_MODE_BGR | ENTRY_MODE_VID | ENTRY_MODE_AM)); |
75 | #endif | 79 | #endif |
80 | |||
81 | #ifdef USB_BOOT | ||
76 | SLCD_SEND_COMMAND(REG_DISP_CTRL2, 0x503); | 82 | SLCD_SEND_COMMAND(REG_DISP_CTRL2, 0x503); |
77 | SLCD_SEND_COMMAND(REG_DISP_CTRL3, 1); | 83 | SLCD_SEND_COMMAND(REG_DISP_CTRL3, 1); |
78 | SLCD_SEND_COMMAND(REG_LPCTRL, 0x10); | 84 | SLCD_SEND_COMMAND(REG_LPCTRL, 0x10); |
79 | SLCD_SEND_COMMAND(REG_EXT_DISP_CTRL1, 0); | 85 | SLCD_SEND_COMMAND(REG_EXT_DISP_CTRL1, EXT_DISP_CTRL1_RIM(1)); /* 16-bit RGB interface */ |
80 | SLCD_SEND_COMMAND(REG_EXT_DISP_CTRL2, 0); | 86 | SLCD_SEND_COMMAND(REG_EXT_DISP_CTRL2, 0); |
81 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, DISP_CTRL1_D(1)); | 87 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, DISP_CTRL1_D(1)); |
82 | SLCD_SEND_COMMAND(REG_PAN_INTF_CTRL1, 0x12); | 88 | SLCD_SEND_COMMAND(REG_PAN_INTF_CTRL1, 0x12); |
@@ -127,7 +133,7 @@ static void _display_init(void) | |||
127 | SLCD_SEND_COMMAND(0x7f4, 0x22); | 133 | SLCD_SEND_COMMAND(0x7f4, 0x22); |
128 | SLCD_SEND_COMMAND(0x7f5, 1); | 134 | SLCD_SEND_COMMAND(0x7f5, 1); |
129 | SLCD_SEND_COMMAND(0x7f0, 0); | 135 | SLCD_SEND_COMMAND(0x7f0, 0); |
130 | 136 | ||
131 | /* LCD ON */ | 137 | /* LCD ON */ |
132 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, (DISP_CTRL1_BASEE | DISP_CTRL1_VON | | 138 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, (DISP_CTRL1_BASEE | DISP_CTRL1_VON | |
133 | DISP_CTRL1_GON | DISP_CTRL1_DTE | DISP_CTRL1_D(3))); | 139 | DISP_CTRL1_GON | DISP_CTRL1_DTE | DISP_CTRL1_D(3))); |
@@ -138,6 +144,7 @@ static void _display_init(void) | |||
138 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, (DISP_CTRL1_BASEE | DISP_CTRL1_VON | | 144 | SLCD_SEND_COMMAND(REG_DISP_CTRL1, (DISP_CTRL1_BASEE | DISP_CTRL1_VON | |
139 | DISP_CTRL1_GON | DISP_CTRL1_DTE | DISP_CTRL1_D(3))); | 145 | DISP_CTRL1_GON | DISP_CTRL1_DTE | DISP_CTRL1_D(3))); |
140 | SLEEP(3500000); | 146 | SLEEP(3500000); |
147 | #endif /* USB_BOOT */ | ||
141 | } | 148 | } |
142 | 149 | ||
143 | static void _display_on(void) | 150 | static void _display_on(void) |
@@ -168,7 +175,7 @@ static void _set_lcd_bus(void) | |||
168 | { | 175 | { |
169 | REG_LCD_CFG &= ~LCD_CFG_LCDPIN_MASK; | 176 | REG_LCD_CFG &= ~LCD_CFG_LCDPIN_MASK; |
170 | REG_LCD_CFG |= LCD_CFG_LCDPIN_SLCD; | 177 | REG_LCD_CFG |= LCD_CFG_LCDPIN_SLCD; |
171 | 178 | ||
172 | REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT | | 179 | REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT | |
173 | SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING | | 180 | SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING | |
174 | SLCD_CFG_TYPE_PARALLEL); | 181 | SLCD_CFG_TYPE_PARALLEL); |
@@ -177,20 +184,22 @@ static void _set_lcd_bus(void) | |||
177 | static void _set_lcd_clock(void) | 184 | static void _set_lcd_clock(void) |
178 | { | 185 | { |
179 | unsigned int val; | 186 | unsigned int val; |
180 | 187 | ||
181 | __cpm_stop_lcd(); | 188 | __cpm_stop_lcd(); |
182 | 189 | ||
183 | val = (__cpm_get_pllout2() / LCD_PCLK) - 1; | 190 | val = (__cpm_get_pllout2() / LCD_PCLK) - 1; |
184 | if ( val > 0x1ff ) | 191 | if ( val > 0x1ff ) |
185 | val = 0x1ff; /* CPM_LPCDR is too large, set it to 0x1ff */ | 192 | val = 0x1ff; /* CPM_LPCDR is too large, set it to 0x1ff */ |
186 | __cpm_set_pixdiv(val); | 193 | __cpm_set_pixdiv(val); |
187 | 194 | ||
188 | __cpm_start_lcd(); | 195 | __cpm_start_lcd(); |
189 | } | 196 | } |
190 | 197 | ||
191 | void lcd_init_controller(void) | 198 | void lcd_init_controller(void) |
192 | { | 199 | { |
200 | #ifdef USB_BOOT | ||
193 | _display_pin_init(); | 201 | _display_pin_init(); |
202 | #endif | ||
194 | _set_lcd_bus(); | 203 | _set_lcd_bus(); |
195 | _set_lcd_clock(); | 204 | _set_lcd_clock(); |
196 | SLEEP(1000); | 205 | SLEEP(1000); |