Hello,
I tested the PRGB mode output on DM355 with DVI transmitter(SiI164) .
It works and can display to LCD monitor.
However, it has a color problem. Last 1 or 2 bits of each channel are not working.
So, It only display 4~5 bits on each channel and stepped gradation.
prgb output mode set in davinci_platform.c :
/*
* setting DLCD 480P PRGB mode
*/
static void
davinci_enc_set_prgb(struct vid_enc_mode_info *mode_info)
{
enableDigitalOutput(1);
//dispc_reg_out(VENC_VIDCTL, 0x141);
/* set VPSS clock */
davinci_writel(0x18, SYS_VPSS_CLKCTL);
dispc_reg_out(VENC_DCLKCTL, 0);
dispc_reg_out(VENC_DCLKPTN0, 0);
/* Set the OSD Divisor to 1. */
dispc_reg_out(VENC_OSDCLK0, 0);
dispc_reg_out(VENC_OSDCLK1, 1);
/* Clear composite mode register
*/
dispc_reg_out(VENC_CVBS, 0);
//dispc_reg_merge(VENC_VDPRO, VENC_VDPRO_CBMD, VENC_VDPRO_CBMD);
//dispc_reg_merge(VENC_VDPRO, VENC_VDPRO_CBTYP, VENC_VDPRO_CBTYP);
/* Set PINMUX1 to enable all outputs needed to support
RGB666 */
if (cpu_is_davinci_dm355()) {
/* Enable the
venc and dlcd clocks. */
dispc_reg_out(VENC_CLKCTL,
0x11|0x1<<8);
davinci_cfg_reg(DM355_VOUT_FIELD_G70);
davinci_cfg_reg(DM355_VOUT_COUTL_EN);
davinci_cfg_reg(DM355_VOUT_COUTH_EN);
} else {
dispc_reg_out(VENC_CMPNT, 0x100);
davinci_cfg_reg(DM644X_GPIO46_47);
davinci_cfg_reg(DM644X_GPIO0);
davinci_cfg_reg(DM644X_RGB666);
davinci_cfg_reg(DM644X_LOEEN);
davinci_cfg_reg(DM644X_GPIO3);
}
if (cpu_is_davinci_dm355()) {
davinci_writel(mode_info->left_margin,
(DM355_OSD_REG_BASE + OSD_BASEPX));
davinci_writel(mode_info->upper_margin,
(DM355_OSD_REG_BASE + OSD_BASEPY));
} else {
davinci_writel(mode_info->left_margin,
(DM644X_OSD_REG_BASE + OSD_BASEPX));
davinci_writel(mode_info->upper_margin,
(DM644X_OSD_REG_BASE + OSD_BASEPY));
}
/* Set VIDCTL
to select VCLKE = 1,
VCLKZ =0, SYDIR = 0 (set o/p), DOMD = 0
*/
dispc_reg_merge(VENC_VIDCTL, 1 <<
VENC_VIDCTL_VCLKE_SHIFT,
VENC_VIDCTL_VCLKE);
dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_VCLKZ_SHIFT,
VENC_VIDCTL_VCLKZ);
dispc_reg_merge(VENC_VIDCTL, 0
<< VENC_VIDCTL_SYDIR_SHIFT,
VENC_VIDCTL_SYDIR);
dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_YCDIR_SHIFT,
VENC_VIDCTL_YCDIR);
dispc_reg_merge(VENC_DCLKCTL,
1 << VENC_DCLKCTL_DCKEC_SHIFT, VENC_DCLKCTL_DCKEC);
dispc_reg_merge(VENC_DCLKCTL,
0 <<
VENC_DCLKCTL_DCKOH_SHIFT, VENC_DCLKCTL_DCKOH);
dispc_reg_out(VENC_DCLKPTN0, 0x1);
davinci_enc_set_display_timing(mode_info);
dispc_reg_out(VENC_SYNCCTL,
(VENC_SYNCCTL_SYEV |
VENC_SYNCCTL_SYEH | VENC_SYNCCTL_HPL
|
VENC_SYNCCTL_VPL));
/* Configure VMOD. No change in VENC bit
*/
dispc_reg_out(VENC_VMOD, 0x2011);
dispc_reg_out(VENC_LCDOUT, 0x1);
}