S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)

来源:本站
导读:目前正在解读《S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)》的相关信息,《S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)》的详细说明。

S3C2410_LCDCON5_INVVLINE |

S3C2410_LCDCON5_INVVFRAME |

S3C2410_LCDCON5_PWREN |

S3C2410_LCDCON5_HWSWP,

.type = S3C2410_LCDCON1_TFT

//以下一些参数在上面的时序图分析中讲到过,各参数的值请跟据具体的LCD屏数据手册结合上面时序分析来设定

};

static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {

.displays = &smdk2440_lcd_cfg

.num_displays = 1,

.default_display = 0,

.gpccon = 0xaaaa555a

.gpccon_mask = 0xffffffff,

.gpcup = 0x0000ffff

.gpcup_mask = 0xffffffff,

.gpdcon = 0xaaaaaaaa

.gpdcon_mask = 0xffffffff,

.gpdup = 0x0000ffff

.gpdup_mask = 0xffffffff,

.lpcsel = 0x0

};

注意:可能有很多朋友不知道上面红色部分的参数是做什么的,其值又是怎么设置的?其实它是跟你的开发板LCD控制器密切相关的,看了下面两幅图相信就大概知道他们是干什么用的:

S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)

S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)

上面第一幅图是开发板原理图的LCD控制器部分,第二幅图是S3c2440数据手册中IO端口C和IO端口D控制器部分。原理图中使用了GPC8-15和GPD0-15来用做LCD控制器VD0-VD23的数据端口,又分别使用GPC0、GPC1端口用做LCD控制器的LEND和VCLK信号,对于GPC2-7则是用做STN屏或者三星专业TFT屏的相关信号。然而,S3C2440的各个IO口并不是单一的功能,都是复用端口,要使用他们首先要对他们进行配置。所以上面红色部分的参数就是把GPC和GPD的部分端口配置成LCD控制功能模式。

从以上讲述的内容来看,要使LCD控制器支持其他的LCD屏,重要的是根据LCD的数据手册修改以上这些参数的值。下面,我们再看一下在驱动中是如果引用到s3c2410fb_mach_info结构体的(注意上面讲的是在内核中如何使用的)。在mach-smdk2440.c中有:

//S3C2440初始化函数

static void __init smdk2440_machine_init(void)

{

s3c24xx_fb_set_platdata(&smdk2440_fb_info);

s3c_i2c0_set_platdata(NULL);

platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));

smdk_machine_init();

}

s3c24xx_fb_set_platdata定义在plat-s3c24xx/devs.c中:

void __init s3c24xx_fb_set_platdata(struct s3c2410fb_mach_info *pd)

{

struct s3c2410fb_mach_info *npd;

npd = kmalloc(sizeof(*npd), GFP_KERNEL);

if (npd) {

memcpy(npd, pd, sizeof(*npd));

//这里就是将内核中定义的s3c2410fb_mach_info结构体数据保存到LCD平台数据中,所以在写驱动的时候就可以直接在平台数据中获取s3c2410fb_mach_info结构体的数据(即LCD各种参数信息)进行操作

s3c_device_lcd.dev.platform_data = npd;

} else {

printk(KERN_ERR "no memory for LCD platform datan");

}

}

这里再讲一个小知识:不知大家有没有留意,在平台设备驱动中,platform_data可以保存各自平台设备实例的数据,但这些数据的类型都是不同的,为什么都可以保存?这就要看看platform_data的定义,定义在/linux/device.h中,void *platform_data是一个void类型的指针,在Linux中void可保存任何数据类型。

提醒:《S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)》最后刷新时间 2024-03-14 01:00:36,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《S3C2440上LCD驱动(FramBuffer)实例开发详解(4/4)》该内容的真实性请自行鉴别。