android 副屏驱动_高通 android平台LCD驱动分析
目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(),从而生成/dev/fbx的设备节点。这里最重要的数据结构是fb_ops,它包括fb打开、参数设置、画图、配置、内存映射等操作函数,芯片厂家通常提供了这部分的源码,因为这些操作一般是跟芯片内部的DMP和MIPI
DSI等部件打交道。
当开发一款新的LCD驱动时往往需要关注的是LCD最底层的驱动,即是LCD屏的初始化、亮屏、熄屏以及背光操作。个人觉得以下几个问题有必要弄清楚(参考Qualcomm芯片上的驱动代码):
1、如何添加一款新屏驱动
下面以东芝屏为例(参照源代码mipi_toshiba_video_wvga_pt.c mipi_toshiba.c)
模块初始化:module_init(mipi_video_toshiba_wvga_pt_init);
在mipi_video_toshiba_wvga_pt_init()中主要工作是设置LCD屏的参数,然后注册一个名为mipi_toshiba的平台驱动和平台设备。在注册平台设备时将LCD亮屏、熄屏以及背光操作添加到平台设备中。在mipi_toshiba的平台驱动中利用probe函数调用msm_fb_add_device()。当需要添加一款新屏的驱动时最主要的工作就是注册一个相关的平台驱动和平台设备,可以参照上面的两个源文件。这里需要说明一下:msm_fb_add_device()函数里定义了一个非常重要的数据结构msm_fb_data_type
mfd,这个结构里包括了fb_info,还定义了panel有关的变量。
2、LCD驱动是如何依次打开MDP、MIPI DSI和LCD PANEL
首先在驱动里注册了三个平台设备msm_fb,mdp,mipi_dsi,然后再对应平台驱动probe的时候把各自设备的指针链接到一起,看下面的调用关系:
mdp_probe(pdev)
|
|--->msm_fb_dev = platform_device_alloc('msm_fb', pdev->id)
|
|
|--->pdata = msm_fb_dev->dev.platform_data
|
|
|--->pdata->on = mdp_dsi_video_on
|
|
|--->pdata->off = mdp_dsi_video_off
|
|
|--->pdata->next = pdev
mipi_dsi_probe(pdev)
|
|--->mdp_dev = platform_device_alloc('mdp', pdev->id)
|
|
|--->pdata = mdp_dev->dev.platform_data
|
|
|--->pdata->on = mipi_dsi_on
|
|
|--->pdata->off = mipi_dsi_off
|
|
|--->pdata->next = pdev
mipi_toshiba_lcd_probe(pdev)
|
|
msm_fb_add_device(pdev)
|
|
|--->pdata = pdev->dev.platform_data
|
|
|--->this_dev = msm_fb_device_alloc(pdata, type, id)
|
|
|--->this_dev = platform_device_alloc()
|
|
|--->platform_device_add_data(this_dev, pdata, ...)
当pdata->next指向this_dev时,执行pdata->on,pdata->off时,即调用到mipi_toshiba_lcd_on和mipi_toshiba_lcd_off。
从上面的分析来看,从MDP到panel的调用顺序应该是:mdp_dsi_video_on-->mipi_dsi_on-->mipi_toshiba_lcd_on。msm_fb_blank_sub()是通过mfd->pdev->dev.platform_data来获取pdata,再调用pdata->on(),从而完成上面的调用,在这里mfd->pdev->dev.platform_data指向的就是msm_fb设备的数据。
3、mfd是如何保存msm_fb设备的指针
msm_fb_add_device(pdev)
|
|--->fbi=framebuffer_alloc(sizeof(struct msm_fb_data_type),NULL)
|
|
|--->mfd=(struct msm_fb_data_type *)fbi->par
|
|
|--->mfd->pdev=this_dev (this_dev即mipi_dsi)
|
|
|--->platform_set_drvdata(this_dev,mfd)
mipi_dsi_probe(pdev)
|
|--->mfd=platform_get_drvdata(pdev)
|
|
|--->mfd->pdev=mdp_dev
|
|
|--->platform_set_drvdata(mdp_dev,mfd)
mdp_probe(pdev)
|
|--->mfd=platform_get_drvdata(pdev)
|
|
|--->mfd->pdev=msm_fb_dev
|
|
|--->platform_set_drvdata(msm_fb_dev,mfd)
从上面的调用关系来看,mfd->pdev最终指向了平台设备msm_fb,值得一提的是,在这几个函数中完成了mfd结构的填充。
int panel_next_on(struct platform_device *pdev)
每次执行完一个->on后执行panel_next_on,执行下一个->on
android 副屏驱动_高通 android平台LCD驱动分析相关推荐
- android加载efi分区,高通Android UEFI XBL 代码流程分析
高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...
- SM7250(高通5G)平台LCD bringup
写在前面的话 高通平台显示这一块,自从去年开始,高通全面使用SMxxxx命名的芯片 比如高端系列:SM8350(骁龙888),SM8250(骁龙865),SM8150(骁龙855) 中端系列:SM72 ...
- android wifi驱动流程,高通Android wifi驱动移植-SDIO
环境用的是android2.3系统,wifi是BCM4329,接口是SDIO,Android4.0在步骤上略有不同. 1.首先了解SDIO的一些相关知识: SDIO有两端,其中一端是HOST端,另一端 ...
- android wifi热点项目总结,高通Android wifi移植和wifi热点问题总结
由于开发环境和系统的差异,wifi移植,包括wifi热点开启时有时还会出现其他问题,我这里先总结下: 1.netd问题 Netd 就是Network Daemon 的缩写,表示Network守护进程 ...
- android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现
从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...
- 高通SDX12平台PCIe驱动dtsi解析
&soc {pcie0: qcom,pcie@1c00000 {compatible = "qcom,pci-msm"; //设备节点的compatible属性,用来匹配驱 ...
- 高通Android智能平台环境搭建_编译流程分析
高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...
- 【Android驱动】高通Camera代码probe流程
参看博客: Android camera架构: 基于qualcomm平台的camera 驱动详解_Winston-CSDN博客_高通camera驱动架构 Android Camera MSM HAL: ...
- 高通Android 12默认授权 不弹出投屏弹窗
1.测试反馈老化界面弹出这个界面,工厂大多数员工是不给你点的,所以这个功能必须要干掉弹窗!没啥可说的! 2. 画个简单的逻辑图,比较粗糙,大家就是简单看下,不惜勿喷哈,谢谢大佬们. 3.好吧,我只是个 ...
最新文章
- 【No.1_sizeof与strlen】
- node.js浅入深出---之fs模块
- redis之mq实现发布订阅模式
- jQuery1.9+中删除了live以后的替代方法
- 互联网1分钟 |1207
- TDSQL 全时态数据库系统-理念与愿景
- 图片加到json中,提交到服务器端处理异常问题。
- 雷军超燃演讲:人生最后一次创业,押上全部战绩和信誉造车,小米亏得起!...
- 机械考计算机三级,机器人等级考试三级知识点汇总-20210706222922.pdf-原创力文档...
- linux如何使用鼠标数据的,浅析linux中鼠标数据读取
- php 遍历目录函数,PHP 遍历指定目录所有文件函数的简单示例(可指定文件类型)...
- list_for_each_entry和list_for_each_entry_safe
- python爬取酷狗音乐top500_Python爬取酷狗音乐TOP500榜单
- 编码浅析 ASCII EASCII GBK系列 Uincode UTF-8/16/32
- pad连接与数据流动
- 计算机二级vf查询,计算机二级《VFP》知识点讲解:查询和视图
- Markdown符号
- python实现录屏录音小工具
- Windows安全检查脚本 bat 批处理
- 维瓦尔第协奏曲《四季》赏析 (Antonio Vavildi 《The Four Seasons》)
热门文章
- qq动态名片代码_《绿信集团》一员工因智能名片而改变人生
- poj 2228 环形DP
- TeXworks 高效使用指南
- POSIX互斥锁自旋锁
- python切比雪夫滤波器_python scipy signal.iirfilter用法及代码示例
- Google Earth Engine(GEE)APP——一个监测影像各波段的DN值的app
- Python数据分析入门书籍推荐
- python打开文件的语法_python27语法Python文件打开方式实例详解【a、a+、r+、w+区别】...
- 算法开发常用软件列表
- 计网 | OSI模型中各层单位