linux lcd设备驱动剖析四

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

文章链接:http://blog.csdn.net/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++)
	
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Linux字符设备驱动Linux内核中的一种设备驱动类型,用于与字符设备进行交互。字符设备是一种按字符流进行输入输出的设备,如串口、终端、打印机等。 在Linux内核中,字符设备驱动通过注册字符设备文件来与用户空间进行通信。它提供了一组操作函数,用于处理读写、打开关闭等操作。 对于字符设备驱动剖析可以从以下几个方面来理解: 1. 设备注册:字符设备驱动需要通过调用`register_chrdev`函数来注册设备号,并通过`cdev_add`函数向内核注册字符设备驱动。 2. 设备文件操作:字符设备驱动需要实现一些操作函数,如`open`、`read`、`write`、`release`等。这些函数在用户空间通过系统调用来触发,驱动会根据不同的操作进行相应的处理。 3. 设备文件结构:在内核中,每个字符设备都有一个对应的`struct file_operations`结构体,用于存储设备文件操作函数的地址。驱动需要将这个结构体与设备文件关联起来。 4. 中断处理:对于一些特殊的字符设备,如串口接收数据触发中断时,驱动需要实现中断处理函数,并通过注册中断处理程序来响应中断。 5. 设备驱动的通信:字符设备驱动通过读写设备寄存器、共享内存等方式与设备进行通信。驱动需要通过合适的方式与设备进行数据的交互。 总之,字符设备驱动Linux内核中与字符设备交互的重要组成部分。剖析字符设备驱动可以帮助理解驱动的注册、设备文件操作、中断处理等工作原理,从而更好地了解Linux内核的设备驱动机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值