int mipi_dsi_video_config(unsigned short num_of_lanes) { int status = 0; unsigned long ReadValue; unsigned long count = 0; unsigned long low_pwr_stop_mode = 0; // low power mode 0x1111 start from // bit16, high spd mode 0x0 unsigned char eof_bllp_pwr = 0x9; // bit 12, 15, 1:low power stop mode or // let cmd mode eng send packets in hs // or lp mode unsigned short image_wd = mipi_fb_cfg.width; unsigned short image_ht = mipi_fb_cfg.height; unsigned short display_wd = mipi_fb_cfg.width; unsigned short display_ht = mipi_fb_cfg.height; unsigned short hsync_porch_fp = MIPI_HSYNC_FRONT_PORCH_DCLK; unsigned short hsync_porch_bp = MIPI_HSYNC_BACK_PORCH_DCLK; unsigned short vsync_porch_fp = MIPI_VSYNC_FRONT_PORCH_LINES; unsigned short vsync_porch_bp = MIPI_VSYNC_BACK_PORCH_LINES; unsigned short hsync_width = MIPI_HSYNC_PULSE_WIDTH; unsigned short vsync_width = MIPI_VSYNC_PULSE_WIDTH; unsigned short dst_format = 0; unsigned short traffic_mode = 0; unsigned short pack_pattern = 0x12; //BGR unsigned char ystride = 3; low_pwr_stop_mode = 0x1111; // low pwr mode bit16:HSA, bit20:HBA, // bit24:HFP, bit28:PULSE MODE, need enough // time for swithc from LP to HS eof_bllp_pwr = 0x9; // low power stop mode or let cmd mode eng send // packets in hs or lp mode status += config_dsi_video_mode(display_wd, display_ht, image_wd, image_ht, hsync_porch_fp, hsync_porch_bp, vsync_porch_fp, vsync_porch_bp, hsync_width, vsync_width, dst_format, traffic_mode, num_of_lanes); status += mdp_setup_dma_p_video_mode(display_wd, display_ht, image_wd, image_ht, hsync_porch_fp, hsync_porch_bp, vsync_porch_fp, vsync_porch_bp, hsync_width, vsync_width, MIPI_FB_ADDR, image_wd, pack_pattern, ystride); ReadValue = readl(DSI_INT_CTRL) & 0x00010000; while (ReadValue != 0x00010000) { ReadValue = readl(DSI_INT_CTRL) & 0x00010000; count++; if (count > 0xffff) { status = FAIL; dprintf(CRITICAL, "Video lane test failed\n"); return status; } } dprintf(SPEW, "Video lane tested successfully\n"); return status; }
int mipi_dsi_video_config(unsigned short num_of_lanes) { int status = 0; unsigned long ReadValue; unsigned long count = 0; unsigned long low_pwr_stop_mode = 0; // low power mode 0x1111 start from // bit16, high spd mode 0x0 unsigned char eof_bllp_pwr = 0x9; // bit 12, 15, 1:low power stop mode or // let cmd mode eng send packets in hs // or lp mode unsigned short image_wd = mipi_fb_cfg.width; unsigned short image_ht = mipi_fb_cfg.height; #if !DISPLAY_MIPI_PANEL_TOSHIBA_MDT61 unsigned short display_wd = mipi_fb_cfg.width; unsigned short display_ht = mipi_fb_cfg.height; unsigned short hsync_porch_fp = MIPI_HSYNC_FRONT_PORCH_DCLK; unsigned short hsync_porch_bp = MIPI_HSYNC_BACK_PORCH_DCLK; unsigned short vsync_porch_fp = MIPI_VSYNC_FRONT_PORCH_LINES; unsigned short vsync_porch_bp = MIPI_VSYNC_BACK_PORCH_LINES; unsigned short hsync_width = MIPI_HSYNC_PULSE_WIDTH; unsigned short vsync_width = MIPI_VSYNC_PULSE_WIDTH; unsigned short dst_format = 0; unsigned short traffic_mode = 0; #endif unsigned short pack_pattern = 0x12; //BGR unsigned char ystride = 3; low_pwr_stop_mode = 0x1111; // low pwr mode bit16:HSA, bit20:HBA, // bit24:HFP, bit28:PULSE MODE, need enough // time for swithc from LP to HS eof_bllp_pwr = 0x9; // low power stop mode or let cmd mode eng send // packets in hs or lp mode #if DISPLAY_MIPI_PANEL_TOSHIBA_MDT61 pack_pattern = 0x21; //RGB config_mdt61_dsi_video_mode(); /* Two functions make up mdp_setup_dma_p_video_mode with mdt61 panel functions */ mdp_setup_dma_p_video_config(pack_pattern, image_wd, image_ht, MIPI_FB_ADDR, image_wd, ystride); mdp_setup_mdt61_video_dsi_config(); #elif DISPLAY_MIPI_PANEL_RENESAS if (machine_is_7x25a()) { display_wd = REN_MIPI_FB_WIDTH_HVGA; display_ht = REN_MIPI_FB_HEIGHT_HVGA; image_wd = REN_MIPI_FB_WIDTH_HVGA; image_ht = REN_MIPI_FB_HEIGHT_HVGA; hsync_porch_fp = MIPI_HSYNC_FRONT_PORCH_DCLK_HVGA; hsync_porch_bp = MIPI_HSYNC_BACK_PORCH_DCLK_HVGA; vsync_porch_fp = MIPI_VSYNC_FRONT_PORCH_LINES_HVGA; vsync_porch_bp = MIPI_VSYNC_BACK_PORCH_LINES_HVGA; hsync_width = MIPI_HSYNC_PULSE_WIDTH_HVGA; vsync_width = MIPI_VSYNC_PULSE_WIDTH_HVGA; } pack_pattern = 0x21; //RGB config_renesas_dsi_video_mode(); status += mdp_setup_dma_p_video_mode(display_wd, display_ht, image_wd, image_ht, hsync_porch_fp, hsync_porch_bp, vsync_porch_fp, vsync_porch_bp, hsync_width, vsync_width, MIPI_FB_ADDR, image_wd, pack_pattern, ystride); #else status += config_dsi_video_mode(display_wd, display_ht, image_wd, image_ht, hsync_porch_fp, hsync_porch_bp, vsync_porch_fp, vsync_porch_bp, hsync_width, vsync_width, dst_format, traffic_mode, num_of_lanes); status += mdp_setup_dma_p_video_mode(display_wd, display_ht, image_wd, image_ht, hsync_porch_fp, hsync_porch_bp, vsync_porch_fp, vsync_porch_bp, hsync_width, vsync_width, MIPI_FB_ADDR, image_wd, pack_pattern, ystride); #endif ReadValue = readl(DSI_INT_CTRL) & 0x00010000; while (ReadValue != 0x00010000) { ReadValue = readl(DSI_INT_CTRL) & 0x00010000; count++; if (count > 0xffff) { status = FAIL; dprintf(CRITICAL, "Video lane test failed\n"); return status; } } dprintf(SPEW, "Video lane tested successfully\n"); return status; }