LCD驱动移植

*********************************************************************************************************************************************

cpu          : s3c2440(arm9)

开发板    :fl2440开发板

内核版本:linux 3.0

**********************************************************************************************************************************************

   什么是lcd?

    LCD ( Liquid Crystal Display 的简称) 液晶显示器。LCD 的构造是在两片平行的 玻璃基板当中放置液晶盒,下基板玻璃上设置 TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。 按照背光源的不同,LCD可以分为 CCFL LED 两种。
由于我的开发板的lcd尺寸大小是4.3寸,所以查看一下lcd手册将内核中lcd重要的参数进行修改,参数表如图所示:
LCD驱动移植_第1张图片
TFT工作时序图:
LCD驱动移植_第2张图片
***********************************************************************************************************************************************************************
说明:
VBP(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin; 
VFB(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin;

VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len;

HBP(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin;

HFP(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin;

 HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len;

*********************************************************************************************************************


1.修改内核代码
[zoulei@CentOS linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
218 /* LCD driver info */
219 
220 static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
221 
222         .lcdcon5        = S3C2410_LCDCON5_FRM565 |
223                           S3C2410_LCDCON5_INVVLINE |
224                           S3C2410_LCDCON5_INVVFRAME |
225                           S3C2410_LCDCON5_PWREN |
226                           S3C2410_LCDCON5_HWSWP,
227 
228         .type           = S3C2410_LCDCON1_TFT,
229 
230         .width          = 480,/*modify by zoulei 2017.4.18*/
231         .height         = 272,/*modify by zoulei*/
232 
233         .pixclock       = 600000, /* HCLK 60 MHz, divisor 10 像素时钟*/
234         .xres           = 480,/*modify by zoulei  水平可见的有效像素*/
235         .yres           = 272,/*modify by zoulei 垂直可见的有效像素*/
236         .bpp            = 16,/*modify by zoulei色位模式*/
237         .left_margin    = 19,/*modify by zoulei行切换,从同步到绘图之间的延迟*/
238         .right_margin   = 10,/*modify by zoulei行切换,从绘图到同步之间的延迟*/
239         .hsync_len      = 30,/*modify by zoulei水平同步的长度*/
240         .upper_margin   = 4,/*modify by zoulei帧切换,从同步到绘图之间的延迟*/
241         .lower_margin   = 2,/*modify by zoulei帧切换,从绘图到同步之间的延迟*/
242         .vsync_len      = 8,/*modify by zoulei垂直同步的长度*/
243 };
......
262         .lpcsel         = 0,//((0xCE6) & ~7) | 1<<4,/*modify by zoulei这个是三星TFT屏参数*/
263 };
**************************************************************************************************************************************************************************
说明:像素时钟pixclock计算:

    DOTCLK = fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)  (单位:MHz)

    pixclock = 1012/ DOTCLK=1012/ (fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)) (单位:皮秒)

************************************************************************************************************************************

2.配置make menuconfig
[zoulei@CentOS linux-3.0]$ make menuconfig

Device Drivers  ---> Graphics (图像)support  --->

             <*> Support for frame buffer devices  --->

                           [*]   Enable firmware EDID

                           [*]   Enable Video Mode Handling Helpers

                           <*>   S3C2410 LCD framebuffer support

             [*] Backlight & LCD device support  --->

                             Lowlevel LCD controls

                             Lowlevel Backlight controls

                               Generic (aka Sharp Corgi) Backlight Driver

                                        Console display driver support  --->

                                                     <*> Framebuffer Console support
                                                     [*]   Map the console to the primary display device

                                                     [*]   Framebuffer Console Rotation

                                                     [*] Select compiled-in fonts

                                                     [*]   VGA 8x8 font

                                                     [*]   Mini 4x6 font

                                    [*] Bootup logo  ---> 

                                                    [*]   Standard 224-color Linux logo

配置好后make编译,将内核烧入开发板.....

如果要想在开发板的屏幕上看到启动的代码,则因修改如下环境变量,我的是jffs2文件系统,

set bootargs'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

set bootargs_jffs2'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

***************************************************************************************************************************

说明:我的开发板内核是加载的jffs2文件系统,所以想在开发板屏幕上显示启动信息,在uboot 环境变量里面添加那两段代码

不过主要是添加tty1文本型控制台,也就是对应的putty或者secure crt虚拟控制终端,因此加上控制台参数console=tty1.

********************************************************************************************************************


如果在开发板上看到小企鹅,以及显示信息,ok这样lcd驱动就顺利移植好了......








你可能感兴趣的:(linux驱动学习)