static int32_t sprdfb_dispc_init(struct sprdfb_device *dev) { FB_PRINT("sprdfb:[%s]\n",__FUNCTION__); /*set bg color*/ dispc_set_bg_color(0xFFFFFFFF); /*enable dithering*/ dispc_dithering_enable(1); /*use MSBs as img exp mode*/ dispc_set_exp_mode(0x0); dispc_layer_init(dev); if(SPRDFB_PANEL_IF_DPI == dev->panel_if_type){ if(is_first_frame){ /*set dpi register update only with SW*/ dispc_set_bits((1<<4), DISPC_DPI_CTRL); }else{ /*set dpi register update with SW & VSYNC*/ dispc_clear_bits((1<<4), DISPC_DPI_CTRL); } /*enable dispc update done INT*/ // dispc_write((1<<4), DISPC_INT_EN); }else{ /* enable dispc DONE INT*/ // dispc_write((1<<0), DISPC_INT_EN); } return 0; }
static int32_t sprdfb_dispc_init(struct sprdfb_device *dev) { pr_debug(KERN_INFO "sprdfb:[%s]\n",__FUNCTION__); /*set bg color*/ dispc_set_bg_color(0xFFFFFFFF); /*enable dithering*/ dispc_dithering_enable(true); /*use MSBs as img exp mode*/ dispc_set_exp_mode(0x0); if(dispc_ctx.is_first_frame){ dispc_layer_init(&(dev->fb->var)); }else{ dispc_layer_update(&(dev->fb->var)); } if(SPRDFB_PANEL_IF_DPI == dev->panel_if_type){ if(dispc_ctx.is_first_frame){ /*set dpi register update only with SW*/ dispc_set_bits(BIT(4), DISPC_DPI_CTRL); }else{ /*set dpi register update with SW & VSYNC*/ dispc_clear_bits(BIT(4), DISPC_DPI_CTRL); } /*enable dispc update done INT*/ dispc_write((1<<4), DISPC_INT_EN); }else{ /* enable dispc DONE INT*/ dispc_write((1<<0), DISPC_INT_EN); } dispc_set_bits(BIT(2), DISPC_INT_EN); dev->enable = 1; return 0; }
int32_t autotst_dispc_init(int display_type) { int ret = 0; printk(KERN_INFO "autotst_dispc:[%s]\n",__FUNCTION__); //autotst_dsi_dump(); autotst_dispc_uninit(DISPLAY_TYPE_MIPI); ret = dispc_clk_init(); if(ret){ printk(KERN_WARNING "autotst_dispc: dispc_clk_init fail!\n"); return -1; } dispc_reset(); dispc_module_enable(); /*set bg color*/ dispc_set_bg_color(0xFFFFFFFF); /*enable dithering*/ dispc_dithering_enable(true); /*use MSBs as img exp mode*/ dispc_set_exp_mode(0x0); //enable DISPC Power Control dispc_pwr_enable(true); switch(display_type){ case DISPLAY_TYPE_MCU: autotst_panel = &lcd_dummy_mcu_spec; mcu_dispc_init_config(autotst_panel); mcu_dispc_set_timing(autotst_panel); break; case DISPLAY_TYPE_RGB: autotst_panel = &lcd_dummy_rgb_spec; rgb_dispc_init_config(autotst_panel); rgb_dispc_set_timing(autotst_panel); autotst_dispc_ctx.dispc_if = DISPC_IF_DPI; break; case DISPLAY_TYPE_MIPI: autotst_panel = &lcd_dummy_mipi_spec; mipi_dispc_init_config(autotst_panel); mipi_dispc_set_timing(autotst_panel); autotst_dsi_init(autotst_panel); break; default: printk("autotst_dispc:[%s] error display type (%d)\n", __FUNCTION__, display_type); } dispc_layer_init(autotst_panel); if(DISPC_IF_DPI == autotst_dispc_ctx.dispc_if){ if(1){ /*set dpi register update only with SW*/ dispc_set_bits(BIT(4), DISPC_DPI_CTRL); }else{ /*set dpi register update with SW & VSYNC*/ dispc_clear_bits(BIT(4), DISPC_DPI_CTRL); } /*enable dispc update done INT*/ //dispc_write((1<<4), DISPC_INT_EN); }else{ /* enable dispc DONE INT*/ //dispc_write((1<<0), DISPC_INT_EN); } //dispc_set_bits(BIT(2), DISPC_INT_EN); return 0; }