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


    本文转载自: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

  • 相关阅读:
    关于 JLRoutes
    关于Objection 框架或解耦合方案
    窥探 NSObject
    关于cocoa 运行时runtime
    关于 cocoapods 使用
    关于Xcode 遇到的 警告、错误 处理
    ios 中正则匹配 ,NSPredicate
    关于状态栏 上颜色配置 ios7.x 之后
    使用ios系统侧滑 7.x 之后
    常用的shell脚本
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7802857.html
Copyright © 2020-2023  润新知