[RK3288][Android6.0] Display驅動初始化流程小結【轉】

來源:互聯網
上載者:User

標籤:存在   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驅動初始化流程小結【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.