summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-07-26 13:27:12 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-07-26 13:27:12 +0000
commit4ce26ff328c632260441c30ffad66856bd9a2e0d (patch)
tree66af83d84a88a4b5d47ca7e3b9b5c14657e741a5 /firmware/target/mips/ingenic_jz47xx
parent9e9fb929b43ece21ce47c27052e6f0fef057ce22 (diff)
downloadrockbox-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/target/mips/ingenic_jz47xx')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c29
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
42static void _display_pin_init(void) 42static 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);
61static void _display_init(void) 62static 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
143static void _display_on(void) 150static 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)
177static void _set_lcd_clock(void) 184static 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
191void lcd_init_controller(void) 198void 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);