summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c')
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c82
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
47void lcd_set_contrast(int val) 47void 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
67static void lcd_write_reg(unsigned char reg, unsigned short val) 65static 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
171static void lcd_display_off(void) 167void 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