[RK3288][Android6.0] Display驱动初始化流程小结

来源:互联网 发布:淘宝店铺自定义装修 编辑:程序博客网 时间:2024/05/19 00:09
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

3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩好动症该怎么办 小孩子好动症该怎么办 怀孕5个月胎死亡怎么办 小孩多动调皮怎么办 手心老是出汗是怎么办 孩子吃饭特别慢怎么办 小孩子老想睡觉怎么办 孩子下午上课犯困怎么办 小孩子有多动症该怎么办 初中写作业犯困怎么办 孩子晚上学习困怎么办 小孩子容易兴奋激动怎么办 中考时过度兴奋怎么办 小孩兴奋不睡觉怎么办 孩子突然反常不听话怎么办? 婴儿亢奋不睡觉怎么办 宝宝听力筛查没通过怎么办 7个多月宝宝缺钙怎么办 暑假孩子天天看电视怎么办 移植后天天便秘怎么办 天天拉屎还便秘怎么办 孩子不爱吃鸡蛋怎么办 孩子看书没耐心怎么办 5岁宝宝鼻炎怎么办 手术后认知障碍怎么办 孩子很调皮好动怎么办 学生打家长该怎么办 老师打学生家长该怎么办 三岁儿子多动症怎么办 小孩一直缺锌怎么办 宝宝严重缺锌怎么办 儿童缺钙缺锌怎么办 怀孕前期喝酒了怎么办 怀孕之前喝酒了怎么办 怀孕后喝酒了怎么办 刚怀孕喝啤酒怎么办 早孕期间喝酒了怎么办 发现怀孕一个月怎么办 怀孕初期喝白酒怎么办 准备怀孕喝酒了怎么办 怀孕初期喝醉了怎么办