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.

SN65DSI86 panel all black screen

Other Parts Discussed in Thread: SN65DSI86

Dear Team:

Our customer used SN65DSI86 in their panel, but some panels are work, the others are failed that panel are all black screen. The work panel which we measured I2C and DSI clk gotten key point siganl is as below,after loaded initial command file. The fail panelscould not get key point signalas same rpocedureand down DSI86 register got CHA_SOT_SYNC_ERR.

Do you have any idea about this?  

The circuit and register setting are as below.

When load command initial file,

   

 

void sn65dsi86_dsi2edp_enable_early(void)
{
       struct sn65dsi86_platform_data *dsi2edp = sn65dsi86_dsi2edp_pdata;
 int pmic_gpio5 = PM8921_GPIO_PM_TO_SYS(5);  //open 1P2& 1P8 power for SN65DSI86

        if (dsi2edp && dsi2edp->dsi2edp_enabled)
           return;
  printk("sn65dsi86_dsi2edp_enable_early\n");
           
        mutex_lock(&dsi2edp->lock);
 usleep_range(100,200);
 gpio_set_value_cansleep(pmic_gpio5, 1);
 mdelay(100);

 sn65dsi86_reg_write(dsi2edp,SN65DSI86_SOFT_RESET,0x01);
 usleep_range(10000, 12000);

       //disable VSTREAM
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_FRAMING_CFG, 0x00);
       //usleep_range(10000, 12000);

       /* PLL ENABLE */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_PLL_EN, 0x00);
 //usleep_range(10000, 12000);
 
       /* reset */
 //sn65dsi86_reg_write(dsi2edp,SN65DSI86_SOFT_RESET,0x01);
 //usleep_range(10000, 12000);

  /* STEP3: Single channelA 4 DSI lanes */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DSI_CFG1, 0x26); 
 //usleep_range(10000, 12000);

 /* STEP4: set external REFCLK 19.2MHz */
 //sn65dsi86_reg_write(dsi2edp, SN65DSI86_PLL_REFCLK_CFG, 0x02);//Alex_Fang_test
 //usleep_range(10000, 12000);

 /* STEP4: set DPLL REFCLK 416MHz */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_PLL_REFCLK_CFG, 0x04);
 usleep_range(10000, 12000);
 

 /* DSI CLK FREQ 415MHz */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DSI_CHA_CLK_RANGE, 0x52);
 //usleep_range(10000, 12000);

 /* STEP8: HPD ENABLE */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DP_HPD_EN, 0x01);//disable HPD
 //usleep_range(10000, 12000);

 /* STEP9,10,11: eDP Pannel DisplayPort configuration(DPCD) */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DP_SSC_CFG, 0x24); /* Pre0dB 2 lanes no SSC */
 //usleep_range(10000, 12000);
 
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DP_CFG, 0x80);/* DP_DATARATE HBR 2.70Gbps per lane */
 //usleep_range(10000, 12000);         
         
 /* CHA_ACTIVE_LINE_LENGTH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_VIDEO_CHA_LINE_LOW, 0x80);
 //usleep_range(10000, 12000);
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_VIDEO_CHA_LINE_HIGH, 0x07);
 //usleep_range(10000, 12000);

 /* CHA_VERTICAL_DISPLAY_SIZE */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VERT_DISP_SIZE_LOW, 0x38);
 //usleep_range(10000, 12000);
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VERT_DISP_SIZE_HIGH, 0x04);
 //usleep_range(10000, 12000);

 /* CHA_HSYNC_PULSE_WIDTH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_HSYNC_PULSE_WIDTH_LOW, 0x24);
 //usleep_range(10000, 12000);
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_HSYNC_PULSE_WIDTH_HIGH,0x80);
 //usleep_range(10000, 12000);

 /* CHA_VSYNC_PULSE_WIDTH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VSYNC_PULSE_WIDTH_LOW, 0x05);
 //usleep_range(10000, 12000);
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VSYNC_PULSE_WIDTH_HIGH,0x80);
 //usleep_range(10000, 12000);

 /* CHA_HORIZONTAL_BACK_PORCH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_HORIZONTAL_BACK_PORCH, 0x64);
 //usleep_range(10000, 12000);

 /* CHA_VERTICAL_BACK_PORCH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VERTICAL_BACK_PORCH, 0x0C);
 //usleep_range(10000, 12000);

 /* CHA_HORIZONTAL_FRONT_PORCH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_HORIZONTAL_FRONT_PORCH, 0x20);
 //usleep_range(10000, 12000);

 /* CHA_VERTICAL_FRONT_PORCH */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_CHA_VERTICAL_FRONT_PORCH, 0x05);
 //usleep_range(10000, 12000);

 /* RIGHT_CROP */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_RIGHT_CROP, 0x00);
 //usleep_range(10000, 12000);

 /* LEFT_CROP */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_LEFT_CROP, 0x00);
 //usleep_range(10000, 12000);

 /* DP-18BPP Enable */
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DP_18BPP_EN, 0x01);
 //usleep_range(10000, 12000);

 sn65dsi86_reg_write(dsi2edp, SN65DSI86_DSI_CFG2, 0x00);
 usleep_range(100, 200); //Alex_Fang_PowerSeq
 //usleep_range(10000, 12000);
}


