This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dm365+ths8200+ths7303 VGA output 720p

Other Parts Discussed in Thread: THS8200, THS7303

HELLO ,I  use th dvsdk 4.02 ,

my project is "dm365+ths8200+ths7303"  VGA output 1280x720p

I change the

davinci_platform.c ->davinci_enc_priv_setmode 

and add the ths8200.c driver , i have already get 720p VGA video,

but i found the video clolor is wrong,my program is :

________________________________________________

dm365- >davinci_platform.c ->davinci_enc_priv_setmode 

   davinci_enc_set_720p(&mgr->current_mode);
   davinci_enc_set_internal_hd(&mgr->current_mode);
   ths8200_setval(THS8200_720P_60);

______________________________________________

 davinci_platform.c ->davincidavinci_enc_set_720p

 /* Reset video encoder module */
 dispc_reg_out(VENC_VMOD, 0);

 enableDigitalOutput(1);

 dispc_reg_out(VENC_VDPRO, 0);


 dispc_reg_out(VENC_VIDCTL, (VENC_VIDCTL_VCLKE | VENC_VIDCTL_VCLKP));
 
 /* Setting DRGB Matrix registers back to default values */
 dispc_reg_out(VENC_DRGBX0, 0x00000400);
 dispc_reg_out(VENC_DRGBX1, 0x00000576);
 dispc_reg_out(VENC_DRGBX2, 0x00000159);
 dispc_reg_out(VENC_DRGBX3, 0x000002cb);
 dispc_reg_out(VENC_DRGBX4, 0x000006ee);

 /* Enable DCLOCK */
 dispc_reg_out(VENC_DCLKCTL, VENC_DCLKCTL_DCKEC);
 /* Set DCLOCK pattern */
 dispc_reg_out(VENC_DCLKPTN0, 1);
 dispc_reg_out(VENC_DCLKPTN1, 0);
 dispc_reg_out(VENC_DCLKPTN2, 0);
 dispc_reg_out(VENC_DCLKPTN3, 0);
 dispc_reg_out(VENC_DCLKPTN0A, 2);
 dispc_reg_out(VENC_DCLKPTN1A, 0);
 dispc_reg_out(VENC_DCLKPTN2A, 0);
 dispc_reg_out(VENC_DCLKPTN3A, 0);
 dispc_reg_out(VENC_DCLKHS, 0);
 dispc_reg_out(VENC_DCLKHSA, 1);
 dispc_reg_out(VENC_DCLKHR, 0);
 dispc_reg_out(VENC_DCLKVS, 0);
 dispc_reg_out(VENC_DCLKVR, 0);
 /* Set brightness start position and pulse width to zero */
 dispc_reg_out(VENC_BRTS, 0);
 dispc_reg_out(VENC_BRTW, 0);
 /* Set LCD AC toggle interval and horizontal position to zero */
 dispc_reg_out(VENC_ACCTL, 0);

 /* Set PWM period and width to zero */
 dispc_reg_out(VENC_PWMP, 0);
 dispc_reg_out(VENC_PWMW, 0);

 dispc_reg_out(VENC_CVBS, 0);
 
 dispc_reg_out(VENC_CMPNT, 0);
 
 /* turning on horizontal and vertical syncs */
 dispc_reg_out(VENC_SYNCCTL, (VENC_SYNCCTL_SYEV | VENC_SYNCCTL_SYEH));
 dispc_reg_out(VENC_OSDCLK0, 0);
 dispc_reg_out(VENC_OSDCLK1, 1);
 dispc_reg_out(VENC_OSDHADV, 0);

