linux-2.6.22.6中LCD驱动到FL2440-I移植

/*2010.12.26-2010.12.27*/
/*linux-2.6.22.6中LCD驱动到FL2440-I移植*/
/*东华3.5寸TFT:WXCAT35-TG3#001_V1.2: 320*240 24bpp*/

 

1.修改smdk2440_lcd_cfg结构:
vi arch/arm/mach-s3c2440/mach-smdk2440.c
修改后的smdk2440_lcd_cfg结构如下:

static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = { .regs = { .lcdcon1 = S3C2410_LCDCON1_TFT16BPP | S3C2410_LCDCON1_TFT | S3C2410_LCDCON1_CLKVAL(0x06), .lcdcon2 = S3C2410_LCDCON2_VBPD(14) | S3C2410_LCDCON2_LINEVAL(239) | S3C2410_LCDCON2_VFPD(11) | S3C2410_LCDCON2_VSPW(2), .lcdcon3 = S3C2410_LCDCON3_HBPD(37) | S3C2410_LCDCON3_HOZVAL(319) | S3C2410_LCDCON3_HFPD(19), .lcdcon4 = S3C2410_LCDCON4_MVAL(0) | S3C2410_LCDCON4_HSPW(29), .lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP, }, /* currently setup by downloader */ .gpccon = 0xaaaaaaaa, .gpccon_mask = 0xffffffff, .gpcup = 0xffffffff, .gpcup_mask = 0xffffffff, .gpdcon = 0xaaaaaaaa, .gpdcon_mask = 0xffffffff, .gpdup = 0xffffffff, .gpdup_mask = 0xffffffff, .lpcsel= 0x0, /* .lpcsel = ((0xCE6) & ~7) | 1<<4,*/ .fixed_syncs = 1, .type = S3C2410_LCDCON1_TFT, .width = 320, .height = 240, .xres = { .min = 320, .max = 320, .defval = 320, }, .yres = { .min = 240, .max = 240, .defval = 240, }, .bpp = { .min = 16, .max = 16, .defval = 16, }, };

/*注意.width, .height, .xres, .yres并不是默认的值.*/

 

参数的值可结合手册算出,具体如下:

 

VSPW = tvp-1;   /*垂直同步信号的脉宽,单位为1行(Line)的时间*/
VBPD = tvb-1;   /*垂直同步信号的后肩,单位为1行(Line)的时间*/
LINEVAL = tvd-1;   /*垂直显示尺寸-1,即屏行宽-1*/
VFPD = tvf-1;   /*垂直同步信号的前肩,单位为1行(Line)的时间*/
/*1 FRAME = VSPW+1+VBPD+1+LINEVAL+1+VFPD+1*/

 

HSPW = thp-1;   /*水平同步信号的脉宽,单位为1VCLK的时间*/
HBPD = thb-1;   /*水平同步信号的后肩,单位为1VCLK的时间*/
HOZVAL = thd-1;   /*水平显示尺寸-1,即屏列宽-1*/
HFPD = thf-1;   /*水平同步信号的前肩,单位为1VCLK的时间*/
/*1 LINE = HSPW+1+HBPD+1+HOZVAL+1+HFPD+1*/

 

由VCLK = HCLK/[(CLKVAL+1)*2]知:
CLKVAL = (int)(HCLK/(2*VCLK)-1)
本系统:HCLK = 100MHz,由手册知:VCLK = Frequency = 6.4MHz,所以CLKVAL = (int)(100/(2*6.4)-1) = (int)(6.8125) = 6;

 

S3C2410_LCDCON4_MVAL(0)这个参数是STN屏用的,这里因为是TFT屏所以不用设置.

 

2.配置内核(make menuconfig):
Device Drivers --->
   Graphics support --->
      <*> Support for frame buffer devices   /*支持frame buffer*/
      <*> S3C2410 LCD framebuffer support   /*支持s3c24xx*/
          Console display driver support --->
          <*> Framebuffer Console support   /*支持frame buffer控制台*/
          [ ] Select compiled-in fonts   /*选择字库,选中它会出现字库列表供选择,不选中它默认使用VGA 8*8字库*/

      [*] Bootup logo --->   /*启动时显示logo*/
          [*] Standard 224-color Linux logo   /*选择logo图像,会在开发板LCD上左上角显示小企鹅*/

 

3.修改uboot启动参数,使开发板LCD上显示系统启动信息:
setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.22:/home/arm/rootfs ip=192.168.0.11:192.168.0.22:192.168.0.33:255.255.255.0::eth0:off init=/linuxrc console=tty1 console=ttySAC0,115200

 

注意:1.这里两个console的顺序,若将console=tty1写在后面,开发板上会出现PC机上没有出现的信息:linuxrc:can`t log to /dev/tty5
     2.console=tty1改成console=tty0也可以
     3之前,启动信息全部都能够同时显示在两个console上(部分因为一行信息太多,LCD上可能不能全部显示)之后,运行信息只能显示在PC控制台,网上查到可以用输出重定向的方法在两个console间进行显示切换:
在shell里输入:
# sh > /dev/tty1 sh > /dev/tty0  /*切换到LCD屏显示(此时PC控制台上无显示)*/
# sh > /dev/s3c2410_serial0  /*切换到PC控制台*/

 

参考链接:
Linux_lcd驱动分析:
http://www.doc88.com/p-53141196299.html

嵌入式Linux系统中不同LCD驱动的配置:
http://blog.21ic.com/user1/5823/archives/2009/60251.html

2440LCD控制器详细配置:
http://blog.chinaunix.net/u3/100239/showart_2208916.html

修改小企鹅图片的方法:
http://bbs.witech.com.cn/viewthread.php?tid=1244&page=1&extra=#pid7956

你可能感兴趣的:(linux-2.6.22.6中LCD驱动到FL2440-I移植)