diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c index 14a9febe59..5ed4054c8c 100644 --- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c +++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | |||
@@ -46,8 +46,7 @@ int lcd_default_contrast(void) | |||
46 | 46 | ||
47 | void lcd_set_contrast(int val) | 47 | void lcd_set_contrast(int val) |
48 | { | 48 | { |
49 | /* iirc there is an ltv250qv command to do this */ | 49 | /* find S6F2002 controller datasheet first */ |
50 | #warning function not implemented | ||
51 | (void)val; | 50 | (void)val; |
52 | } | 51 | } |
53 | 52 | ||
@@ -61,7 +60,6 @@ void lcd_set_flip(bool yesno) { | |||
61 | /* TODO: */ | 60 | /* TODO: */ |
62 | } | 61 | } |
63 | 62 | ||
64 | |||
65 | /* LTV250QV panel functions */ | 63 | /* LTV250QV panel functions */ |
66 | #ifdef ENABLE_DISPLAY_FUNCS | 64 | #ifdef ENABLE_DISPLAY_FUNCS |
67 | static void lcd_write_reg(unsigned char reg, unsigned short val) | 65 | static void lcd_write_reg(unsigned char reg, unsigned short val) |
@@ -161,14 +159,12 @@ static void lcd_display_on(void) | |||
161 | lcd_write_reg(9, 0xA55); | 159 | lcd_write_reg(9, 0xA55); |
162 | lcd_write_reg(10, 0x111A); | 160 | lcd_write_reg(10, 0x111A); |
163 | sleep_ms(10); | 161 | sleep_ms(10); |
164 | |||
165 | /*TODO: other stuff! */ | ||
166 | 162 | ||
167 | /* tell that we're on now */ | 163 | /* tell that we're on now */ |
168 | display_on = true; | 164 | display_on = true; |
169 | } | 165 | } |
170 | 166 | ||
171 | static void lcd_display_off(void) | 167 | void lcd_display_off(void) |
172 | { | 168 | { |
173 | display_on = false; | 169 | display_on = false; |
174 | 170 | ||
@@ -250,6 +246,48 @@ void lcd_init_device(void) | |||
250 | 246 | ||
251 | /* Clear the Frame */ | 247 | /* Clear the Frame */ |
252 | memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT); | 248 | memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT); |
249 | |||
250 | #ifdef ENABLE_DISPLAY_FUNCS | ||
251 | lcd_display_on(); | ||
252 | |||
253 | /* Set OSD clock */ | ||
254 | IO_CLK_MOD1 &= ~(CLK_MOD1_VENC | CLK_MOD1_OSD); /* disable OSD clock and VENC clock */ | ||
255 | IO_CLK_O2DIV = 3; | ||
256 | |||
257 | IO_CLK_OSEL &= ~CLK_OSEL_O2SEL(0xF); /* reset 'General purpose clock output (GIO26, GIO34)' and */ | ||
258 | IO_CLK_OSEL |= CLK_OSEL_O2SEL(4); /* set to 'PLLIN clock' */ | ||
259 | |||
260 | IO_CLK_SEL1 |= (CLK_SEL1_OSD | CLK_SEL1_VENC(7)); /* set to 'GP clock output 2 (GIO26, GIO34)' and turn on 'VENC clock' */ | ||
261 | IO_CLK_MOD1 |= (CLK_MOD1_VENC | CLK_MOD1_OSD); /* enable OSD clock and VENC clock */ | ||
262 | |||
263 | /* Set LCD values in Video Encoder */ | ||
264 | IO_VID_ENC_VMOD &= 0x8800; /* Clear all values */ | ||
265 | IO_VID_ENC_VMOD |= (VENC_VMOD_DACPD | VENC_VMOD_VMD | VENC_VMOD_ITLC | VENC_VMOD_VDMD(2)); /* set mode to RGB666 parallel 16 bit */ | ||
266 | IO_VID_ENC_VDTL &= 8FE8; /* Clear all values */ | ||
267 | IO_VID_ENC_VDCTL |= (VENC_VDCTL_VCLKP | VENC_VDCTL_DOMD(2)), | ||
268 | IO_VID_ENC_VPRO = VENC_VDPRO_PFLTR; | ||
269 | IO_VID_ENC_SYNCCTL &= 0xE000; /* Clear all values */ | ||
270 | IO_VID_ENC_SYNCCTL |= (VENC_SYNCCTL_VPL | VENC_SYNCCTL_HPL); | ||
271 | IO_VID_ENC_HSDLY = 0; | ||
272 | IO_VID_ENC_HSPLS = 0x12; | ||
273 | IO_VID_ENC_HSTART = 0x1B; | ||
274 | IO_VID_ENC_HVALID = 0x140; | ||
275 | IO_VID_ENC_HINT = 0x168; | ||
276 | IO_VID_ENC_VSDLY = 0; | ||
277 | IO_VID_ENC_VSPLS = 3; | ||
278 | IO_VID_ENC_VSTART = 5; | ||
279 | IO_VID_ENC_VVALID = 0xF0; | ||
280 | IO_VID_ENC_VINT = 0x118; | ||
281 | IO_VID_ENC_RGBCTL &= 0x088; /* Clear all values */ | ||
282 | IO_VID_ENC_RGBCTL |= VENC_RGBCTL_DFLTR; | ||
283 | IO_VID_ENC_RGBCLP = VENC_RGBCLP_UCLIP(0xFF); | ||
284 | IO_VID_ENC_LCDOUT &= 0xFE00; /* Clear all values */ | ||
285 | IO_VID_ENC_LCDOUT |= (VENC_LCDOUT_OEE | VENC_LCDOUT_FIDS); | ||
286 | IO_VID_ENC_DCLKCTL &= 0xC0C0; /* Clear all values */ | ||
287 | IO_VID_ENC_DCLKCTL |= VENC_DCLKCTL_DCKEC; | ||
288 | IO_VID_ENC_DCLKPTN0 = 1; | ||
289 | DM320_REG(0x0864) = 0; /* ???? */ | ||
290 | #endif | ||
253 | 291 | ||
254 | IO_OSD_MODE = 0x00ff; | 292 | IO_OSD_MODE = 0x00ff; |
255 | IO_OSD_VIDWINMD = 0x0002; | 293 | IO_OSD_VIDWINMD = 0x0002; |
@@ -264,35 +302,23 @@ void lcd_init_device(void) | |||
264 | IO_OSD_OSDWIN0ADL = addr & 0xFFFF; | 302 | IO_OSD_OSDWIN0ADL = addr & 0xFFFF; |
265 | 303 | ||
266 | #ifndef ZEN_VISION | 304 | #ifndef ZEN_VISION |
267 | IO_OSD_BASEPX=26; | 305 | IO_OSD_BASEPX = 26; |
268 | IO_OSD_BASEPY=5; | 306 | IO_OSD_BASEPY = 5; |
269 | #else | 307 | #else |
270 | IO_OSD_BASEPX=80; | 308 | IO_OSD_BASEPX = 80; |
271 | IO_OSD_BASEPY=0; | 309 | IO_OSD_BASEPY = 0; |
272 | #endif | 310 | #endif |
273 | 311 | ||
274 | IO_OSD_OSDWIN0XP = 0; | 312 | IO_OSD_OSDWIN0XP = 0; |
275 | IO_OSD_OSDWIN0YP = 0; | 313 | IO_OSD_OSDWIN0YP = 0; |
276 | IO_OSD_OSDWIN0XL = LCD_WIDTH; | 314 | IO_OSD_OSDWIN0XL = LCD_WIDTH; |
277 | IO_OSD_OSDWIN0YL = LCD_HEIGHT; | 315 | IO_OSD_OSDWIN0YL = LCD_HEIGHT; |
278 | #if 0 | 316 | |
279 | /*TODO: set LCD clock! */ | 317 | #ifdef ENABLE_DISPLAY_FUNCS |
280 | IO_CLK_MOD1 &= ~0x18; /* disable OSD clock and VENC clock */ | 318 | IO_VID_ENC_VDCTL |= VENC_VDCTL_VCLKE; /* Enable VCLK */ |
281 | IO_CLK_02DIV = 3; | 319 | IO_VID_ENC_VMOD |= VENC_VMOD_VENC; /* Enable video encoder */ |
282 | 320 | IO_VID_ENC_SYNCCTL |= VENC_SYNCCTL_SYE; /* Enable sync output */ | |
283 | /* reset 'General purpose clock output (GIO26, GIO34)' and set to 'PLLIN | 321 | IO_VID_ENC_VDCTL &= ~VENC_VDCTL_DOMD(3); /* Normal digital data output */ |
284 | clock' */ | ||
285 | IO_CLK_OSEL = (IO_CLK_OSEL & ~0xF00) | 0x400; | ||
286 | |||
287 | /* set to 'GP clock output 2 (GIO26, GIO34)' and turn on 'VENC clock' */ | ||
288 | IO_CLK_SEL1 = (IO_CLK_SEL1 | 7) | 0x1000; | ||
289 | IO_CLK_MOD1 |= 0x18; /* enable OSD clock and VENC clock */ | ||
290 | |||
291 | /* Set LCD values in OSD */ | ||
292 | /* disable NTSC/PAL encoder & set mode to RGB666 parallel 18 bit */ | ||
293 | IO_VID_ENC_VMOD = ( ( (IO_VID_ENC_VMOD & 0xFFFF8C00) | 0x14) | 0x2400 ); | ||
294 | IO_VID_ENC_VDCTL = ( ( (IO_VID_ENC_VDCTL & 0xFFFFCFE8) | 0x20) | 0x4000 ); | ||
295 | /* TODO: finish this... */ | ||
296 | #endif | 322 | #endif |
297 | } | 323 | } |
298 | 324 | ||