- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
s3c6410_LCD
s3c6410_LCD frame buffer 驱动分析
fb_info结构体中的成员变量fops直接指向底层操作函数指针
struct fb_ops s3cfb_ops = {?? ?.owner?? ??? ?= THIS_MODULE,?? ?.fb_check_var?? ?= s3cfb_check_var,//检测可变参数,并调整到支持的值?? ?.fb_set_par?? ?= s3cfb_set_par,????? //设置video的模式 ?? ?.fb_blank?? ?= s3cfb_blank,????????????? //显示空白区域?? ?.fb_pan_display?? ?= s3cfb_pan_display,//pan显示?? ?.fb_setcolreg?? ?= s3cfb_setcolreg,//设置color寄存器,设置颜色表?? ?.fb_fillrect?? ?= cfb_fillrect,??????? //矩形填充?? ?.fb_copyarea?? ?= cfb_copyarea,??? //数据复制?? ?.fb_imageblit?? ?= cfb_imageblit,? //图形填充?? ?.fb_cursor?? ?= soft_cursor,?????? //绘制光标?? ?.fb_ioctl?? ?= s3cfb_ioctl,???????? //fb特定的ioctl};
//上面这些操作函数指针需要驱动开发人员自己编写的,如果没赋值则默认调用系统中的
static struct platform_driver s3cfb_driver = {
?? ?.probe?? ??? ?= s3cfb_probe,?? ?.remove?? ??? ?= s3cfb_remove,?? ?.suspend?? ?= s3cfb_suspend,?? ?.resume?? ??? ?= s3cfb_resume,??????? .driver?? ??? ?= {?? ??? ?.name?? ?= s3c-fb,?? ??? ?.owner?? ?= THIS_MODULE,?? ?},};int __devinit s3cfb_init(void)
{
??? /**模块加载函数实现平台驱动的注册**/
?? ?return platform_driver_register(s3cfb_driver);}static void __exit s3cfb_cleanup(void){?? ?platform_driver_unregister(s3cfb_driver);}module_init(s3cfb_init);module_exit(s3cfb_cleanup);
//s3cfb_probe平台驱动的探测函数,主要初始化fb_info结构体中的可变参数和不可变参数结构体,LCD硬件控制器的初始化,获取时钟来源,显示缓存空间的申请,注册帧缓冲设备等工作。
static int __init s3cfb_probe(struct platform_device *pdev){
?? //定义局部变量
??? struct resource *res; //保存平台资源的局部变量?? ?struct fb_info *fbinfo;//帧缓冲结构?? ?s3cfb_info_t *info;//对于特定的bsp封装了驱动中所需要的一些信息?? ?char driver_name[] = s3cfb;/*驱动名称*/?? ?int index = 0, ret, size;//用来临时保存信息??? /**分配fb_info结构体**/?? ?fbinfo = framebuffer_alloc(sizeof(s3cfb_info_t), pdev-dev);?? ?if (!fbinfo)?? ??? ?return -ENOMEM;??? /*将fbinfo传递给内核中总线设备结构所对应的驱动数据信息*/?? ?platform_set_drvdata(pdev, fbinfo);//方便后面用到
/*********************************************************
platform_set_drvdata(pdev, fbinfo)的具体实现函数:
*void dev_set_drvdata(struct device *dev, void *data)*{*??? int error;*?? if (!dev)*??
文档评论(0)