Linux設備驅動之Framebuffer

Linux設備驅動之Framebuffer

寫LCD驅動步驟:
1. 分配一個fb_info結構體: framebuffer_alloc
2. 設置
3. 註冊: register_framebuffer
4. 硬件相關的操作


一、

static struct fb_info *s3c_lcd;

static int lcd_init(void)
{
	/* 1. 分配一個fb_info */
	s3c_lcd = framebuffer_alloc(0, NULL);

	/* 2. 設置 */
	/* 2.1 設置固定的參數 */
	/* 2.2 設置可變的參數 */
	/* 2.3 設置操作函數 */
	/* 2.4 其他的設置 */

	/* 3. 硬件相關的操作 */
	/* 3.1 配置GPIO用於LCD */
	/* 3.2 根據LCD手冊設置LCD控制器, 比如VCLK的頻率等 */
	/* 3.3 分配顯存(framebuffer), 並把地址告訴LCD控制器 */

	/* 4. 註冊 */
	register_framebuffer(s3c_lcd);
	
	return 0;
}

static void lcd_exit(void)
{
}


二、

static struct fb_ops s3c_lcdfb_ops = {
	.owner		= THIS_MODULE,
//	.fb_setcolreg	= atmel_lcdfb_setcolreg,
	.fb_fillrect	= cfb_fillrect,
	.fb_copyarea	= cfb_copyarea,
	.fb_imageblit	= cfb_imageblit,
};


static struct fb_info *s3c_lcd;

static int lcd_init(void)
{
	/* 1. 分配一個fb_info */
	s3c_lcd = framebuffer_alloc(0, NULL);

	/* 2. 設置 */
	/* 2.1 設置固定的參數 */
	strcpy(s3c_lcd->fix.id, "mylcd");
	s3c_lcd->fix.smem_len = 240*320*16/8;
	s3c_lcd->fix.type     = FB_TYPE_PACKED_PIXELS;
	s3c_lcd->fix.visual   = FB_VISUAL_TRUECOLOR; /* TFT */
	s3c_lcd->fix.line_length = 240*2;
	
	/* 2.2 設置可變的參數 */
	s3c_lcd->var.xres           = 240;
	s3c_lcd->var.yres           = 320;
	s3c_lcd->var.xres_virtual   = 240;
	s3c_lcd->var.yres_virtual   = 320;
	s3c_lcd->var.bits_per_pixel = 16;

	/* RGB:565 */
	s3c_lcd->var.red.offset     = 11;
	s3c_lcd->var.red.length     = 5;
	
	s3c_lcd->var.green.offset   = 5;
	s3c_lcd->var.green.length   = 6;

	s3c_lcd->var.blue.offset    = 0;
	s3c_lcd->var.blue.length    = 5;

	s3c_lcd->var.activate       = FB_ACTIVATE_NOW;
	
	
	/* 2.3 設置操作函數 */
	s3c_lcd->fbops              = &s3c_lcdfb_ops;
	
	/* 2.4 其他的設置 */
	//s3c_lcd->pseudo_palette =; //
	//s3c_lcd->screen_base  = ;  /* 顯存的虛擬地址 */ 
	s3c_lcd->screen_size   = 240*324*16/8;

	/* 3. 硬件相關的操作 */
	/* 3.1 配置GPIO用於LCD */
	/* 3.2 根據LCD手冊設置LCD控制器, 比如VCLK的頻率等 */
	/* 3.3 分配顯存(framebuffer), 並把地址告訴LCD控制器 */
	//s3c_lcd->fix.smem_start = xxx;  /* 顯存的物理地址 */

	/* 4. 註冊 */
	register_framebuffer(s3c_lcd);
	
	return 0;
}

static void lcd_exit(void)
{
}

三、硬件相關操作設置




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章