Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312729
  • 博文数量: 68
  • 博客积分: 1501
  • 博客等级: 上尉
  • 技术积分: 1010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-30 09:52
文章分类

全部博文(68)

文章存档

2010年(1)

2009年(67)

我的朋友

分类:

2009-01-07 12:52:00

(转自tekkaman博客)
一、修改/arch/arm/mach-s3c2410/mach-smdk2410.c文件

1、添加头文件
#include

2、添加
初始化s3c2410的LCD控制器时所需的参数(copy from /arch/arm/mach-s3c2410/mach-qt2410.c,稍作修改)。

static struct s3c2410fb_display qt2410_lcd_cfg __initdata = {

{
  /* Configuration for 640x480 SHARP LQ080V3DG01 */
  .lcdcon5 = S3C2410_LCDCON5_FRM565 |
      S3C2410_LCDCON5_INVVLINE |
      S3C2410_LCDCON5_INVVFRAME |
      S3C2410_LCDCON5_PWREN |
      S3C2410_LCDCON5_HWSWP,
  .type  = S3C2410_LCDCON1_TFT,
  .width  = 320,
  .height  = 240,
  .pixclock = 40000, /* HCLK/4 */
  .xres  = 320,
  .yres  = 240,
  .bpp  = 24,
  .left_margin = 20,
  .right_margin = 38,
  .hsync_len = 30,

  .upper_margin = 15,
  .lower_margin = 12,
  .vsync_len = 3,
 };
// linux-2.6.25 内核的s3c2410fb_mach_info 结构有了变化
static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {
    .type    = S3C2410_LCDCON1_TFT,
    .displays  = &qt2410_lcd_cfg,
 .num_displays  = 1,
 .default_display = 0,
 .lpcsel  = ((0xCE6) & ~7) | 1<<4,

    .gpccon=    0xaa8002a8,
    .gpccon_mask=   0xffc003fc,
    .gpcup=     0xf81e,
    .gpcup_mask=    0xf81e,
    .gpdcon=    0xaa80aaa0,
    .gpdcon_mask=   0xffc0fff0,
    .gpdup=     0xf8fc,
    .gpdup_mask=    0xf8fc,    

   
};
 
=======================
下面是LINUX2.6.22.2 的设置
=======================
static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {
    .type    = S3C2410_LCDCON1_TFT,
    .regs    = {

        .lcdcon1    = S3C2410_LCDCON1_TFT16BPP |
                  S3C2410_LCDCON1_TFT |
                  S3C2410_LCDCON1_CLKVAL(0x01),    /* HCLK/4 */

        .lcdcon2    = S3C2410_LCDCON2_VBPD(18) |    /* 19 */
                  S3C2410_LCDCON2_LINEVAL(479) |
                  S3C2410_LCDCON2_VFPD(10) |    /* 11 */
                  S3C2410_LCDCON2_VSPW(14),    /* 15 */

        .lcdcon3    = S3C2410_LCDCON3_HBPD(43) |    /* 44 */
                  S3C2410_LCDCON3_HOZVAL(639) |    /* 640 */
                  S3C2410_LCDCON3_HFPD(115),    /* 116 */

        .lcdcon4    = S3C2410_LCDCON4_MVAL(0) |
                  S3C2410_LCDCON4_HSPW(95),    /* 96 */

        .lcdcon5    = S3C2410_LCDCON5_FRM565 |
                  S3C2410_LCDCON5_INVVLINE |
                  S3C2410_LCDCON5_INVVFRAME |
                  S3C2410_LCDCON5_PWREN |
                  S3C2410_LCDCON5_HWSWP,
    },

    .lpcsel        = ((0xCE6) & ~7) | 1<<4,

    .gpccon=    0xaa8002a8,
    .gpccon_mask=   0xffc003fc,
    .gpcup=     0xf81e,
    .gpcup_mask=    0xf81e,
    .gpdcon=    0xaa80aaa0,
    .gpdcon_mask=   0xffc0fff0,
    .gpdup=     0xf8fc,
    .gpdup_mask=    0xf8fc,   

    .width        = 640,
    .height        = 480,

    .xres        = {
        .min    = 640,
        .max    = 640,
        .defval    = 640,
    },

    .yres        = {
        .min    = 480,
        .max    = 480,
        .defval = 480,
    },

    .bpp        = {
        .min    = 16,
        .max    = 16,
        .defval = 16,
    },
};


特别说明:
(1)其中的"
.type    = S3C2410_LCDCON1_TFT,"一定要加,否则Linux会认为LCD是STN屏,出现花屏(像下雨一样,蓝色的)。

(2)
其中:
    .gpccon=    0xaa8002a8,
    .gpccon_mask=   0xffc003fc,
    .gpcup=     0xf81e,
    .gpcup_mask=    0xf81e,
    .gpdcon=    0xaa80aaa0,
    .gpdcon_mask=   0xffc0fff0,
    .gpdup=     0xf8fc,
    .gpdup_mask=    0xf8fc,   

是依据博创2410-S实验箱LCD部分原理图和SHARP LQ080V3DG01的英文数据手册确定的,因为这个LCD只用了s3c2410的LCD控制器引脚的一部分,剩下的一些还可以作为普通I/O口来用。

3、打开LCD的初始化。(我以前将它屏蔽了)
static struct platform_device *smdk2410_devices[] __initdata = {
    &s3c_device_usb,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c,
    &s3c_device_iis,
};


4、添加LCD控制器的寄存器参数设置函数(copy from
/arch/arm/mach-s3c2410/mach-qt2410.c)。

static void __init smdk2410_init(void)
{

    s3c24xx_fb_set_platdata(&qt2410_biglcd_cfg);

    platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));

    smdk_machine_init();
}

