一、修改/arch/arm/mach-s3c2410/mach-smdk2410.c文件<br /><br />1、添加头文件<br />#include <br /><br />2、添加初始化s3c2410的LCD控制器时所需的参数(copy from /arch/arm/mach-s3c2410/mach-qt2410.c,稍作修改)。<br />//tekkaman LCD<br />/* LCD driver info */<br /><br />/* Configuration for 640x480 SHARP LQ080V3DG01 */<br />static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {<br /> .type = S3C2410_LCDCON1_TFT,<br /> .regs = {<br /><br /> .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |<br /> S3C2410_LCDCON1_TFT |<br /> S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */<br /><br /> .lcdcon2 = S3C2410_LCDCON2_VBPD(18) | /* 19 */<br /> S3C2410_LCDCON2_LINEVAL(479) |<br /> S3C2410_LCDCON2_VFPD(10) | /* 11 */<br /> S3C2410_LCDCON2_VSPW(14), /* 15 */<br /><br /> .lcdcon3 = S3C2410_LCDCON3_HBPD(43) | /* 44 */<br /> S3C2410_LCDCON3_HOZVAL(639) | /* 640 */<br /> S3C2410_LCDCON3_HFPD(115), /* 116 */<br /><br /> .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |<br /> S3C2410_LCDCON4_HSPW(95), /* 96 */<br /><br /> .lcdcon5 = S3C2410_LCDCON5_FRM565 |<br /> S3C2410_LCDCON5_INVVLINE |<br /> S3C2410_LCDCON5_INVVFRAME |<br /> S3C2410_LCDCON5_PWREN |<br /> S3C2410_LCDCON5_HWSWP,<br /> },<br /><br /> .lpcsel = ((0xCE6) & ~7) | 1<<4,<br /><br /> .gpccon= 0xaa8002a8,<br /> .gpccon_mask= 0xffc003fc,<br /> .gpcup= 0xf81e,<br /> .gpcup_mask= 0xf81e,<br /> .gpdcon= 0xaa80aaa0,<br /> .gpdcon_mask= 0xffc0fff0,<br /> .gpdup= 0xf8fc,<br /> .gpdup_mask= 0xf8fc, <br /><br /> .width = 640,<br /> .height = 480,<br /><br /> .xres = {<br /> .min = 640,<br /> .max = 640,<br /> .defval = 640,<br /> },<br /><br /> .yres = {<br /> .min = 480,<br /> .max = 480,<br /> .defval = 480,<br /> },<br /><br /> .bpp = {<br /> .min = 16,<br /> .max = 16,<br /> .defval = 16,<br /> },<br />};<br /><br />//tekkaman LCD<br /><br />特别说明:<br />(1)其中的'.type = S3C2410_LCDCON1_TFT,'一定要加,否则Linux会认为LCD是STN屏,出现花屏(像下雨一样,蓝色的)。<br /><br />(2)其中:<br /> .gpccon= 0xaa8002a8,<br /> .gpccon_mask= 0xffc003fc,<br /> .gpcup= 0xf81e,<br /> .gpcup_mask= 0xf81e,<br /> .gpdcon= 0xaa80aaa0,<br /> .gpdcon_mask= 0xffc0fff0,<br /> .gpdup= 0xf8fc,<br /> .gpdup_mask= 0xf8fc, <br />是依据博创2410-S实验箱LCD部分原理图和SHARP LQ080V3DG01的英文数据手册确定的,因为这个LCD只用了s3c2410的LCD控制器引脚的一部分,剩下的一些还可以作为普通I/O口来用。<br /><br /> *_mask 参数的作用<br /> 在移植时,我不是很明白*_mask参数的作用,在追踪源码后才知道。看了下面/drivers/video/s3c2410fb.c的源码你就会理解了:<br /><br />......<br />static int s3c2410fb_init_registers(struct s3c2410fb_info *fbi)<br />{<br /> ......<br /> modify_gpio(S3C2410_GPCUP, mach_info->gpcup, mach_info->gpcup_mask);<br /> modify_gpio(S3C2410_GPCCON, mach_info->gpccon, mach_info->gpccon_mask);<br /> modify_gpio(S3C2410_GPDUP, mach_info->gpdup, mach_info->gpdup_mask);<br /> modify_gpio(S3C2410_GPDCON, mach_info->gpdcon, mach_info->gpdcon_mask);<br /><br /> ......<br />}<br /><br />......<br /><br />static inline void modify_gpio(void __iomem *reg,<br /> unsigned long set, unsigned long mask)<br />{<br /> unsigned long tmp;<br /><br /> tmp = readl(reg) & ~mask;<br /> writel(tmp | set, reg);<br />}<br /><br />其实*_mask参数作用是将要修改的寄存器参数先清零,这样可以保证后面的设置操作正确。因为设置操作是置位操作,无法清零。也就是说:如果没有 tmp = readl(reg) & ~mask;这一句,就无法将11设置成10。<br /><br />3、打开LCD的初始化。(我以前将它屏蔽了)<br />static struct platform_device *smdk2410_devices[] __initdata = {<br /> &s3c_device_usb,<br /> &s3c_device_lcd,<br /> &s3c_device_wdt,<br /> &s3c_device_i2c,<br /> &s3c_device_iis,<br />};<br /><br />4、添加LCD控制器的寄存器参数设置函数(copy from /arch/arm/mach-s3c2410/mach-qt2410.c)。<br /><br />static void __init smdk2410_init(void)<br />{<br /><br /> s3c24xx_fb_set_platdata(&qt2410_biglcd_cfg);<br /><br /> platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));<br /><br /> smdk_machine_init();<br />}<br /><br />mach-smdk2410.c文件修改结束。<br /><br />--------------------------------------------------------------------------------<br /><br />去除10分钟左右自动关闭显示的程序(实验时可以这么做,我猜应该是节能作用,并未深究。)。<br /><br />copy from《2410 lcd(ltv350)驱动在2.6.14下的移植经历》:<br /><br />“按seigpao大侠的做法,注释掉driverscharvt.c的blank_screen_t(unsigned long dummy)的函数内容,否则,lcd会在10分钟左右关掉显示。“ <br />--------------------------------------------------------------------------------<br />二、配置内核<br />Device Drivers ---> <br /> Graphics support ---><br /> Display device support ---> <br /> <*> Display panel/monitor support <br /> <*> Support for frame buffer devices <br /> <*> S3C2410 LCD framebuffer support <br /> Console display driver support ---><br /> <*> Framebuffer Console support<br /> <br /><br /> Framebuffer Console Rotation<br /> <br />Select compiled-in fonts<br /> <br /> VGA 8x8 font <br /> <br /> VGA 8x16 font<br /> <br /> Mini 4x6 font <br /> <br />Sparc console 8x16 font <br /> <br />Bootup ** ---><br /> --- Bootup **<br /> <br /> Standard 224-color Linux ** <br />--------------------------------------------------------------------------------<br />然后就是重新编译内核,tftp到开发板启动,应该就可以看到企鹅Tux了。但你如果想在LCD上显示自己的**,那下面我介绍一下自定义**的方法: <br /> (1)进入linux的kde图形界面,使用The GIMP 图像编辑器打开你想要的图像文件,依次选择图像->模式->索引颜色,将颜色改为224色;至于图片大小,不要大于你的显示器分辨率就好(我只试过80*80和320*240的大小),最后将文件保存为ppm格式(ASCii码),文件名为:**_linux_clut224.ppm。<br /> (2)将**_linux_clut224.ppm拷贝到/drivers/video/**文件夹下,替换原有的文件(记得备份啊,以防万一)。<br /> (3)重新编译内核,tftp到开发板启动。<br /> |
|