Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41896
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-30 10:34
文章分类
文章存档

2014年(42)

我的朋友

分类: LINUX

2014-11-19 19:07:27

    内核中s3c2440的LCD控制器驱动文件是:drivers/video/s3c2410fb.c,三星已经帮我们把LCD控制器和Framebuffer的驱动都做好了,
    我们不需要修改这个驱动,只需要在mach-xc2440.c中创建我们所使用的LCD的平台数据,填充s3c2410fb_mach_info结构体。
    我们使用的是4.3寸的LCD,标准的RGB接口,分辨率480X272,颜色位数使用16位的,带有PWM调光功能(关于PWM调光在第11节)

要包含lcd驱动的头文件:
  1. #include <mach/fb.h>

定义所使用的LCD类型:
  1. #define LCD480272 0
  2. #define LCD800480 1

  3. #define LCD_TYPE LCD480272 //4.3 inch lcd

在xc2440_devices[ ]平台设备结构体数组中加入lcd设备:
&s3c_device_lcd,

在xc2440_machine_init函数中加入设置lcd平台数据函数:
s3c24xx_fb_set_platdata(&xc2440_fb_info);

构建xc2440_fb_info结构体:
  1. static struct s3c2410fb_mach_info xc2440_fb_info __initdata = {
  2.     .displays    = &xc2440_lcd_cfg,
  3.     .num_displays    = 1,
  4.     .default_display = 0,
  5. };

构建LCD配置结构体xc2440_lcd_cfg:
  1. /* LCD driver info */
  2. static struct s3c2410fb_display xc2440_lcd_cfg __initdata = {

  3.     .lcdcon5    = S3C2410_LCDCON5_FRM565 |
  4.     S3C2410_LCDCON5_INVVLINE |
  5.     S3C2410_LCDCON5_INVVFRAME |
  6.     S3C2410_LCDCON5_PWREN |
  7.     S3C2410_LCDCON5_HWSWP,

  8.     .type        = S3C2410_LCDCON1_TFT,
  9.     
  10. #if (LCD_TYPE == LCD480272)
  11.     .width        = 480,
  12.     .height     = 272,

  13.     .pixclock    = (2*1000000000000LL)/80 * \
  14.                  317B(8 + 43 + 2 + 480) * \
  15.                  318B(12 + 4 + 10 + 272),

  16.     .xres        = 480,
  17.     .yres        = 272,
  18.     .bpp        = 16,
  19.     .left_margin    = 8,
  20.     .right_margin    = 43,
  21.     .hsync_len     = 2,
  22.     .upper_margin    = 4,
  23.     .lower_margin    = 12,
  24.     .vsync_len     = 10,

  25. #elif(LCD_TYPE == LCD800480)
  26.     .width        = 800,
  27.     .height     = 480,

  28.     .pixclock    = (2*1000000000000LL)/60 * \
  29.                  (48 + 40 + 40 + 800) * \
  30.                  (3 + 13 + 29 + 480),

  31.     .xres        = 800,
  32.     .yres        = 480,
  33.     .bpp        = 16,
  34.     .left_margin     = 40,
  35.     .right_margin    = 40,
  36.     .hsync_len     = 48,
  37.     .upper_margin    = 13,
  38.     .lower_margin    = 29,
  39.     .vsync_len     = 3,
  40. #endif
  41. };
说明:s3c2410fb_display结构体设置屏的所有参数,包括分辨率,颜色位数,像素时钟,和行场信号一些参数,这些值都传递给S3C2440的LCD控制器,在s3c2410fb.c中设置
其中像素时钟有一个算法,请见上面的代码pixclock,具体的值也要根据LCD的显示效果来调节

配置内核,支持LCD:
  1. Device Drivers:
  2.     Graphics Support --->
  3.         <*>support for frame buffer devices --->
  4.             [*] Enable frameware EDID
  5.             [*] Enable Vidoe Mode Handling Helpers
  6.         <*> S3C24X0 LCD framebuffer support
  7.         Console display driver support --->
  8.             <*> Framebuffer Console Support
  9.         [*] Bootup Logo --->
  10.             <*> Standard 224-color Linux logo

启动时输出:
Console: switching to colour frame buffer device 40x30
fb0: s3c2410fb frame buffer device

屏点亮后会在LCD上看到linux的企鹅LOGO
阅读(190) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~