2009年2月24日 星期二

引-Linux-2.6.22的LCD驱动

〔http://hi.baidu.com/zengzhaonong/blog/item/2d78054ca53ea7ffd72afcdd.html」

Hardware and Software:
CPU: S3C2410
LCD: LTV350QV-F04
OS : linux-2.6.22

1. 添加s3c2410处理器的LCD控制寄存器的初始值,具体做法为在文件arch/arm/mach-s3c2410/mach-smdk2410.c中添加struct s3c2410fb_mach_info类型的寄存器描述讯息,如下所示:

static struct s3c2410fb_mach_info smdk2410_lcd_info __initdata = {
.fixed_syncs = 0,
.type = S3C2410_LCDCON1_TFT,

.width = 320,
.height = 240,

.xres = {
.min = 320,
.max = 320,
.defval = 320,
},
.yres = {
.max = 240,
.min = 240,
.defval = 240,
},
.bpp = {
.min = 16,
.max = 16,
.defval = 16,
},

.regs = {
.lcdcon1 = S3C2410_LCDCON1_TFT16BPP | //(1)
S3C2410_LCDCON1_TFT |
S3C2410_LCDCON1_CLKVAL(2),
.lcdcon2 = S3C2410_LCDCON2_VBPD(3) |
S3C2410_LCDCON2_LINEVAL(239) |
S3C2410_LCDCON2_VFPD(5) |
S3C2410_LCDCON2_VSPW(15),
.lcdcon3 = S3C2410_LCDCON3_HBPD(5) |
S3C2410_LCDCON3_HOZVAL(319) |
S3C2410_LCDCON3_HFPD(15),
.lcdcon4 = //S3C2410_LCDCON4_MVAL(13) |
S3C2410_LCDCON4_HSPW(8),
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
},

.gpccon = 0xaaaaaaaa,
.gpccon_mask = 0xffffffff,
.gpcup = 0xffffffff,
.gpcup_mask = 0xffffffff, //(2)

.gpdcon = 0xaaaaaaaa,
.gpdcon_mask = 0xffffffff,
.gpdup = 0xffffffff,
.gpdup_mask = 0xffffffff,

.lpcsel = 0x00, //(3)
};
注:
(1) LCD的数据线,也就是RGB(Red Green Blue)线,此处的硬件连接决定了LCD的BPP,16BPP或24BPP,我的开发板上采用的是5:6:5的16BPP的连接。关于BPP和连线的关 系可以参考2410手册的387~390页。
(2) 将GPC配置为VD功能,并关闭GPC的pull-up(上拉电阻)功能
(3) 这款LCD的特点是驱动IC内置在LCD模块上,所以不用外接lpc3600等驱动IC。
(4)S3C2410的LCD控制器说明 以及 HSPW,HBPD,HFPD等参数的算法


2. 通过s3c24xx_fb_set_platdata()函数向内核注册上面的信息(smdk2410_lcd_info),此函数在arch/arm/plat-s3c24xx/devs.c中定义。

然后在arch/arm/mach-s3c2410/mach-smdk2410.c的smdk2410_init()函数中调用s3c24xx_fb_set_platdata(),具体为:
static void __init smdk2410_init(void)
{
s3c24xx_fb_set_platdata(&smdk2410_lcd_info);
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}

3. 在make menuconfig的时候配置Linux的logo选项,然后的时候在console选项中选上framebuffer console surpport,要不然看不到小企鹅。
Device Drivers --->
Graphics support --->
Console display driver support --->
<*> Framebuffer Console support
[*] Bootup logo --->


4. 测试LCD驱动

类别:驱动开发api | 添加到搜藏 | 浏览(421) | 评论 (2)
上一篇:LCD参数 下一篇:驱动的入口点

网友评论:
1

zengzhaonong
2008年08月30日 星期六 21:51 | 回复
S3C2410 HOZVAL = (Horizontal display size) -1 LINEVAL = (Vertical display size) -1 VCLK(Hz) = HCLK/[(CLKVAL+1)x2]
3

zengzhaonong
2008年08月30日 星期六 22:53 | 回复
VCLK(Hz) = HCLK/[(CLKVAL+1)x2] CLKVAL:决定VCLK的分频比。LCD控制器输出的VCLK是直接由系统总线(AHB)的工作频率HCLK直接分频得到的。做为240*320的TFT屏,应保证得出的VCLK在5~10MHz之间。 S3C2410的总线工作频率HCLK为60MHz.为了使VCLK等于10MHz,所以设置CLKVAL为2。 注: 如果CLKVAL设置不合适(过大),会导致屏幕抖动。

沒有留言:

張貼留言