MTK平台LCD驱动框架详解(二)

本文详细介绍了MTK平台的LCD驱动框架,从应用程序调用的视角出发,解析了驱动核心Fbmem.c,包括register_framebuffer和mtkfb_probe函数的工作流程。重点讨论了fb_info结构体的分配、设置及注册,以及它在驱动和应用程序中的关键作用。
摘要由CSDN通过智能技术生成

前篇博客链接:http://blog.csdn.net/xuan_h/article/details/38519975

上篇博文说到了mtkfb_probe函数,本文在说mtkfb_probe函数之前。我还是打算在从应用程序的调用开始分析下具体的调用过程。这是我们理解驱动框架的核心,而并不是简单的接受。


一、驱动核心Fbmem.c(alps\kernel\drivers\video\Fbmem.c)分析

      下面先摘取一部分源码,源码包括:入口函数、fb_fops、fb_fops中的open函数。用户调用open函数打开lcd时,会调用到这里的fb_open函数,我们待会就从这个函数开始分析下流程。

static int fb_open(struct inode *inode, struct file *file)
__acquires(&info->lock)
__releases(&info->lock)
{
	int fbidx = iminor(inode);  //获得次设备号
	struct fb_info *info;
	int res = 0;

	info = get_fb_info(fbidx);  //根据次设备号获得fb_info结构体
	if (!info) {
		request_module("fb%d", fbidx);
		info = get_fb_info(fbidx);
		if (!info)
			return -ENODEV;
	}
	if (IS_ERR(info))
		return PTR_ERR(info);

	mutex_lock(&info->lock);
	if (!try_module_get(info->fbops->owner)) {
		res = -ENODEV;
		goto out;
	}
	file->private_data = info;
	if (info->fbops->fb_open) {
		res = info->fbops->fb_open(file,info,1);
		if (res)
			module_put(info->fbops->owner);
	}
#ifdef CONFIG_FB_DEFER
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值