2009-08-23 14:54 s3c2410 lcd 移植到 linux-2.6.30 <640x480 SHARP LQ080V3DG01>
s3c2410 lcd 移植到 linux-2.6.30 <640x480 SHARP LQ080V3DG01>
内核源码中相关文件
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach-smdk2410.c //添加并配置lcd设备
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach-qt2410.c //参考其中lcd设备及LQ080V3DG01相关添加方法以及参数
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach/include/fb.h //相关结构体声明
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach/include/regs-lcd.h //lcd控制器相关参数声明
$LINUX_SOURCE_ROOT/drivers/video/s3c2410fb.c // lcd驱动代码
$LINUX_SOURCE_ROOT/drivers/video/s3c2410fb.h //相关结构体
内核配置选项
Device Drivers --->
Character devices --->
[*] Virtual terminal
Graphics support --->
<*> Support for frame buffer devices --->
<*> S3C2410 LCD framebuffer support
Console display driver support --->
<*> Framebuffer Console support
[*] Bootup logo --->
[*] Standard 224-color Linux logo
修改内容
在mach-smdk2410.c添加如下代码段:
/* LCD driver info */
static struct s3c2410fb_display smdk2410_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 = 640,
.height = 480,
.pixclock = 166667, /* HCLK/4 */
.xres = 640,
.yres = 480,
.bpp = 16,
.left_margin = 48,
.right_margin = 18,
.hsync_len = 4,
.upper_margin = 33,
.lower_margin = 10,
.vsync_len = 4,
};
static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = {
.displays = &smdk2410_lcd_cfg,
.num_displays = 1,
.default_display = 0,
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
此函数中添加红色代码:
static void __init smdk2410_init(void)
{
s3c24xx_fb_set_platdata(&smdk2410_fb_info);
s3c_i2c0_set_platdata(NULL);
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
启动内核时正确的输出信息
……
Console: switching to colour frame buffer device 80x30
fb0: s3c2410fb frame buffer device
……
修改启动内核logo
使用GIMP带开图像,图像->模式中选择索引,最大颜色数量设为224,保存为ppm格式,ascii数据格式,然后替换掉$LINUX_SOURCE_ROOT/drivers/logo/logo_linux_clut224.ppm。
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach-smdk2410.c //添加并配置lcd设备
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach-qt2410.c //参考其中lcd设备及LQ080V3DG01相关添加方法以及参数
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach/include/fb.h //相关结构体声明
$LINUX_SOURCE_ROOT/arch/arm/mach-s3c2410/mach/include/regs-lcd.h //lcd控制器相关参数声明
$LINUX_SOURCE_ROOT/drivers/video/s3c2410fb.c // lcd驱动代码
$LINUX_SOURCE_ROOT/drivers/video/s3c2410fb.h //相关结构体
内核配置选项
Device Drivers --->
Character devices --->
[*] Virtual terminal
Graphics support --->
<*> Support for frame buffer devices --->
<*> S3C2410 LCD framebuffer support
Console display driver support --->
<*> Framebuffer Console support
[*] Bootup logo --->
[*] Standard 224-color Linux logo
修改内容
在mach-smdk2410.c添加如下代码段:
/* LCD driver info */
static struct s3c2410fb_display smdk2410_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 = 640,
.height = 480,
.pixclock = 166667, /* HCLK/4 */
.xres = 640,
.yres = 480,
.bpp = 16,
.left_margin = 48,
.right_margin = 18,
.hsync_len = 4,
.upper_margin = 33,
.lower_margin = 10,
.vsync_len = 4,
};
static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = {
.displays = &smdk2410_lcd_cfg,
.num_displays = 1,
.default_display = 0,
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
此函数中添加红色代码:
static void __init smdk2410_init(void)
{
s3c24xx_fb_set_platdata(&smdk2410_fb_info);
s3c_i2c0_set_platdata(NULL);
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
启动内核时正确的输出信息
……
Console: switching to colour frame buffer device 80x30
fb0: s3c2410fb frame buffer device
……
修改启动内核logo
使用GIMP带开图像,图像->模式中选择索引,最大颜色数量设为224,保存为ppm格式,ascii数据格式,然后替换掉$LINUX_SOURCE_ROOT/drivers/logo/logo_linux_clut224.ppm。

浙公网安备 33010602011771号