// __raw_writel(0xa, IO_ADDRESS(SYS_VPSS_CLKCTL));
 if (cpu_is_davinci_dm355()) {
  dispc_reg_out(VENC_CLKCTL, 0x11);

  osd_write_left_margin(mode_info->left_margin);
  osd_write_upper_margin(mode_info->upper_margin);

  davinci_cfg_reg(DM355_VOUT_FIELD_G70);
  davinci_cfg_reg(DM355_VOUT_COUTL_EN);
  davinci_cfg_reg(DM355_VOUT_COUTH_EN);
 }else if (cpu_is_davinci_dm365()) {
  osd_write_left_margin(mode_info->left_margin);
  osd_write_upper_margin(mode_info->upper_margin);

  /* DM365 pinmux */
  dispc_reg_out(VENC_CLKCTL, 0x10);
  davinci_cfg_reg(DM365_VOUT_FIELD_G81);
  davinci_cfg_reg(DM365_VOUT_COUTL_EN);
  davinci_cfg_reg(DM365_VOUT_COUTH_EN);
 
   /* 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);


 }else {
  osd_write_left_margin(mode_info->left_margin);
  osd_write_upper_margin(mode_info->upper_margin);

  davinci_cfg_reg(DM644X_LOEEN);
  davinci_cfg_reg(DM644X_GPIO3);
 }

 /* Set VENC for non-standard timing */
 davinci_enc_set_display_timing(mode_info);

 dispc_reg_out(VENC_HSDLY, 0);
 dispc_reg_out(VENC_VSDLY, 0);
 
 dispc_reg_out(VENC_YCCCTL, 0X0);
 
 dispc_reg_out(VENC_VSTARTA, 0);
 
 /* Enable all VENC, non-standard timing mode, master timing, HD,
    progressive
  */
 if (cpu_is_davinci_dm355()) {
  dispc_reg_out(VENC_VMOD, (VENC_VMOD_VENC | VENC_VMOD_VMD));
 } else {

     dispc_reg_out(VENC_VMOD,
         (VENC_VMOD_VENC | VENC_VMOD_VMD));

 }
 
 dispc_reg_out(VENC_LCDOUT, 0);

________________________________________-

th8200.c 


int ths8200_setval(enum ths8200_modes mode)
{
 int err = 0, disable = 0;

 if (ths8200_client == NULL)
  return 0;

 

 switch (mode) {
 case THS8200_720P_60:
  printk("ths8200 set THS8200_720P_60\n ");
 
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x01);//WR_REG,THS8200,0x01,0x03,0x01 // chip_ctl  frequency range=high

  //YCbR to RGB         
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R11, 0x81);//WR_REG,THS8200,0x01,0x04,0x81 // csc_ric1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R12, 0xD5);//WR_REG,THS8200,0x01,0x05,0xD5 // csc_rfc1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R21, 0x00);//WR_REG,THS8200,0x01,0x06,0x00 // csc_ric2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R22, 0x00);//WR_REG,THS8200,0x01,0x07,0x00 // csc_rfc2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R31, 0x06);//WR_REG,THS8200,0x01,0x08,0x06 // csc_ric3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_R32, 0x29);//WR_REG,THS8200,0x01,0x09,0x29 // csc_rfc3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G11, 0x04);//WR_REG,THS8200,0x01,0x0A,0x04 // csc_gic1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G12, 0x00);//WR_REG,THS8200,0x01,0x0B,0x00 // csc_gfc1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G21, 0x04);//WR_REG,THS8200,0x01,0x0C,0x04 // csc_gic2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G22, 0x00);//WR_REG,THS8200,0x01,0x0D,0x00 // csc_gfc2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G31, 0x04);//WR_REG,THS8200,0x01,0x0E,0x04 // csc_gic3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_G32, 0x00);//WR_REG,THS8200,0x01,0x0F,0x00 // csc_gfc3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B11, 0x80);//WR_REG,THS8200,0x01,0x10,0x80 // csc_bic1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B12, 0xBB);//WR_REG,THS8200,0x01,0x11,0xBB // csc_bfc1           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B21, 0x07);//WR_REG,THS8200,0x01,0x12,0x07 // csc_bic2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B22, 0x42);//WR_REG,THS8200,0x01,0x13,0x42 // csc_bfc2           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B31, 0x00);//WR_REG,THS8200,0x01,0x14,0x00 // csc_bic3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_B32, 0x00);//WR_REG,THS8200,0x01,0x15,0x00 // csc_bfc3           
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_OFFS1, 0x14);//WR_REG,THS8200,0x01,0x16,0x14 // csc_offset1        
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_OFFS12, 0xAE);//WR_REG,THS8200,0x01,0x17,0xAE // csc_offset12       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_OFFS23, 0x8B);//WR_REG,THS8200,0x01,0x18,0x8B // csc_offset23       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSC_OFFS3, 0x15);//WR_REG,THS8200,0x01,0x19,0x15 // csc_offset3  

  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DATA_CNTL, 0x13);//WR_REG,THS8200,0x01,0x1C,0x53 // dman_cntl  20bit 422

  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_Y_SYNC1_LSB, 0x00);//WR_REG,THS8200,0x01,0x1D,0x00 // dtg_y_sync1        
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_Y_SYNC2_LSB, 0x00);//WR_REG,THS8200,0x01,0x1E,0x00 // dtg_y_sync2        
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_Y_SYNC3_LSB, 0x00);//WR_REG,THS8200,0x01,0x1F,0x00 // dtg_y_sync3        
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_CBCR_SYNC1_LSB, 0x00);//WR_REG,THS8200,0x01,0x20,0x00 // dtg_cbcr_sync1     
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_CBCR_SYNC2_LSB, 0x00);//WR_REG,THS8200,0x01,0x21,0x00 // dtg_cbcr_sync2     
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_CBCR_SYNC3_LSB, 0x00);//WR_REG,THS8200,0x01,0x22,0x00 // dtg_cbcr_sync3     
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_Y_SYNC_MSB, 0x2A);//WR_REG,THS8200,0x01,0x23,0x2A // dtg_y_sync_upper   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_CBCR_SYNC_MSB, 0x2A);//WR_REG,THS8200,0x01,0x24,0x2A // dtg_cbcr_sync_upper

  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_A, 0x28);//WR_REG,THS8200,0x01,0x25,0x28 // dtg_spec_a         
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_B, 0x6E);//WR_REG,THS8200,0x01,0x26,0x6E // dtg_spec_b         
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_C, 0x28);//WR_REG,THS8200,0x01,0x27,0x28 // dtg_spec_c         
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_D_LSB, 0x04);//WR_REG,THS8200,0x01,0x28,0x04 // dtg_spec_d         
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_D1, 0x00);//WR_REG,THS8200,0x01,0x29,0x00 // dtg_spec_d1        
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_E_LSB, 0x04);//WR_REG,THS8200,0x01,0x2A,0x04 // dtg_spec_e         
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_DEH_MSB, 0xC0);//WR_REG,THS8200,0x01,0x2B,0xC0 // dtg_spec_h_msb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_H_LSB, 0x00);//WR_REG,THS8200,0x01,0x2C,0x00 // dtg_spec_h_lsb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_I_MSB, 0x00);//WR_REG,THS8200,0x01,0x2D,0x00 // dtg_spec_i_msb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_I_LSB, 0x00);//WR_REG,THS8200,0x01,0x2E,0x00 // dtg_spec_i_lsb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_K_LSB, 0x6E);//WR_REG,THS8200,0x01,0x2F,0x6E // dtg_spec_k_lsb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_K_MSB, 0x00);//WR_REG,THS8200,0x01,0x30,0x00 // dtg_spec_k_msb   
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_K1, 0x00);// WR_REG,THS8200,0x01,0x31,0x00 // dtg_spec_k1        
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_G_LSB, 0x00);// WR_REG,THS8200,0x01,0x32,0x00 // dtg_speg_g_lsb     
  i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_G_MSB, 0x00);// WR_REG,THS8200,0x01,0x33,0x00 // dtg_speg_g_msb 
 
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_TOT_PIXELS_MSB, 0x06);//WR_REG,THS8200,0x01,0x34,0x03 // dtg_total_pixel_msb adjust for various graphics formats
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_TOT_PIXELS_LSB, 0x72);//WR_REG,THS8200,0x01,0x35,0x5A // dtg_total_pixel_lsb
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_FLD_FLIP_LINECNT_MSB, 0x080);//WR_REG,THS8200,0x01,0x36,0x80 // dtg_linecnt_msb    
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_LINECNT_LSB, 0x01);//WR_REG,THS8200,0x01,0x37,0x01 // dtg_linecnt_lsb    


  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_MODE, 0x87);//WR_REG,THS8200,0x01,0x38,0x87 // dtg_mode     VESA Slave      


  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_FRAME_FIELD_SZ_MSB, 0x27);//WR_REG,THS8200,0x01,0x39,0x27 // dtg_frame_field_msb  adjust for various graphics formats
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_FRAME_SZ_LSB, 0xEE);//WR_REG,THS8200,0x01,0x3A,0x0D // dtg_frame_size_lsb 
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_FIELD_SZ_LSB, 0xFF);//WR_REG,THS8200,0x01,0x3B,0xFF // dtg_field_size_lsb 
  //CSM setup to map YCbCr to FS RGB        
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_GY_LOW, 0x40);//WR_REG,THS8200,0x01,0x41,0x40 // csm_clip_gy_low    
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_BCB_LOW, 0x40);//WR_REG,THS8200,0x01,0x42,0x40 // csm_clip_bcb_low   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_RCR_LOW, 0x40);//WR_REG,THS8200,0x01,0x43,0x40 // csm_clip_rcr_low   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_GY_HIGH, 0x53);//WR_REG,THS8200,0x01,0x44,0x53 // csm_clip_gy_high   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_BCB_HIGH, 0x3F);//WR_REG,THS8200,0x01,0x45,0x3F // csm_clip_bcb_high  
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_CLIP_RCR_HIGH, 0x3F);//WR_REG,THS8200,0x01,0x46,0x3F // csm_clip_rcr_high  
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_SHIFT_GY, 0x40);//WR_REG,THS8200,0x01,0x47,0x40 // csm_shift_gy       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_SHIFT_BCB, 0x40);//WR_REG,THS8200,0x01,0x48,0x40 // csm_shift_bcb      
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_SHIFT_RCR, 0x40);//WR_REG,THS8200,0x01,0x49,0x40 // csm_shift_rcr      
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_GY_CNTL_MULT_MSB, 0xFC);//WR_REG,THS8200,0x01,0x4A,0xFC // csm_mult_gy_msb    
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_MULT_BCB_RCR_MSB, 0x44);//WR_REG,THS8200,0x01,0x4B,0x44 // csm_mult_bcb_rcr_msb
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_MULT_GY_LSB, 0xAC);//WR_REG,THS8200,0x01,0x4C,0xAC // csm_mult_gy_lsb    
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_MULT_BCB_LSB, 0xAC);//WR_REG,THS8200,0x01,0x4D,0xAC // csm_mult_bcb_lsb   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_MULT_RCR_LSB, 0xAC);//WR_REG,THS8200,0x01,0x4E,0xAC // csm_mult_rcr_lsb   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CSM_MULT_RCR_BCB_CNTL, 0xFF);//WR_REG,THS8200,0x01,0x4F,0xFF // csm_mode   
         
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HLENGTH_LSB, 0x28);//WR_REG,THS8200,0x01,0x70,0x40 // dtg_hlength_lsb    adjust HSOUT width for various formats
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HLENGTH_LSB_HDLY_MSB, 0x01);//WR_REG,THS8200,0x01,0x71,0x03 // dtg_hdly_msb       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HLENGTH_HDLY_LSB, 0x04);//WR_REG,THS8200,0x01,0x72,0x31 // dtg_hdly_lsb       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VLENGTH1_LSB, 0x05);//WR_REG,THS8200,0x01,0x73,0x07 // dtg_vlength_lsb     adjust VSOUT width for various formats
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VLENGTH1_MSB_VDLY1_MSB, 0x02);//WR_REG,THS8200,0x01,0x74,0x00 // dtg_vdly_msb       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VDLY1_LSB, 0xED);//WR_REG,THS8200,0x01,0x75,0x07 // dtg_vdly_lsb       
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VLENGTH2_LSB, 0x00);//WR_REG,THS8200,0x01,0x76,0x00 // dtg_vlength2_lsb   
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VLENGTH2_MSB_VDLY2_MSB, 0x07);//WR_REG,THS8200,0x01,0x77,0xC7 // dtg_vdly2_msb      
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VDLY2_LSB, 0xFF);//WR_REG,THS8200,0x01,0x78,0xFF // dtg_vdly2_lsb      
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HS_IN_DLY_MSB, 0x00);//WR_REG,THS8200,0x01,0x79,0x00 // dtg_hs_in_dly_msb   adjust for horizontal alignment
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HS_IN_DLY_LSB, 0x0A);//WR_REG,THS8200,0x01,0x7A,0x0F // dtg_hs_in_dly_lsb  
 // err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HS_IN_DLY_MSB, 0x00);//WR_REG,THS8200,0x01,0x79,0x00 // dtg_hs_in_dly_msb   adjust for horizontal alignment
 // err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_HS_IN_DLY_LSB, 0x32);//WR_REG,THS8200,0x01,0x7A,0x0F // dtg_hs_in_dly_lsb  
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VS_IN_DLY_MSB, 0x00);//WR_REG,THS8200,0x01,0x7B,0x00 // dtg_vs_in_dly_msb   adjust for vertical alignment
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_VS_IN_DLY_LSB, 0x00);//WR_REG,THS8200,0x01,0x7C,0x00 // dtg_vs_in_dly_lsb  
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_CNTL, 0x5B);//WR_REG,THS8200,0x01,0x82,0x5B // pol_cntl   HS/VSin ++, HS/VSout++, FID - 
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CGMS_CNTL_HEADER, 0x00);//WR_REG,THS8200,0x01,0x83,0x00
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CGMS_PAYLOAD_MSB, 0x00);//WR_REG,THS8200,0x01,0x84,0x00
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CGMS_PAYLOAD_LSB, 0x00);//WR_REG,THS8200,0x01,0x85,0x00

  err = i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x00);
  mdelay(50);
  err = i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x01);

  break;
 default:
  /* disable all channels */
  printk("ths8200_colorbar \n");

  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x23);
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_MODE, 0x87);//WR_REG,THS8200,0x01,0x38,0x86 // dtg_mode     VESA master     


  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG2_CNTL, 0x5B);//WR_REG,THS8200,0x01,0x82,0x5B // pol_cntl   HS/VSin ++, HS/VSout++, FID - 
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_VESA_CBAR_SIZE, 0x80);
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_DEH_MSB, 0x00);
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_DTG1_SPEC_E_LSB, 0xC0);

  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x22);
  mdelay(50);
  err |=i2c_smbus_write_byte_data(ths8200_client, THS8200_CHIP_CTL, 0x23);
  disable = 1;
  break;
 }
 if (err)
  {
  printk("reset th8200 error!\n");
  return err;
  }
 
 
 return err;
}

i don't know why the color is wrong? please help me .