Kernel Version: 3.0.35
ldb.c: LVDS driver
mxc_dispdrv.c display通用注册handle接口,用于统一管理各种接口。
mxc_ipuv3_fb.c 平台核心驱动,最终用于注册driver到fb中。
ldb device 注册:
imx6q_add_ldb -> //board-mx6-tek.c
imx_add_ldb ->
imx_add_platform_device -> //device name是mxc_ldb
imx_add_platform_device_dmamask ->
platform_device_alloc //分配一个platform_device
platform_device_add //添加device
ldb driver 注册:
ldb_init -> //ldb.c
ldb_probe ->
mxc_dispdrv_register -> //ldb_drv添加到dispdrv_list,后面注册fb会用到
fb device 注册:
mx6_tek_board_init -> //board-mx6-tek.c,每个平台的init函数不同,可参考board-mx6-xxx.c
imx6q_add_ipuv3fb ->
imx_add_ipuv3_fb -> //tek_fb_data和IPU的number成倍数对应,一个IPU可支持两个fb,IM6Q有两个IPU,所以可支持4个fb.
imx_add_platform_device_dmamask -> //device name: mxc_sdc_fb
platform_device_alloc
platform_device_add //添加一个device
fb driver 注册:
mxcfb_init -> //mxc_ipuv3_fb.c
platform_driver_register -> //driver name: mxc_sdc_fb, 有几个ipu就应该会probe相对的次数。
mxcfb_probe ->
mxcfb_init_fbinfo //初始化fbinfo, 其中fb->var.active为FB_ACTIVATE_NOW
mxcfb_option_setup //从cmdline获取fb设置,如果没有,就默认使用board中tek_fb_data里的值。
fb_get_options //拿之前video=mxcfb0获取的值和mxcfbx做比较,如果相匹配,然后在解析对应后面的参数。x是当前对应的fb number号,所以这样就会一一对应。如果后面带:off字样,表示不使用此路通道。
mxcfb_dispdrv_init ->
mxc_dispdrv_gethandle -> //根据传进来的disp_dev name在dispdrv_list中匹配获取对应的driver handle,这里是获取的是ldb的handle,它的注册是在ldb_probe()的mxc_dispdrv_register实现的,它将自己添加到了dispdrv_list。
entry->drv->init -> //mxc_dispdrv.c 调用对应driver的init函数,这里就是ldb driver对应的init了。
ldb_disp_init -> ldb.c
fb_find_mode //寻找最合适的LCD参数
mxcfb_register ->
register_framebuffer //注册fb
lcd 参数匹配可参考:
http://blog.csdn.net/kris_fei/article/details/50401422