mach-smdk2410.c文件修改结束。
 
去除10分钟左右自动关闭显示的程序(实验时可以这么做,我猜应该是节能作用,并未深究。)。

copy from《2410 lcd(ltv350)驱动在2.6.14下的移植经历》:

“按seigpao大侠的做法,注释掉drivers\char\vt.c的blank_screen_t(unsigned long dummy)的函数内容,否则,lcd会在10分钟左右关掉显示。“
 
二、配置内核
Device Drivers  ---> 
   
Graphics support  --->
       
Display device support  --->
            <*> Display panel/monitor support
   
    <*> Support for frame buffer devices
        <*> S3C2410 LCD framebuffer support 
        Console display driver support  --->
            <*> Framebuffer Console support
            [*]   Framebuffer Console Rotation
            [*] Select compiled-in fonts
            [*]   VGA 8x8 font
            [*]   VGA 8x16 font
            [*]   Mini 4x6 font
            [*] Sparc console 8x16 font          
        [*] Bootup logo  --->
            --- Bootup logo
            [*]   Standard 224-color Linux logo  

然后就是重新编译内核,tftp到开发板启动,应该就可以看到企鹅Tux了。但你如果想在LCD上显示自己的Logo,那下面我介绍一下自定义Logo的方法:
    (1)进入
linuxkde图形界面,使用The  GIMP 图像编辑器打开你想要的图像文件,依次选择图像->模式->索引颜色,将颜色改为224色;至于图片大小,不要大于你的显示器分辨率就好(我只试过80*80和320*240的大小),最后将文件保存为ppm格式(ASCii码),文件名为:logo_linux_clut224.ppm。
    (2)将logo_linux_clut224.ppm拷贝到/drivers/video/logo文件夹下,替换原有的文件(记得备份啊,以防万一)。
    (3)重新编译内核,tftp到开发板启动。

阅读(1154) | 评论(0) | 转发(0) |
0

上一篇:Framebuffer画点

下一篇:移植UBoot1.2.0

给主人留下些什么吧!~~