1.分配一个fb_info结构体: framebuffer_alloc
2.设置
3.注册
4.硬件相关操
struct fb_fix_screeninfo {
char id[16]; /* identification string eg "TT Builtin" */
unsigned long smem_start; /* Start of frame buffer mem */
/* (physical address) */
__u32 smem_len; /* Length of frame buffer mem */
__u32 type; /* see FB_TYPE_* */
__u32 visual; /* see FB_VISUAL_* */
__u32 line_length; /* length of a line in bytes */
};
struct fb_var_screeninfo {
__u32 xres; /* visible resolution */
__u32 yres;
__u32 xres_virtual; /* virtual resolution */
__u32 yres_virtual;
__u32 bits_per_pixel; /* guess what */
struct fb_bitfield red; /* bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue;
__u32 activate; /* see FB_ACTIVATE_* */
};
1 static int lcd_init(void) 2 { 3 /* 1. 分配一个fb_info */ 4 s3c_lcd = framebuffer_alloc(0, NULL); 5 6 /* 2. 设置 */ 7 /* 2.1 设置固定的参数 */ 8 strcpy(s3c_lcd->fix.id, "mylcd"); 9 s3c_lcd->fix.smem_len = 480 * 272 * 16 / 8; 10 s3c_lcd->fix.type = FB_TYPE_PACKED_PIXELS; 11 s3c_lcd->fix.visual = FB_VISUAL_TRUECOLOR; /*TFT*/ 12 s3c_lcd->fix.line_length = 480 * 2; 13 14 /* 2.2 设置可变的参数 */ 15 s3c_lcd->var.xres = 480; 16 s3c_lcd->var.yres = 272; 17 s3c_lcd->var.xres_virtual = 480; 18 s3c_lcd->var.yres_virtual = 272; 19 s3c_lcd->var.bits_per_pixel = 16; 20 21 /* RGB:565 */ 22 s3c_lcd->var.red.offset = 11; 23 s3c_lcd->var.red.length = 5; 24 25 s3c_lcd->var.green.offset = 5; 26 s3c_lcd->var.green.length = 6; 27 28 s3c_lcd->var.blue.offset = 0; 29 s3c_lcd->var.blue.length = 5; 30 31 s3c_lcd->var.activate = FB_ACTIVATE_NOW; 32 33 /* 2.3 设置操作函数 */ 34 s3c_lcd->fbops = &s3c_lcdfb_ops; 35 36 /* 2.4 其他设置 */ 37 //s3c_lcd->pseudo_palette; 38 //s3c_lcd->screen_base; //显存的虚拟地址 39 //s3c_lcd->screen_size = 480 * 272 * 16 / 8; 40 /* 3. 硬件相关的设置 */ 41 /* 3.1 配置GPIO用于LCD */ 42 /* 3.2 根据LCD手册设置LCD控制器,比如VCLK的频率等 */ 43 /* 3.3 分配显存(framebuffer),并把地址告诉LCD控制器 */ 44 45 /* 4. 注册 */ 46 47 register_framebuffer(s3c_lcd); 48 49 return 0; 50 }