博观而约取,厚积而薄发。这篇文章主要讲述[RK3288][Android6.0] Display驱动初始化流程小结相关的知识,希望能为你提供帮助。
【[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
推荐阅读
- Android零基础入门第87节(Fragment添加删除替换)
- Android studio清理项目构建
- 安卓 按钮等 半透明设置
- call和apply方法
- 接受第三方app分享的数据
- Mybatis通用Mapper(转)
- Android中Parcelable接口用法
- dispatch_apply的用法
- 《完美解决系列》Android5.0以上 Implicit intents with startService are not safe