linux lcd设备驱动剖析四

本文深入探讨Linux LCD驱动,重点解析s3c24xxfb_probe函数中fb_info结构体的fbops成员。分析s3c2410fb_check_var和s3c2410fb_set_par函数,详述如何设置fb_fix_screeninfo和fb_var_screeninfo结构体,以及硬件参数如lcdcon寄存器的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux lcd设备驱动剖析二文章中,我们详细分析了s3c24xxfb_probe函数。

文章链接:http://blog.youkuaiyun.com/lwj103862095/article/details/18189765

s3c2410fb.c中s3c24xxfb_probe是非常重要的函数之一,但仅仅分析probe函数,貌似感觉有点不够过瘾,貌似缺少分析了一个非常重要的成员。在probe函数中有一句:fbinfo->fbops   = &s3c2410fb_ops;

static struct fb_ops s3c2410fb_ops = {
	.owner			= THIS_MODULE,
	.fb_check_var	= s3c2410fb_check_var,		//设置可变参数
	.fb_set_par		= s3c2410fb_set_par,		//设置固定参数及lcdcon寄存器
	.fb_blank		= s3c2410fb_blank,			//设置是否使能LCD控制器
	.fb_setcolreg	= s3c2410fb_setcolreg,		//设置RGB颜色,实现伪颜色表
	.fb_fillrect	= cfb_fillrect,				//画一个矩形
	.fb_copyarea	= cfb_copyarea,				//Copy data from area to another
	.fb_imageblit	= cfb_imageblit,			//Draws a image to the display
};	

一、s3c2410fb_check_var函数主要根据tq2440_lcd_cfg实例来设置fb_info结构体的可变参数

fb_var_screeninfo结构体各个成员,如xres、yres、bits_per_pixel、height、width 等等,具体分析如下:

/* 此函数的主要功能是设置可变参数var  */	
static int s3c2410fb_check_var(struct fb_var_screeninfo *var,
			       struct fb_info *info)
{	
	struct s3c2410fb_info *fbi = info->par;

	/* platform_data就是tq2440_fb_info结构体实例 */
	struct s3c2410fb_mach_info *mach_info = fbi->dev->platform_data;
	struct s3c2410fb_display *display = NULL;

	/* 在tq2440_fb_info实例里,displays = tq2440_lcd_cfg,default_display = 0 */
	struct s3c2410fb_display *default_display = mach_info->displays +
						    mach_info->default_display;

	/* 在tq2440_fb_info实例里,type = S3C2410_LCDCON1_TFT */
	int type = default_display->type;
	unsigned i;

	dprintk("check_var(var=%p, info=%p)\n", var, info);

	/* validate x/y resolution */
	/* choose default mode if possible */

	/* 如果参数都等于tq2440_fb_info实例里的参数
	 * 那么赋值给display,此时display指向tq2440_fb_info实例
	 */
	if (var->yres == default_display->yres &&
	    var->xres == default_display->xres &&
	    var->bits_per_pixel == default_display->bpp)
		display = default_display;	

	/* 否则从tq2440_fb_info结构体实例中循环匹配,num_displays = 1 */
	else
		for (i = 0; i < mach_info->num_displays; i++)
	
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值