下半部initial command:
void sn65dsi86_dsi2edp_enable_lately(void)
{
 struct sn65dsi86_platform_data *dsi2edp = sn65dsi86_dsi2edp_pdata;
 unsigned short int buff;
 unsigned int val = 0;

        if (dsi2edp && dsi2edp->dsi2edp_enabled)
           return; //Alex_Fag_test

 printk("sn65dsi86_dsi2edp_enable_lately\n");
        /* PLL ENABLE */
       //usleep_range(300, 400);
 sn65dsi86_reg_write(dsi2edp, SN65DSI86_PLL_EN, 0x01);

  /* STEP12: check DP_PLL_LOCK */
        do{
         val = 0;
         sn65dsi86_reg_read(dsi2edp, SN65DSI86_PLL_REFCLK_CFG, &val);
         if((val & 0x80) != 0)
         {
            printk("sn65dsi86_dsi2edp_enable DP_PLL_LOCK=%x(LOCK)\n",val);
          }
         else{
            printk("sn65dsi86_dsi2edp_enable DP_PLL_LOCK=%x(UNLOCK)\n",val);
         }
        }while((val & 0x80) == 0);

 /* STEP13: use Native AUX interface to enable eDP panel ASSR */
        buff = EDP_EN_ASSR;
        sn65dsi86_dsi2edp_write_dpcd(&buff,EDP_CONFIGURATION_SET_ADD,1);
        //usleep_range(10000, 12000);
        msleep(75); //Alex_Fang_PowerSeq
       
       /* STEP14: DisplayPort Link Semi-Auto train */
       sn65dsi86_reg_write(dsi2edp, SN65DSI86_ML_TX_MODE, 0x0a);
       usleep_range(10000, 12000);
       val =0;
       sn65dsi86_reg_read(dsi2edp, SN65DSI86_ML_TX_MODE, &val);
       if((val & 0x0F) == 0x1)
        printk("DisplayPort Link Semi-Auto train Success!!\n");
       else
        printk("DisplayPort Link Semi-Auto train Fail(%x)!!\n",val);
   
        //use Native AUX interface to check display panel DPCD information
        if(0)
          sn65dsi86_dsi2edp_showDPCDInfo();

        sn65dsi86_reg_write(dsi2edp, SN65DSI86_ML_TX_MODE, 0x01);//set to normal mode
        usleep_range(10000, 12000);
       
        /* COLOR BAR */
       sn65dsi86_reg_write(dsi2edp, SN65DSI86_COLOR_BAR_CFG, 0x08);//test pattern
       usleep_range(10000, 12000);
      
       sn65dsi86_reg_write(dsi2edp,SN65DSI86_SOFT_RESET,0x01);
 usleep_range(10000, 12000);

 /* enhanced framing and Vstream enable */
        sn65dsi86_reg_write(dsi2edp, SN65DSI86_FRAMING_CFG, 0x08);
      
        dsi2edp->dsi2edp_enabled = true;
        mutex_unlock(&dsi2edp->lock); 
}

 


