5.2 LCD初始化
LCD控制器是通过产生显示驱动信号来驱动LCD的。在驱动程序里,用户只需要通过读写一系列的寄存器,就可以完成配置和显示控制。而Linux下驱动程序总是先调用module_init()函数,括号里的参数是所要初始化的文件设备的初始化函数。因此在本系统中,通过调用module_init(s1d13xxxfb_init)初始化函数来实现对一系列寄存器的设置。s1d13xxxfb_init初始化函数部分代码如下:
int __init s1d13xxxfb_init(char *dummy){
S1D_INDEX s1dReg; //定义寄存器数组
S1D_VALUE s1dValue; //设置所对应寄存器的值
plateform_init_video(); //LCD显示电压寄存器的初始化
for (i = 0; i < sizeof(aS1DRegs)/sizeof(aS1DRegs[0]); i++) {
s1dReg = aS1DRegs[i].Index; //把设定的值写入寄存器
s1dValue = aS1DRegs[i].Value;… }
local_s1d13xxxfb_open(); //打开sld13506控制器
strcpy(fb_info.modename, "s1d13xxx"); //复制modename
fb_info.node = -1; //指向底层函数指针赋初值为-1
fb_info.fbops = &s1d13xxxfb_ops; //对结构体fb_info.fbops初始化
fbgen_get_var(&disp.var, -1, &fb_info.gen.info); //获取当前的显示参数
fbgen_do_set_var(&disp.var, 1, &fb_info.gen); //设置显示控制器参数
fbgen_install_cmap(0, &fb_info.gen); //根据LCD硬件参数开辟显存空间
if (register_framebuffer(&fb_info.gen.info) < 0) {//注册显示驱动程序,不成功则报错
return -EINVAL; }
printk("Installed sld31506 frame buffer \n”); };
首先对LCD的背光灯进行点亮,LCD显示是一种被动的显示模式,它不能发光,只能依靠控制透射或反射周围环境的光来达到显示的目的,因此,必须通过写电压寄存器,用高电平对LCD显示器加3.2伏电压来实现背光灯的点亮。其函数的部分代码如下: