lcm驱动加载及调用流程-MT6739

使用mt6739平台4.4内核,按下开机键,液晶开始显示,从而进入LK加载lcm的阶段

LK执行流程:

开机执行vendor/mediatek/proprietary/bootable/bootloader/目录下

从preloader/platform/mt6739/src/core/main.c开始执行

   →执行lk/platform/mt6739/platform.c的void platform_init(void)

       →执行lk\platform\mt6739\mt_disp_drv.c的void mt_disp_init(void *lcdbase)

        → 执行 lk\platform\mt6739\primary_display.c的primary_display_init()

          →最后执行lk\platform\mt6739\disp_lcm.c的disp_lcm_handle* disp_lcm_probe()

执行disp_lcm_handle* disp_lcm_probe之后获取lcm驱动打印的信息:

分析 disp_lcm_probe:

   开始分析程序流程:

 if (check_lcm_node_from_DT() == 0) {
        lcm_drv = &lcm_common_drv;
        isLCMFound = true;
        isLCMDtFound = true;
    }
//check_lcm_node_from_DT是判断dev目录mt65xx_lcm_list.c文件的lcm_name_list数组
lcm_drv= lcm_driver_list[i];//获取mt65xx_lcm_list.c文件的lcm_driver_list数组数据
lcm_drv->get_params(&hlcm_param);
plcm->drv = lcm_drv;
 
if (lcm_id == LCM_INTERFACE_NOTDEFINED ||(lcm_id != LCM_INTERFACE_NOTDEFINED && plcm->lcm_if_id == lcm_id))//判断获取的ID值
 {
        handle = _display_interface_path_init(plcm);//液晶接口的数据获取及初始化
 
if (lcm_drv->compare_id != NULL) //再次判断ID值
 
_display_interface_path_deinit(handle);

 
 
_dump_lcm_info(plcm);//打印现在使用的lcm驱动的信息
这个函数会调用到lk中lcm ic 驱动文件的compare_id函数,返回lcd的id,id存在的话,就会break跳出遍历,告诉系统使用当前这个lcm,这样目的就是取得机器上当前所使用的lcm的各种信息

最后执行到vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6739\primary_display.c的

    int primary_display_init(char *lcm_name)调用pgc->plcm = disp_lcm_probe( lcm_name, LCM_INTERFACE_NOTDEFINED)

这样LK部分就跑完了

 

 

kernel部分:

驱动函数从\kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\mtkfb.c的__init mtkfb_init(void)开始执行

 分析 mtkfb_probe(struct platform_device *pdev)函数执行流程:

--→ _parse_tag_videolfb();//获取驱动节点,并打印信息
 
--→dts_gpio_state = disp_dts_gpio_init_repo(pdev);//获取dts fb驱动的配置信息
    if (dts_gpio_state != 0)
        dev_err(&pdev->dev, "retrieve GPIO DTS failed.");
 
--→fbi = framebuffer_alloc(sizeof(struct mtkfb_device), &(pdev->dev));//分配地址空间
 
fbdev->fb_info = fbi;//传到info结构体
 
--→primary_display_init(mtkfb_find_lcm_driver(), lcd_fps, is_lcm_inited)
 //调用kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\primary_display.c的
        primary_display_init()函数
     --→调用kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\disp_lcm.c的disp_lcm_probe
         //跟LK是一样操作获取mt65xx_lcm_list.c的数组信息
 
--→mtkfb_fbinfo_init(fbi);//初始化系统fb_info结构体对象并设置默认视频模式
 
--→mtkfb_register_sysfs(fbdev);
 
--→register_framebuffer(fbi);//注册fb设备
   _parse_tag_videolfb()会打印下面信息

这是mtkfb_init开始到成功的信息 

到此,kernel的lcm驱动信息就加载完了 

framebuffer设备一些注册,操作在kernel-4.4\drivers\video\fbdev\core\fbmem.c文件中实现
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值