標籤:存在 phi mds thread module 函數 cee drive 時序
本文轉載自:http://blog.csdn.net/kris_fei/article/details/52584903
Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92
以MIPI DSI介面的lcd為例.
rk_screen.c:
讀取lcd timing參數。
lcd_mipi.c:
螢幕mipi配置資訊。
rk_fb.c:
fb驅動。
rk3288_lcdc.c
lcdc controller驅動。
rk32_mipi_dsi.c:
dsi controller驅動。
mipi_dsi.c
mipi dsi 操作函數集.
開機按如下順序執行.
//mipi dsi介面相關資訊初始化
rk_mipi_screen_init -> lcd_mipi.c
platform_driver_probe -> //name是rk_mipi_screen
rk_mipi_screen_probe ->
rk_mipi_screen_init_dt //讀取mipi資訊, lane number, power, gpio, sceen on cmds.
//fb相關資訊讀取
rk_fb_init -> rk_fb.c
platform_driver_register -> //name: "rockchip,rk-fb"
rk_fb_probe -> //擷取disp-mode, u-boot-logo-on等參數。
rockchip_ion_client_create //建立ion client。
//timing參數初始化
//不管是那種介面類型的lcd,lcd的時序參數都是要讀取的.
rk_screen_init -> rk_screen.c
platform_driver_register -> //name: "rk-screen"
rk_screen_probe ->
rk_fb_prase_timing_dt -> //讀取來的配置存在結構體變數rk_screen中.
of_get_display_timing //擷取時序參數,dts中可以配置多組,這裡會迴圈讀取。
display_timings_get //根據當前native-mode來選取當前使用哪組時序參數。
rk_fb_video_mode_from_timing //把timing轉換到fb video mode中去供後續使用。
//mipi dsi controller初始化
//如果是另外的介面那就調用相應的介面控制器驅動來初始化.
rk32_mipi_dsi_init -> rk32_mipi_dsi.c
platform_driver_register -> //name: "rk32-mipi"
rk32_mipi_dsi_probe -> //初始化struct dsi結構,包括clock, dsi ops, rk_screen傳遞過來的參數,
rk_fb_get_prmry_screen //擷取在之前rk_screen_probe()中初始化的rk_screen變數.
rk_mipi_dsi_probe ->
register_dsi_ops //dsi->ops給dsi_ops
dsi_probe_current_chip //檢車dsi chip是否存在.
rk_fb_trsm_ops_register //註冊trsm_mipi_ops為trsm_dsi_ops
//lcdc控制器註冊:
rk3288_lcdc_module_init -> rk3288_lcdc.c
platform_driver_register -> //name: "rk3288-lcdc"
rk3288_lcdc_probe ->
rk3288_lcdc_parse_dt //讀取lcdc控制器的參數
dev_drv->ops = &lcdc_drv_ops; //lcdc對應ops
devm_request_irq //lcdc對應irq是rk3288_lcdc_isr()
rk_fb_register -> //對應ops是lcdc_drv_ops
init_lcdc_device_driver ->
init_lcdc_win //一個lcdc能支援4層win.
rk_disp_pwr_ctr_parse_dt //解析lcdc power ctrl相關內容。
rk_fb_set_prmry_screen
rk_fb_trsm_ops_get //根據不同的螢幕類型選擇對應的ops.
framebuffer_alloc //系統根據win的多少來建立相應數量的fb
fbi->fbops = &fb_ops; //fb ops
rkfb_create_sysfs //產生到/dev/graphics/fbx/下
register_framebuffer
rkfb_create_sysfs
//以下code只跑一次
kthread_run //建立rk_fb_wait_for_vsync_thread
dev_drv->ops->post_dspbuf //show logo
[RK3288][Android6.0] Display驅動初始化流程小結【轉】