本文转载自: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驱动初始化流程小结【转】的更多相关文章

  1. [RK3288][Android6.0] TS-ADC驱动流程小结【转】

    本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936 Platform: RK3288OS: Android 6.0Kernel: ...

  2. [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...

  3. [RK3288][Android6.0] U-boot 启动流程小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/52536093 Platform: RK3288OS: Android 6.0Version: ...

  4. [RK3288][Android6.0] 系统按键驱动流程分析【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...

  5. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  6. [RK3288][Android6.0] 音频调试方法小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/70053135 Platform: ROCKCHIPOS: Android 6.0Kernel ...

  7. [RK3288][Android6.0] 关于uboot中logo相关知识点小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/76256224 Platform: Rockchip OS: Android 6.0 Kern ...

  8. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

  9. [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71515020 Platform: RockchipOS: Android 6.0Kernel ...

随机推荐

  1. MFC模拟鼠标点击

    MFC 工程 把以下代码放到你想要响应的函数里面就行 CPoint pt; GetCursorPos(&pt);//获取鼠标在屏幕的当前位置 SetCursorPos(100,200);//移 ...

  2. 笔试算法题(11):Josephus环 & Fibonacci序列

    出题:Josephus Cycle,约瑟夫环问题.k个数字连成一个环,第一个数字为1.首先从1开始计数删除第m个数字:然后从上次被删除的数字的下一个数字开始计数,删除第m个数字:重复进行第二步直到只剩 ...

  3. 简单说一下Set,list,Map的类型和自己的特点

    首先是Set,List,Map Set和list都是继承了Conllection接口,而Map是本身就是一个接口 set是最简单的一种集合,没有重复对象 set接口主要有两个实现: 1,hashSet ...

  4. buf.values()

    buf.values() 返回:{Iterator} 创建并返回一个包含 Buffer 值(字节)的迭代器.当 Buffer 使用 for..of 声明时将自动调用该函数. const buf = B ...

  5. xtu read problem training 4 B - Multiplication Puzzle

    Multiplication Puzzle Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. O ...

  6. Amoeba新版本MYSQL读写分离配置

    标签:mysql 数据库 读写分离 休闲 amoeba 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://skyson.blog.5 ...

  7. LOJ#539. 「LibreOJ NOIP Round #1」旅游路线

    n<=100,m<=1000的图,在此图上用油箱容量C<=1e5的车来旅行,旅行时,走一条边会耗一单伟油,在点i时,若油量<ci,则可以把油以pi的价格补到ci,pi<= ...

  8. jquery判断单选按钮radio是否选中的方法

    JQuery控制radio选中和不选中方法总结 一.设置选中方法 复制代码代码如下: $("input[name='名字']").get(0).checked=true; $(&q ...

  9. 如何爬取可用的IP代理

    上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会. 1 步骤 1.找到几个提供免费IP代理的网站,获 ...

  10. sqlserver2008 存储过程使用表参数

    ----首先,我们定义一个表值参数类型,其实就是一个表变量   Create type dbo.tp_Demo_MultiRowsInsert as Table   (   [PName] [Nvar ...