//Register definition----------------------------------------------------
 #define  SN65DSI86_DEVICE_ID   0x00
 #define  SN65DSI86_DEVICE_REV   0x08
 #define  SN65DSI86_SOFT_RESET   0X09
 #define  SN65DSI86_PLL_REFCLK_CFG  0x0A
 #define  SN65DSI86_PLL_EN   0x0D
 #define  SN65DSI86_DSI_CFG1   0x10
 #define  SN65DSI86_DSI_CFG2   0x11
 #define  SN65DSI86_DSI_CHA_CLK_RANGE  0x12
 #define  SN65DSI86_DSI_CHB_CLK_RANGE  0x13
 #define  SN65DSI86_VIDEO_CHA_LINE_LOW  0x20
 #define  SN65DSI86_VIDEO_CHA_LINE_HIGH  0x21
 #define  SN65DSI86_VIDEO_CHB_LINE_LOW  0x22
 #define  SN65DSI86_VIDEO_CHB_LINE_HIGH  0x23
 #define  SN65DSI86_CHA_VERT_DISP_SIZE_LOW 0x24
 #define  SN65DSI86_CHA_VERT_DISP_SIZE_HIGH 0x25
 #define  SN65DSI86_CHA_HSYNC_PULSE_WIDTH_LOW 0x2C
 #define  SN65DSI86_CHA_HSYNC_PULSE_WIDTH_HIGH 0x2D
 #define  SN65DSI86_CHA_VSYNC_PULSE_WIDTH_LOW 0x30
 #define  SN65DSI86_CHA_VSYNC_PULSE_WIDTH_HIGH 0x31
 #define  SN65DSI86_CHA_HORIZONTAL_BACK_PORCH 0x34
 #define  SN65DSI86_CHA_VERTICAL_BACK_PORCH 0x36
 #define  SN65DSI86_CHA_HORIZONTAL_FRONT_PORCH 0x38
 #define  SN65DSI86_CHA_VERTICAL_FRONT_PORCH 0x3a
 #define  SN65DSI86_COLOR_BAR_CFG  0x3c
 #define  SN65DSI86_RIGHT_CROP                0x3d
 #define  SN65DSI86_LEFT_CROP                   0x3e
 #define  SN65DSI86_ADEN                            0x3f
 #define  SN65DSI86_FRAMING_CFG   0x5a
 #define  SN65DSI86_DP_18BPP_EN   0x5b
 #define  SN65DSI86_DP_HPD_EN                        0x5c
 #define  SN65DSI86_GPIO_CTRL_CFG  0x5f
 #define  SN65DSI86_AUX_WDATA0             0x64
 #define  SN65DSI86_AUX_WDATA1             0x65
 #define  SN65DSI86_AUX_WDATA2             0x66
 #define  SN65DSI86_AUX_WDATA3             0x67
 #define  SN65DSI86_AUX_WDATA4             0x68
 #define  SN65DSI86_AUX_WDATA5             0x69
 #define  SN65DSI86_AUX_WDATA6             0x6a
 #define  SN65DSI86_AUX_WDATA7             0x6b
 #define  SN65DSI86_AUX_WDATA8             0x6c
 #define  SN65DSI86_AUX_WDATA9             0x6d
 #define  SN65DSI86_AUX_WDATA10           0x6e
 #define  SN65DSI86_AUX_WDATA11           0x6f
 #define  SN65DSI86_AUX_WDATA12           0x70
 #define  SN65DSI86_AUX_WDATA13           0x71
 #define  SN65DSI86_AUX_WDATA14           0x72
 #define  SN65DSI86_AUX_WDATA15           0x73
 #define  SN65DSI86_AUX_ADDR_19_16      0x74
 #define  SN65DSI86_AUX_ADDR_15_8        0x75
 #define  SN65DSI86_AUX_ADDR_7_0          0x76
 #define  SN65DSI86_AUX_LENGTH              0x77
 #define  SN65DSI86_AUX_CMD_SEND         0x78
 #define  SN65DSI86_AUX_RDATA0             0x79
 #define  SN65DSI86_AUX_RDATA1             0x7A
 #define  SN65DSI86_AUX_RDATA2             0x7B
 #define  SN65DSI86_AUX_RDATA3             0x7C
 #define  SN65DSI86_AUX_RDATA4             0x7D
 #define  SN65DSI86_AUX_RDATA5             0x7E
 #define  SN65DSI86_AUX_RDATA6             0x7F
 #define  SN65DSI86_AUX_RDATA7             0x80
 #define  SN65DSI86_AUX_RDATA8             0x81
 #define  SN65DSI86_AUX_RDATA9             0x82
 #define  SN65DSI86_AUX_RDATA10            0x83
 #define  SN65DSI86_AUX_RDATA11            0x84
 #define  SN65DSI86_AUX_RDATA12            0x85
 #define  SN65DSI86_AUX_RDATA13             0x86
 #define  SN65DSI86_AUX_RDATA14             0x87
 #define  SN65DSI86_AUX_RDATA15             0x88
 #define  SN65DSI86_DP_SSC_CFG   0x93
 #define  SN65DSI86_DP_CFG   0x94
 #define  SN65DSI86_TRAINING_CFG  0x95
 #define  SN65DSI86_ML_TX_MODE   0x96
 #define  SN65DSI86_IRQ_EN                        0xE0
 #define  SN65DSI86_IRQ_STATUS0              0xF0
 #define  SN65DSI86_IRQ_STATUS1              0xF1
 #define  SN65DSI86_IRQ_STATUS2              0xF2
 #define  SN65DSI86_IRQ_STATUS3              0xF3
 #define  SN65DSI86_IRQ_STATUS4              0xF4
 #define  SN65DSI86_IRQ_STATUS5              0xF5
 #define  SN65DSI86_IRQ_STATUS6              0xF6
 #define  SN65DSI86_IRQ_STATUS7              0xF7
 #define  SN65DSI86_IRQ_STATUS8              0xF8