高通 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平台LCD驱动分析的更多相关文章
- 高通Android平台硬件调试之Camera篇
之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- 高通Android display分析【转】
本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...
- 高通安卓调试LCD几方面总结
来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...
- 高通android开发摘要
一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...
- Linux加载DTS设备节点的过程(以高通8974平台为例)
DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...
- 高通移植mipi LCD的过程LK代码
lk部分:(实现LCD兼容) 1. 函数定位 aboot_init()来到target_display_init(): 这就是高通原生lk LCD 兼容的关键所在.至于你需要兼容多少LCD 就在whi ...
- Linux的LCD驱动分析及移植
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 LCD驱动分析 LCD屏的驱动总体上分成两块,一块是GUI ...
- LCD驱动分析(二)帧缓冲设备作为平台设备
参考:S3C2440 LCD驱动(FrameBuffer)实例开发<一> S3C2440 LCD驱动(FrameBuffer)实例开发<二> 1.平台设备注册 1.1在li ...
随机推荐
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52532085 不知不觉到第九篇了,感觉还有 ...
- 【酷我天气】完整的天气App项目
本人完全自主设计与开发的一款轻量级简约好用的天气App,无广告,无烦人的通知栏信息,定位精准,天气信息数据准确,还支持更换背景皮肤哦,颜值爆表. 实现的功能: 1自动定位:自动获取用户所在的城市位置然 ...
- Scala actor的使用
Actor 为什么需要Actor? Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式.例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消 ...
- android自定义View-继承
介绍anroid通过继承系统的控件自定义view 方法是通过对OnDraw()方法进行复写来实现的 举例继承TextView 在textView的背景加上矩形的效果 代码实现 testView的代码 ...
- Axure实现淡入淡出效果
小伙伴们有可能在各大网站看到淡入淡出效果的动画,比如淘宝.京东,淘宝每天会把各种打折促销.今日推荐.限时抢购等做成淡入淡入或者向右活动等类似翻页的效果放在首页,吸引顾客的眼球,那么如何使用Axure来 ...
- 【一天一道LeetCode】#137. Single Number II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- androidstudio各版本下载地址
文件夹如下,含android studio多个版本的下载地址:http://pan.baidu.com/s/1ntmdCPN 目前有以下版本: 0.5.2: windows 0.5.4: linux ...
- 仿iphone快速导航悬浮球
用过iphone的朋友都知道,iPhone有个圆球辅助工具,它漂浮在你的手机屏幕(在任何APP之上),你可以将它移动到任何地方,它叫做AssistiveTouch,本篇模拟该软件实现一个小案例,主要是 ...
- C++ Primer 有感(异常处理)(四)
查看普通函数的声明的时候,不可能知道该函数会抛出什么异常,但是在捕获异常的时候要知道一个函数会抛出什么样的异常,以便捕获异常. 异常说明:指定,如果函数抛出异常,抛出的异常将是包含在该说明中的一种,或 ...
- Linux IPC实践(7) --Posix消息队列
1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...