LCD驱动在OK2440开发板的移植
2012-05-26 11:17
411 查看
主 机:Fedora 14 (kernel-2.6.33.7)
开发板:FL2440(nandflash:K9F1G08
128MB)
编译器:arm-linux-gcc-4.3.2
二、移植步骤
1. 同样,linux-2.6.33.7内核对LCD的支持已经很完善了,我们所要做的工作只是很小的一部分,对驱动代码做适当的修改以适应FL2440上的LCD。由FL2440光盘所提供的datasheet可以得知,FL2440开发板上使用的是台湾东华影像带触摸屏的LCD液晶屏,型号是WXCAT35-TG3#001。打开LCD的datasheet,翻到AC Characteristics这一章节,这里是我们对驱动程序做出修改的主要依据。
2. 主要修改如下:
#vim arch/arm/mach-s3c2440/mach-smdk2440.c
static struct s3c2410fb_display smdk2440_lcd_cfg[] __initdata=
{
{
.lcdcon5
= S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE
|
S3C2410_LCDCON5_INVVFRAME
|
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type
= S3C2410_LCDCON1_TFT, //lcd类型为TFT
.width
= 320, //lcd宽度为320
.height
= 240, //lcd高度为240
.pixclock
= 270000, //像素时钟
.xres
= 320, //320*240的分辨率
.yres
= 240,
.bpp = 16, //颜色位数
.left_margin
= 8, //对应时序图的HBPD(Back-Porch),表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数。
.right_margin
= 5, //对应时序图的HFPD(Front-Porch),表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数。
.hsync_len
= 63, //对应时序图的HSPW(Pulse Width),表示水平同步信号的宽度,用VCLK计算。
.upper_margin
= 15, //对应时序图的VBPD(Back-Porch),表示一帧图像开始时,垂直同步信号以后的无效的行数。
.lower_margin
= 3, //对应时序图的VFBD(Front-Porch),表示一帧图像结束后,垂直同步信号以后的无效的行数。
.vsync_len
= 5, //对应时序图的VSPW(Pulse Width),表示垂直同步脉冲的宽度,用行计算。
.type
= S3C2410_LCDCON1_TFT,
}
};
static struct s3c2410fb_mach_info smdk2440_fb_info __initdata=
{
.displays
= smdk2440_lcd_cfg, //应用上面定义的配置信息
.num_display
4000
s
= ARRAY_SIZE(smdk2440_lcd_cfg),
.default_display
= 0,
#if 0
/* currently setup by downloader */
.gpccon
= 0xaa940659,
.gpccon_mask
= 0xffffffff,
.gpcup
= 0x0000ffff,
.gpcup_mask
= 0xffffffff,
.gpdcon
= 0xaa84aaa0,
.gpdcon_mask
= 0xffffffff,
.gpdup
= 0x0000faff,
.gpdup_mask
= 0xffffffff,
#endif
.lpcsel
= 0,//((0xCE6) & ~7) | 1<<4, //如果不是三星公司的LCD,这个参数可以不要
};
3. 配置内核选项。选上LCD支持和Logo图标
Device Drivers --->
Graphics support --->
< > Lowlevel video outputswitch controls
<*> Supportfor frame buffer devices
--->
--- Supportfor frame buffer devices
[*] Enable firmware EDID
[
] Framebuffer foreign endianness support --->
[*] Enable Video Mode Handling Helpers
[
] Enable Tile Blitting Support
*** Frame buffer hardware drivers***
<
> Epson S1D13XXX framebuffer support
<*> S3C2410 LCD framebuffer support
[
] S3C2410 lcd debug messages
<
> Silicon Motion SM501 framebuffer support
<
> Virtual Frame Buffer support
(ONLY FOR
<
> E-Ink Metronome/8track controller support
<
> Fujitsu MB862xx GDC support
<
> E-Ink Broadsheet/Epson S1D13521 controller support
[*] Backlight& LCD device support
--->
Display device support --->
Console display driver support --->
[*] Bootup logo--->
--- Bootup logo
[
] Standard black and white Linux logo
[
] Standard 16-color Linux logo
[*] Standard 224-color Linux logo(NEW)
3. 重新编译内核并下载到开发板,这个时候出现了一件很棘手的现象,就是我之前所作出的修改并没有生效,液晶显示的是杂乱无章的雪花。也就是说LCD依然没有被驱动,我仔细检查自己的步骤,重复了好多次都没办法显示,过去了好几天,没有办法,我只能把LCD驱动的移植暂时放下先去做其他驱动的移植。刚好今天移植RTC驱动的时候碰到类似的问题,最后完成RTC驱动移植的时候,我受到了启示----尝试着去修改mach-smdk2410.c。
#vim arch/arm/mach-s3c2410/mach-smdk2440.c
增加几个头文件
#include<mach/fb.h>
#include<mach/regs-lcd.h>
#include<linux/string.h>
增加smdk2410_lcd_cfg[]相关的
static
struct s3c2410fb_display smdk2410_lcd_cfg[] __initdata=
{
{
.lcdcon5
= S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE
|
S3C2410_LCDCON5_INVVFRAME
|
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type
= S3C2410_LCDCON1_TFT, //lcd类型为TFT
.width
= 320, //lcd宽度为320
.height
= 240, //lcd高度为240
.pixclock
= 270000, //像素时钟
.xres
= 320, //320*240的分辨率
.yres
= 240,
.bpp = 16, //颜色位数
.left_margin
= 8, //对应时序图的HBPD(Back-Porch),表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数。
.right_margin
= 5, //对应时序图的HFPD(Front-Porch),表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数。
.hsync_len
= 63, //对应时序图的HSPW(Pulse Width),表示水平同步信号的宽度,用VCLK计算。
.upper_margin
= 15, //对应时序图的VBPD(Back-Porch),表示一帧图像开始时,垂直同步信号以后的无效的行数。
.lower_margin
= 3, //对应时序图的VFBD(Front-Porch),表示一帧图像结束后,垂直同步信号以后的无效的行数。
.vsync_len
= 5, //对应时序图的VSPW(Pulse Width),表示垂直同步脉冲的宽度,用行计算。
.type
= S3C2410_LCDCON1_TFT,
}
};
增加smdk2410_fb_info结构体:
static
struct s3c2410fb_mach_info smdk2410_fb_info __initdata
= {
.displays
= smdk2410_lcd_cfg, //应用上面定义的配置信息
.num_displays
=<
ac34
/span> ARRAY_SIZE(smdk2410_lcd_cfg),
.default_display
= 0,
.lpcsel
= 0,//((0xCE6) & ~7) | 1<<4, //如果不是三星公司的LCD,这个参数可以不要
};
应用smdk2410_fb_info的配置信息
static
void __init smdk2410_init(void)
{
s3c24xx_fb_set_platdata(&smdk2410_fb_info);//应用smdk2410_fb_info的配置信息。
s3c_i2c0_set_platdata(NULL);
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
参考2.6.28内核的arch/arm/mach-s3c2410/mach-smdk2410.c
开发板:FL2440(nandflash:K9F1G08
128MB)
编译器:arm-linux-gcc-4.3.2
二、移植步骤
1. 同样,linux-2.6.33.7内核对LCD的支持已经很完善了,我们所要做的工作只是很小的一部分,对驱动代码做适当的修改以适应FL2440上的LCD。由FL2440光盘所提供的datasheet可以得知,FL2440开发板上使用的是台湾东华影像带触摸屏的LCD液晶屏,型号是WXCAT35-TG3#001。打开LCD的datasheet,翻到AC Characteristics这一章节,这里是我们对驱动程序做出修改的主要依据。
2. 主要修改如下:
#vim arch/arm/mach-s3c2440/mach-smdk2440.c
static struct s3c2410fb_display smdk2440_lcd_cfg[] __initdata=
{
{
.lcdcon5
= S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE
|
S3C2410_LCDCON5_INVVFRAME
|
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type
= S3C2410_LCDCON1_TFT, //lcd类型为TFT
.width
= 320, //lcd宽度为320
.height
= 240, //lcd高度为240
.pixclock
= 270000, //像素时钟
.xres
= 320, //320*240的分辨率
.yres
= 240,
.bpp = 16, //颜色位数
.left_margin
= 8, //对应时序图的HBPD(Back-Porch),表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数。
.right_margin
= 5, //对应时序图的HFPD(Front-Porch),表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数。
.hsync_len
= 63, //对应时序图的HSPW(Pulse Width),表示水平同步信号的宽度,用VCLK计算。
.upper_margin
= 15, //对应时序图的VBPD(Back-Porch),表示一帧图像开始时,垂直同步信号以后的无效的行数。
.lower_margin
= 3, //对应时序图的VFBD(Front-Porch),表示一帧图像结束后,垂直同步信号以后的无效的行数。
.vsync_len
= 5, //对应时序图的VSPW(Pulse Width),表示垂直同步脉冲的宽度,用行计算。
.type
= S3C2410_LCDCON1_TFT,
}
};
static struct s3c2410fb_mach_info smdk2440_fb_info __initdata=
{
.displays
= smdk2440_lcd_cfg, //应用上面定义的配置信息
.num_display
4000
s
= ARRAY_SIZE(smdk2440_lcd_cfg),
.default_display
= 0,
#if 0
/* currently setup by downloader */
.gpccon
= 0xaa940659,
.gpccon_mask
= 0xffffffff,
.gpcup
= 0x0000ffff,
.gpcup_mask
= 0xffffffff,
.gpdcon
= 0xaa84aaa0,
.gpdcon_mask
= 0xffffffff,
.gpdup
= 0x0000faff,
.gpdup_mask
= 0xffffffff,
#endif
.lpcsel
= 0,//((0xCE6) & ~7) | 1<<4, //如果不是三星公司的LCD,这个参数可以不要
};
3. 配置内核选项。选上LCD支持和Logo图标
Device Drivers --->
Graphics support --->
< > Lowlevel video outputswitch controls
<*> Supportfor frame buffer devices
--->
--- Supportfor frame buffer devices
[*] Enable firmware EDID
[
] Framebuffer foreign endianness support --->
[*] Enable Video Mode Handling Helpers
[
] Enable Tile Blitting Support
*** Frame buffer hardware drivers***
<
> Epson S1D13XXX framebuffer support
<*> S3C2410 LCD framebuffer support
[
] S3C2410 lcd debug messages
<
> Silicon Motion SM501 framebuffer support
<
> Virtual Frame Buffer support
(ONLY FOR
<
> E-Ink Metronome/8track controller support
<
> Fujitsu MB862xx GDC support
<
> E-Ink Broadsheet/Epson S1D13521 controller support
[*] Backlight& LCD device support
--->
Display device support --->
Console display driver support --->
[*] Bootup logo--->
--- Bootup logo
[
] Standard black and white Linux logo
[
] Standard 16-color Linux logo
[*] Standard 224-color Linux logo(NEW)
3. 重新编译内核并下载到开发板,这个时候出现了一件很棘手的现象,就是我之前所作出的修改并没有生效,液晶显示的是杂乱无章的雪花。也就是说LCD依然没有被驱动,我仔细检查自己的步骤,重复了好多次都没办法显示,过去了好几天,没有办法,我只能把LCD驱动的移植暂时放下先去做其他驱动的移植。刚好今天移植RTC驱动的时候碰到类似的问题,最后完成RTC驱动移植的时候,我受到了启示----尝试着去修改mach-smdk2410.c。
#vim arch/arm/mach-s3c2410/mach-smdk2440.c
增加几个头文件
#include<mach/fb.h>
#include<mach/regs-lcd.h>
#include<linux/string.h>
增加smdk2410_lcd_cfg[]相关的
static
struct s3c2410fb_display smdk2410_lcd_cfg[] __initdata=
{
{
.lcdcon5
= S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE
|
S3C2410_LCDCON5_INVVFRAME
|
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type
= S3C2410_LCDCON1_TFT, //lcd类型为TFT
.width
= 320, //lcd宽度为320
.height
= 240, //lcd高度为240
.pixclock
= 270000, //像素时钟
.xres
= 320, //320*240的分辨率
.yres
= 240,
.bpp = 16, //颜色位数
.left_margin
= 8, //对应时序图的HBPD(Back-Porch),表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数。
.right_margin
= 5, //对应时序图的HFPD(Front-Porch),表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数。
.hsync_len
= 63, //对应时序图的HSPW(Pulse Width),表示水平同步信号的宽度,用VCLK计算。
.upper_margin
= 15, //对应时序图的VBPD(Back-Porch),表示一帧图像开始时,垂直同步信号以后的无效的行数。
.lower_margin
= 3, //对应时序图的VFBD(Front-Porch),表示一帧图像结束后,垂直同步信号以后的无效的行数。
.vsync_len
= 5, //对应时序图的VSPW(Pulse Width),表示垂直同步脉冲的宽度,用行计算。
.type
= S3C2410_LCDCON1_TFT,
}
};
增加smdk2410_fb_info结构体:
static
struct s3c2410fb_mach_info smdk2410_fb_info __initdata
= {
.displays
= smdk2410_lcd_cfg, //应用上面定义的配置信息
.num_displays
=<
ac34
/span> ARRAY_SIZE(smdk2410_lcd_cfg),
.default_display
= 0,
.lpcsel
= 0,//((0xCE6) & ~7) | 1<<4, //如果不是三星公司的LCD,这个参数可以不要
};
应用smdk2410_fb_info的配置信息
static
void __init smdk2410_init(void)
{
s3c24xx_fb_set_platdata(&smdk2410_fb_info);//应用smdk2410_fb_info的配置信息。
s3c_i2c0_set_platdata(NULL);
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
参考2.6.28内核的arch/arm/mach-s3c2410/mach-smdk2410.c
相关文章推荐
- [ARM-LINUX]移植2.6.31.12内核到立宇泰ARMSYS2440开发板之LCD驱动+触摸屏驱动
- OK6410 LCD驱动移植
- linux-2.6.32在mini2440开发板上移植 ---W35型LCD驱动移植
- s3c2440之LCD驱动移植
- linux-2.6.32在mini2440开发板上移植 ---W35型LCD驱动移植
- Linux3.8.3在OK6410平台的移植LCD驱动
- mini2440开发板LCD背光灯驱动移植
- linux-2.6.32在mini2440开发板上移植(6)之W35型LCD驱动移植
- FS2410 开发板linux-2.6.35内核 LCD 驱动移植
- 移植ok6410 LCD驱动
- 内核linux-3.0移植到fl2440-----添加U盘,MMC和LCD驱动
- linux-2.6.22.6中LCD驱动到FL2440-I移植
- u-boot下wifi驱动在OK6410开发板下的移植-前言
- linux2.6.37.4内核在2440开发板上移植 触摸屏驱动移植
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(4)-LCD驱动
- OK6410-A开发板学习-⑥uboot移植(4)NAND驱动完善
- S3C2440 Linux驱动移植——LCD
- TQ2440平台上LCD驱动的移植
- 2440上的LCD驱动移植
- OK6410开发板Linux-3.3.5驱动移植之DM900网卡驱动移植+NFS文件系统挂载