S5PC100芯片的linux-lcd驱动移植(基于2.6.35.13内核)
来源:互联网 发布:eviews3.1怎么导入数据 编辑:程序博客网 时间:2024/06/02 04:52
第一步:添加和添加平台资源:
1,在文件mach-smdkc100.c里面修改lcd平台资源(根据芯片手册)
static struct s3c_fb_pd_win smdkc100_fb_win0 = {
/* this is to ensure we use win0 */
.win_mode = {
.pixclock = 1000000000000ULL / ((8+43+1+480)*(4+10+12+272)*80),
.left_margin = 8,
.right_margin = 43,
.upper_margin = 4,
.lower_margin = 12,
.hsync_len = 1,
.vsync_len = 10,
.xres = 480,
.yres = 272,
},
.max_bpp = 32,
.default_bpp = 16,
};
这样的时序也行(根据芯片手册得到)
.win_mode = {
.pixclock = 1000000000000ULL / ((2+2+41+480)*(2+10+2+272)*80),
.left_margin = 2,
.right_margin = 2,
.upper_margin = 2,
.lower_margin = 2,
.hsync_len = 41,
.vsync_len = 10,
.xres = 362,
.yres = 272,
},
.max_bpp = 32,
.default_bpp = 16,
2,修改drivers/video/Kconfig
修改:
depends on (FB && ARCH_S3C64XX) //移植驱动的时候很多地方都要修改这个图形界面的依赖,不然图形界面相应的选项出不来
为:
depends on (FB && ARCH_S3C64XX) || (FB && ARCH_S5PC100)
3,配置内核的图形界面
配置内核
$ make menuconfig
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices --->
<*> Samsung S3C framebuffer support
Console display driver support --->
<*> Framebuffer Console support
[*] Bootup logo --->
此时编译内核,lcd基本移植完成
二、LCD,多窗口显示
首先添加平台资源,照着win0的样子添加就好了。
然后再平台数据结构体struct s3c_fb_platdata smdkc100_lcd_pdata添加一项win1
.win[0] = &smdkc100_fb_win0,
.win[1] = &smdkc100_fb_win1,
在驱动文件里添加对lcd win1的相关参数设置(内核默认只有一个win0)
-----------------------------------------------------------------------------------------
注册驱动的时候有个探测函数probe,而每个win0有一个关于自己参数设置的探测函数:
s3c_fb_probe_win(sfb, win, &sfb->windows[win]);
这里包括一些固定参数、可变参数的获取,和核对相关参数,分配显存,设置参数
最后注册
--------------------------------------------------------------------------------------------
而对于每个win的参数设置集中在函数int s3c_fb_set_par(struct fb_info *info)中
该函数的分析:
-------------------------------------------
switch (var->bits_per_pixel)
根据像素确定info->fix.visual(屏幕使用的色彩模式);
writel(0, regs + WINCON(win_no));(设置lcd的参数的时候关闭lcd)
---------------------------------------------
info->fix.line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
每行像素所占用的字节数
---------------------------------------------
if (win_no == 0)
use window 0 as the basis for the lcd output timings(基于win0的参数设置lcd的时序)
---------------------------------------------
write the buffer address(将分配的显存写入相关寄存器)
---------------------------------------------
关键点:
write 'OSD' registers to control position of framebuffer
/*窗口位置与大小*/
data = VIDOSDxA_TOPLEFT_X(0) | VIDOSDxA_TOPLEFT_Y(0);
writel(data, regs + VIDOSD_A(win_no));(左上角的起始点)
data = VIDOSDxB_BOTRIGHT_X(s3c_fb_align_word(var->bits_per_pixel,var->xres - 1)) | VIDOSDxB_BOTRIGHT_Y(var->yres - 1);
writel(data, regs + VIDOSD_B(win_no));(右下角结束点)
data = var->xres * var->yres;
writel(data, regs + VIDOSD_C(win_no));(窗口的大小)
比如我的LCD,我将其分为两个窗口显示:
win0(362*272)和win1(116*272)
我修改的部分代码如下:
if(win_no == 0){
/*窗口位置与大小*/
data = VIDOSDxA_TOPLEFT_X(0) | VIDOSDxA_TOPLEFT_Y(0);
writel(data, regs + VIDOSD_A(win_no));
data = VIDOSDxB_BOTRIGHT_X(361) |
VIDOSDxB_BOTRIGHT_Y(271);
writel(data, regs + VIDOSD_B(win_no));
data = 362* 272;
writel(data, regs + VIDOSD_C(win_no));
}
if(win_no == 1){
/*窗口位置与大小*/
data = VIDOSDxA_TOPLEFT_X(364) | VIDOSDxA_TOPLEFT_Y(0);
writel(data, regs + VIDOSD_A(win_no)); //起始地址
data = VIDOSDxB_BOTRIGHT_X(479) |VIDOSDxB_BOTRIGHT_Y(271);
writel(data, regs + VIDOSD_B(win_no));//窗口结束地址
data = 116*272;
writel(data, regs + VIDOSD_D(win_no)); //窗口大小
}
这里要注意的是:
第一:窗口0永远在最上面,而且窗口0没有透明度设置。
第二:窗口1和窗口0的坐标最后不要交叉
第三:若是出现一个时序正常,另一个显示时序不正常,那试着改改显存,改为实际的显存
----------------------------------------------------
下面还有一些相关的color key设置
然后使能lcd开始工作
- S5PC100芯片的linux-lcd驱动移植(基于2.6.35.13内核)
- S5pc100 的linux 触摸屏驱动移植(linux 2.6.35.13内核)
- S3C2410 LCD驱动的移植(基于linux-2.6.15.4内核)
- linux-2.6.26.5内核的 lcd驱动移植 lcd 触摸屏移植 tslib-1.4移植 (转)
- S5pc100 触摸屏驱动分析(linux 2.6.35.13内核)
- PART1 linux-2.6.26.5内核的 lcd驱动移植 lcd 触摸屏移植 tslib-1.4移植 (转)
- linux-2.6.26.5内核的 lcd驱动移植 lcd 触摸屏移植 tslib-1.4移植
- linux-2.6.26.5内核的 lcd驱动移植 lcd 触摸屏移植 tslib-1.4移植
- linux-2.6.32内核LCD驱动移植
- linux-2.6.32内核LCD驱动移植
- linux-2.6.35内核移植—LCD驱动的添加
- linux-2.6.26.5内核的 lcd驱动移植…
- linux-2.6.26.5内核的 lcd驱动移植…
- Linux-2.6.32.67内核裁剪与移植之LCD驱动的移植(2)
- 基于tiny210v2的linux-3.9.6内核驱动移植3:LCD移植
- 基于S3C2410平台的LCD for Linux 2.6 驱动移植
- Linux内核驱动在Tx2440上的移植详解(七、LCD背光驱动移植)
- S5PC100中DM9000AEP网卡芯片驱动移植
- MAC下Myeclipse SVN插件安装
- ORACLE 中SYS_CONNECT_BY_PATH 函数
- Qt移动开发的一些网站和链接
- 短信猫的使用及简单的工作方式
- Linux 内核同步机制
- S5PC100芯片的linux-lcd驱动移植(基于2.6.35.13内核)
- WebKit简介
- mysql下如何执行sql脚本
- ApplicationEvents1ShortCut
- 多选框全选/取消jQuery 简单实现
- 去除噪声总结
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Func<TResult>委托,Action 委托,Tuple 类
- HDU Hat's Fibonacci 结题报告