Real6410移植linux-2.6.39.1记录(2)-LCD驱动移植

// 主题:Real6410移植linux-2.6.39.1

// 作者:kevinjz2010@gmail.com

// 版权:kevinjz原创

// 平台:linux-2.39.1 real6410 (real6410开发板)

// 发布日期:2011-06-23

// 最后修改:2011-06-23

// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分

//-------------------------------------------------------------------------------------------------

 

参考REAL论坛的移植步骤

1、首先,修改mach-real6410.c文件

添加所需头文件:

#incldeu <linux/fb.h>

#include <video/platform_lcd.h>

#include <mach/regs-fb.h>

#include <plat/fb.h>

#include <mach/regs-gpio.h>

#include <mach/regs-modem.h>

另外需要将28内核中的regs-lcd.h复制到plat/

2、加入设备初始化代码

static struct s3c_fb_pd_win real6410_fb_win[] = {

/* {

.win_mode = { 4.3" 480x272

.left_margin = 3,

.right_margin = 2,

.upper_margin = 1,

.lower_margin = 1,

.hsync_len = 40,

.vsync_len = 1,

.xres = 480,

.yres = 272,

},

.max_bpp = 32,

.default_bpp = 16,

}, */

{

.win_mode = { /* 7.0" 800x480 */

.left_margin = 8,

.right_margin = 13,

.upper_margin = 7,

.lower_margin = 5,

.hsync_len = 3,

.vsync_len = 1,

.xres = 800,

.yres = 480,

},

.max_bpp = 32,

.default_bpp = 16,

},

};//根据所用的显示屏尺寸更改

 

static struct s3c_fb_platdata real6410_lcd_pdata __initdata = {

.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,

.win[0] = &real6410_fb_win[0],

.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,

.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,

};

static struct map_desc real6410_iodesc[] = {

{

/* LCD support */

.virtual = (unsigned long)S3C_VA_LCD,

.pfn = __phys_to_pfn(S3C_PA_FB),

.length = SZ_16K,

.type = MT_DEVICE,

},

};

platform_device中加入

&s3c_device_fb,

real6410_map_io中加入

s3c64xx_init_io(real6410_iodesc, ARRAY_SIZE(real6410_iodesc));

/* set the LCD type */

tmp = __raw_readl(S3C64XX_SPCON);

tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;

tmp |= S3C64XX_SPCON_LCD_SEL_RGB;

__raw_writel(tmp, S3C64XX_SPCON);

 

/* remove the LCD bypass */

tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);

tmp &= ~MIFPCON_LCD_BYPASS;

__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);

real6410_machine_init加入注册代码

s3c_fb_set_platdata(&real6410_lcd_pdata);

3、修改/mach-s3c64xx/map.h,加入

 

#define S3C64XX_VA_HOSTIFA S3C_ADDR(0x00B00000)

#define S3C64XX_PA_HOSTIFA (0x74000000)

#define S3C64XX_SZ_HOSTIFA SZ_1M

 

#define S3C64XX_VA_HOSTIFB S3C_ADDR(0x00C00000)

#define S3C64XX_PA_HOSTIFB (0x74100000)

#define S3C64XX_SZ_HOSTIFB SZ_1M

 

4、修改plat-samsung/dev-fb.c,加入

static struct s3c_platform_fb default_fb_data __initdata = {

.hw_ver = 0x40,

.clk_name = "lcd",

.nr_wins = 5,

.default_win = CONFIG_FB_S3C,

.swap = FB_SWAP_HWORD,

};

并注意s3c_device_fb中的设备名称必须和驱动中的名称相对应,否则驱动不会被加载

 

修改plat/fb.h

#define FB_SWAP_WORD (1 << 24)

#define FB_SWAP_HWORD (1 << 16)

#define FB_SWAP_BYTE (1 << 8)

#define FB_SWAP_BIT (1 << 0)

struct s3c_platform_fb {

int hw_ver;

const char clk_name[16];

int nr_wins;

int nr_buffers[5];

int default_win;

int swap;

 

void (*cfg_gpio)(struct platform_device *dev);

int (*backlight_on)(struct platform_device *dev);

int (*reset_lcd)(struct platform_device *dev);

};

4、在plat/map-base.h加入

#define S3C_VA_LCD S3C_ADDR(0x01100000) /* LCD */

 

5、将28内核中/drivers/video/samsung文件夹拷贝至相对应目录

6、修改video中的Kconfig

加入source “drivers/video/samsung/Kconfig”,并将CONFIG_FB_S3C改成别的名字。

7、修改video中的Makefile,加入

:obj-$(CONFIG_FB_S3C) += SAMSUNG/

8、配置内核

$make menuconfig

device drivers->Graphics support->Support for frame buffer devices中选中

S3C Framebuffer Support

 

S3C Lcd Support Advanced options for S3C Framebuffer

Select BPP(Bits Per Pixel) (16 BPP) --->

Number of Framebuffers4

Enable Virtual Screen Enable Double Buffering

9、编译会有很多错误,大多是头文件的位置问题

10、修改samsung/Makefile,屏蔽obj-$(CONFIG_FB_S3C_VIDEO) += ch7026.o,以及s3cfb_video.c中的ch7026_init();

11s3cfb_fimd4x.c中的错误按照REAL论坛上的修改,并将1222行屏蔽。

12s3cfb.c中的驱动名称和之前设备名称需要对应

13、内核启动参数:

setenv bootargs noinitrd root=/dev/mtdblock0 console=ttySAC0 init=/linuxrc video=fb:AT070TN83 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值