亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? davincifb.c

?? 這是我自已改的適合RGB888的視頻驅(qū)動(dòng)
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
	if (is_win(id, VID0)) {		dispc_reg_out(OSD_VIDWIN0ADR, addr);		dispc_reg_out(OSD_VIDWIN0OFST, line_length);//		printk("Address Calculated =0x%p\n", OSD_VIDWIN0ADR);//		printk("Value written =0x%p\n", addr);//		printk("****Video Window 0 Address =0x%p\n", dispc_reg_in(OSD_VIDWIN0ADR));//		printk("Video Window 0 Line Offset  =0x%p\n", line_length);	}	else if (is_win(id, VID1)) {		dispc_reg_out(OSD_VIDWIN1ADR, addr);		dispc_reg_out(OSD_VIDWIN1OFST, line_length);		printk("Video Window 1 Address =0x%p\n", addr);		printk("Video Window 1 Line Offset  =0x%p\n", line_length);	}	else if (is_win(id, OSD0)) {		dispc_reg_out(OSD_OSDWIN0ADR, addr);		dispc_reg_out(OSD_OSDWIN0OFST, line_length);//		printk("OSD Window 0 Address =0x%p\n", addr);//		printk("OSD Window 0 Line Offset  =0x%p\n", line_length);	}	else if (is_win(id, OSD1)) {		dispc_reg_out(OSD_OSDWIN1ADR, addr);		dispc_reg_out(OSD_OSDWIN1OFST, line_length);//		printk("OSD Window 1 Address =0x%p\n", addr);//		printk("OSD Window 1 Line Offset  =0x%p\n", line_length);	}	DBGEXIT;}static void set_win_enable(char *id, unsigned int on)		//啟動(dòng)指定的窗口{	on = (on == 0) ? 0 : ~0;		DBGENTER;	if (is_win(id, VID0))	/* Turning off VID0 use due to field inversion issue */		dispc_reg_merge(OSD_VIDWINMD, 0, OSD_VIDWINMD_ACT0);	else if (is_win(id, VID1)) 		dispc_reg_merge(OSD_VIDWINMD, on, OSD_VIDWINMD_ACT1);	else if (is_win(id, OSD0))		dispc_reg_merge(OSD_OSDWIN0MD, on, OSD_OSDWIN0MD_OACT0);	else if (is_win(id, OSD1)) {		/* The OACT1 bit is applicable only if OSD1 is not used as 		 * the attribute window		 */		if (!(dispc_reg_in(OSD_OSDWIN1MD) & OSD_OSDWIN1MD_OASW))			dispc_reg_merge(OSD_OSDWIN1MD, on, OSD_OSDWIN1MD_OACT1);	}			DBGEXIT;}static void set_win_mode(char *id)		//設(shè)定窗口的顯示屬性,根據(jù)的是每象素的位數(shù)值和窗口{	DBGENTER;	if (is_win(id, VID0))		;	else if (is_win(id, VID1)) {		if (dm.vid1->info.var.bits_per_pixel == 32)     ////////////////////////////////////			dispc_reg_merge(OSD_MISCCT, ~0,				OSD_MISCCT_RGBWIN | OSD_MISCCT_RGBEN);	}				else if (is_win(id, OSD0))		/* Set RGB565 mode */		dispc_reg_merge(OSD_OSDWIN0MD, OSD_OSDWIN0MD_RGB0E, 			OSD_OSDWIN0MD_RGB0E);	else if (is_win(id, OSD1)) {		/* Set as attribute window */		dispc_reg_merge(OSD_OSDWIN1MD, OSD_OSDWIN1MD_OASW, 			OSD_OSDWIN1MD_OASW);	}	DBGEXIT;}/** *      dm64xxfb_set_par - Optional function. Alters the hardware state. *      @info: frame buffer structure that represents a single frame buffer * *	Using the fb_var_screeninfo in fb_info we set the resolution of the *	this particular framebuffer. This function alters the par AND the *	fb_fix_screeninfo stored in fb_info. It doesn't not alter var in  *	fb_info since we are using that data. This means we depend on the *	data in var inside fb_info to be supported by the hardware.  *	dm64xxfb_check_var is always called before dmfb_set_par to ensure this. *	Again if you can't can't the resolution you don't need this function. * */static int dm64xxfb_set_par(struct fb_info *info) //利用了fb_info中的var來設(shè)置fix以及窗口的一些屬性,在注冊(cè)fb時(shí)使用{	struct dm_win_info *w = (struct dm_win_info *) info->par;	struct fb_var_screeninfo *v = &info->var;	u32 start = 0, offset = 0;		DBGENTER;//	printk(" set_par for %s \n", info->fix.id);	info->fix.line_length = v->xres_virtual * v->bits_per_pixel / 8;		offset = v->yoffset * info->fix.line_length + 		 v->xoffset * v->bits_per_pixel / 8;	start = (u32) w->fb_base_phys + offset;	set_sdram_params(info->fix.id, start, info->fix.line_length); //設(shè)置fb存儲(chǔ)區(qū)寄存器	set_interlaced(info->fix.id, 0);	set_win_position(info->fix.id, 			 x_pos(w), y_pos(w), v->xres, v->yres );	set_win_mode(info->fix.id);    //如果fix.id="VID1"且bit-per-pixel=32,則此窗口設(shè)為RGB888	set_win_enable(info->fix.id, 1);		RETURN(0);	}/** *	dm64xxfb_ioctl - handler for private ioctls. */static intdm64xxfb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,   //自定義的一些ioctl
	unsigned long arg, struct fb_info *info)
{
	struct dm_win_info *w = (struct dm_win_info *) info->par;
	void __user *argp = (void __user *)arg;
	struct fb_fillrect rect;
	struct Zoom_Params Zoom;
	long   std=0;
	
	DBGENTER;
		
	switch (cmd) {
		case FBIO_WAITFORVSYNC:
			/* This ioctl accepts an integer argument to specify a			 * display.  We only support one display, so we will			 * simply ignore the argument.			 */			RETURN(dm64xxfb_wait_for_vsync(w));			break;		case FBIO_SETATTRIBUTE:						//設(shè)置屬性			if (copy_from_user(&rect, argp, sizeof(rect)))				return -EFAULT;			RETURN(dm64xxfb_set_attr_blend(&rect));			break;		case FBIO_SETPOSX:			if (arg >= 0 && arg <= DISP_XRES) {				w->x = arg;				dm64xxfb_check_var(&w->info.var, &w->info);				dm64xxfb_set_par(&w->info);				return 0;			}			else 				return -EINVAL;				break;		case FBIO_SETPOSY:			if (arg >= 0 && arg <= DISP_YRES) {
				w->y = arg;
				dm64xxfb_check_var(&w->info.var, &w->info);
				dm64xxfb_set_par(&w->info);
				return 0;			}			else 				return -EINVAL;				break;		case FBIO_SETZOOM:			if(copy_from_user(&Zoom, argp, sizeof(Zoom)))				return -EFAULT;			printk("win: %d, hfactor:%d, vfactor: %d\n", Zoom.WindowID,Zoom.Zoom_H, Zoom.Zoom_V );			if((Zoom.Zoom_H == 2) || (Zoom.Zoom_H == 0) || (Zoom.Zoom_H == 1) ||			   (Zoom.Zoom_V == 2) || (Zoom.Zoom_V == 0) || (Zoom.Zoom_V == 1))			{				set_zoom(Zoom.WindowID, Zoom.Zoom_H, Zoom.Zoom_V);				return 0;			}			else{				return -EINVAL;				}			break;		case FBIO_GETSTD:			std = ((dmparams.output << 16 ) |(dmparams.format));//(NTSC <<16) | (COPOSITE);			copy_to_user(argp, &std , sizeof(u_int32_t));			return 0;			break;	}	RETURN(-EINVAL);}/** *  	dm64xxfb_setcolreg - Optional function. Sets a color register. *      @regno: Which register in the CLUT we are programming  *      @red: The red value which can be up to 16 bits wide  *	@green: The green value which can be up to 16 bits wide  *	@blue:  The blue value which can be up to 16 bits wide. *	@transp: If supported the alpha value which can be up to 16 bits wide.	 *      @info: frame buffer info structure *  *  	Set a single color register. The values supplied have a 16 bit *  	magnitude which needs to be scaled in this function for the hardware.  *	Things to take into consideration are how many color registers, if *	any, are supported with the current color visual. With truecolor mode *	no color palettes are supported. Here a psuedo palette is created  *	which we store the value in pseudo_palette in struct fb_info. For *	pseudocolor mode we have a limited color palette. To deal with this *	we can program what color is displayed for a particular pixel value. *	DirectColor is similar in that we can program each color field. If *	we have a static colormap we don't need to implement this function.  *  *	Returns negative errno on error, or zero on success. */static int dm64xxfb_setcolreg(unsigned regno, unsigned red, unsigned green,			      unsigned blue, unsigned transp,			      struct fb_info *info)							//設(shè)定每個(gè)調(diào)色板中寄存器的值{	DBGENTER;	/* only pseudo-palette (16 bpp) allowed */	if (regno >= 16)  /* maximum number of palette entries */		RETURN(1);	if (info->var.grayscale) {		/* grayscale = 0.30*R + 0.59*G + 0.11*B */		red = green = blue = (red * 77 + green * 151 + blue * 28) >> 8;	}	/* Truecolor has hardware-independent 16-entry pseudo-palette */  //真彩色模式	if (info->fix.visual == FB_VISUAL_TRUECOLOR) {		u32 v;		if (regno >= 16)			RETURN(1);		red >>= (16 - info->var.red.length);		green >>= (16 - info->var.green.length);		blue >>= (16 - info->var.blue.length);		v = (red << info->var.red.offset) |		    (green << info->var.green.offset) |		    (blue << info->var.blue.offset);		switch (info->var.bits_per_pixel) {			case 16:		   		((u16*)(info->pseudo_palette))[regno] = v;				break;			default:				RETURN(1);		}		RETURN(0);	}	RETURN(0);}/** *      dm64xxfb_pan_display - NOT a required function. Pans the display. *      @var: frame buffer variable screen structure *      @info: frame buffer structure that represents a single frame buffer * *	Pan (or wrap, depending on the `vmode' field) the display using the *  	`xoffset' and `yoffset' fields of the `var' structure. *  	If the values don't fit, return -EINVAL. * *      Returns negative errno on error, or zero on success. */static int dm64xxfb_pan_display(struct fb_var_screeninfo *var,    //檢查var的合法性,然后根據(jù)var的值設(shè)置ram映射
				struct fb_info *info)
{
	struct dm_win_info *w = (struct dm_win_info *) info->par;
	u32 start = 0, offset = 0;
	
	DBGENTER;
	if (var->xoffset > var->xres_virtual - var->xres)
		RETURN(-EINVAL);
	if (var->yoffset > var->yres_virtual - var->yres)
		RETURN(-EINVAL);
	if((var->xres_virtual * var->bits_per_pixel/8) % 32)	
		RETURN(-EINVAL);
		
	offset = var->yoffset * info->fix.line_length + 
		 var->xoffset * var->bits_per_pixel / 8;
	start = (u32) w->fb_base_phys + offset;
	set_sdram_params(info->fix.id, start, info->fix.line_length);

	RETURN(0);}/** *      dm64xxfb_blank - NOT a required function. Blanks the display. *      @blank_mode: the blank mode we want.  *      @info: frame buffer structure that represents a single frame buffer * *      Blank the screen if blank_mode != 0, else unblank. Return 0 if *      blanking succeeded, != 0 if un-/blanking failed due to e.g. a  *      video mode which doesn't support it. Implements VESA suspend *      and powerdown modes on hardware that supports disabling hsync/vsync: *      blank_mode == 2: suspend vsync *      blank_mode == 3: suspend hsync *      blank_mode == 4: powerdown * *      Returns negative errno on error, or zero on success. * */static int dm64xxfb_blank(int blank_mode, struct fb_info *info){	DBGENTER;	/* ... */	RETURN(0);}		static int parse_win_params(char *wp,			      int *xres, int *yres, int *xpos, int *ypos){	char *s;		if ((s = strsep(&wp, "x")) == NULL)		return -EINVAL;	*xres = simple_strtoul(s, NULL, 0);	if ((s = strsep(&wp, "@")) == NULL)		return -EINVAL;	*yres = simple_strtoul(s, NULL, 0);	if ((s = strsep(&wp, ",")) == NULL)		return -EINVAL;	*xpos = simple_strtoul(s, NULL, 0);	if ((s = strsep(&wp, ":")) == NULL)		return -EINVAL;	*ypos = simple_strtoul(s, NULL, 0);	return 0;}/*  * Pass boot-time options by adding the following string to the boot params: * 	video=dm64xxfb:[option[:option]] * Valid options: * 	output=[lcd|ntsc|pal] * 	format=[composite|s-video|component|rgb] * 	vid0=[off|MxN@X,Y] * 	vid1=[off|MxN@X,Y] * 	osd0=[off|MxN@X,Y] * 	osd1=[off|MxN@X,Y] * 		MxN specify the window resolution (displayed size) * 		X,Y specify the window position * 		M, N, X, Y are integers * 		M, X should be multiples of 16 */#ifndef MODULEint __init dm64xxfb_setup(char *options){	char *this_opt;	u32 xres, yres, xpos, ypos;	int format_yres = 480;	DBGENTER;	printk("dm64xxfb: Options \"%s\"\n", options);	if (!options || !*options)		return 0;	while((this_opt = strsep(&options, ":")) != NULL) {		if (!*this_opt)	continue;		if (!strncmp(this_opt, "output=", 7)) {			if (!strncmp(this_opt + 7, "lcd", 3)) {				dmparams.output = LCD;				dmparams.format = 0;			}			else if (!strncmp(this_opt + 7, "ntsc", 4))				dmparams.output = NTSC;			else if (!strncmp(this_opt + 7, "pal", 3))				dmparams.output = PAL;		}		else if (!strncmp(this_opt, "format=", 7)) {			if (dmparams.output == LCD)				continue;			if (!strncmp(this_opt + 7, "composite", 9))				dmparams.format = COMPOSITE;			else if (!strncmp(this_opt + 7, "s-video", 7))				dmparams.format = SVIDEO;			else if (!strncmp(this_opt + 7, "component", 9))				dmparams.format = COMPONENT;			else if (!strncmp(this_opt + 7, "rgb", 3))				dmparams.format = RGB;		}		else if (!strncmp(this_opt, "vid0=", 5)) {			if (!strncmp(this_opt + 5, "off", 3))				dmparams.windows &= ~(1 << VID0);			else if (!parse_win_params(this_opt + 5, 						&xres, &yres, &xpos, &ypos)) {				dmparams.vid0_xres = xres;	      				dmparams.vid0_yres = yres;				dmparams.vid0_xpos = xpos;				dmparams.vid0_ypos = ypos;			}		}		else if (!strncmp(this_opt, "vid1=", 5)) {			if (!strncmp(this_opt + 5, "off", 3))				dmparams.windows &= ~(1 << VID1);			else if (!parse_win_params(this_opt + 5, 					      &xres, &yres, &xpos, &ypos)) {				dmparams.vid1_xres = xres;	      				dmparams.vid1_yres = yres;				dmparams.vid1_xpos = xpos;				dmparams.vid1_ypos = ypos;			}		}		else if (!strncmp(this_opt, "osd0=", 5)) { 			if (!strncmp(this_opt + 5, "off", 3))				dmparams.windows &= ~(1 << OSD0);			else if (!parse_win_params(this_opt + 5, 					      &xres, &yres, &xpos, &ypos)) {				dmparams.osd0_xres = xres;	      				dmparams.osd0_yres = yres;				dmparams.osd0_xpos = xpos;				dmparams.osd0_ypos = ypos;			}		}		else if (!strncmp(this_opt, "osd1=", 5)) {			if (!strncmp(this_opt + 5, "off", 3))				dmparams.windows &= ~(1 << OSD1);			else if (!parse_win_params(this_opt + 5, 					      &xres, &yres, &xpos, &ypos)) {				dmparams.osd1_xres = xres;	      				dmparams.osd1_yres = yres;				dmparams.osd1_xpos = xpos;				dmparams.osd1_ypos = ypos;			}		}	}	printk(KERN_INFO "DM64XX: " 		"Output on %s%s, Enabled windows: %s %s %s %s\n",		(dmparams.output == LCD) ? "LCD" :		(dmparams.output == NTSC) ? "NTSC" :		(dmparams.output == PAL) ? "PAL" : "unknown device!",

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蝌蚪porny成人天涯| 91.com在线观看| 国产精品美女久久久久久久久久久 | 美女国产一区二区| 欧美精品18+| 日本成人在线一区| 欧美成人性战久久| 极品美女销魂一区二区三区 | 亚洲一区二区高清| 欧美伊人久久久久久久久影院| 一区二区三区毛片| 欧美色综合影院| 亚洲福利视频一区| 欧美老年两性高潮| 免费成人美女在线观看.| 精品人伦一区二区色婷婷| 国产真实乱对白精彩久久| 欧美精品一区二区在线播放| 国产精选一区二区三区| 欧美极品美女视频| 91亚洲精品乱码久久久久久蜜桃| 亚洲日本欧美天堂| 欧美日韩久久久| 日韩和欧美一区二区三区| 日韩一区二区三区观看| 久久99在线观看| 国产亚洲污的网站| 91亚洲资源网| 亚洲高清不卡在线| 日韩欧美中文一区二区| 国产麻豆欧美日韩一区| 国产精品女主播av| 欧美在线视频日韩| 青青草视频一区| 国产蜜臀97一区二区三区| 91在线精品秘密一区二区| 亚洲电影第三页| 夜夜揉揉日日人人青青一国产精品 | 北条麻妃国产九九精品视频| 亚洲婷婷在线视频| 欧美精品aⅴ在线视频| 国产在线不卡一区| 国产精品久久久久aaaa樱花| 欧美三级乱人伦电影| 久久99精品久久只有精品| 国产精品青草综合久久久久99| 色天天综合色天天久久| 蜜桃传媒麻豆第一区在线观看| 欧美韩国日本一区| 欧美日韩视频在线一区二区| 久久爱另类一区二区小说| 国产精品久久影院| 51午夜精品国产| 国产91丝袜在线播放九色| 一区二区三区免费网站| 日韩免费性生活视频播放| 99久久伊人精品| 奇米色一区二区三区四区| 国产精品日日摸夜夜摸av| 欧美三级三级三级| 国产不卡在线一区| 五月婷婷久久综合| 国产精品美女久久福利网站| 欧美日本视频在线| www.亚洲国产| 久久精品国产77777蜜臀| 中文字幕一区在线观看| 欧美一区二区人人喊爽| 波多野结衣欧美| 免费在线一区观看| 一区二区三区中文在线观看| 26uuu国产一区二区三区| 日本韩国欧美国产| 国产一区二区视频在线| 亚洲午夜精品在线| 欧美极品xxx| 日韩欧美一区二区三区在线| 91丝袜国产在线播放| 极品美女销魂一区二区三区 | 亚洲视频一二三| 欧美精品一区二区三区蜜臀| 欧美亚洲一区二区在线观看| 国产99久久久精品| 老司机精品视频在线| 亚洲网友自拍偷拍| 国产精品久久久久影院老司| 精品盗摄一区二区三区| 欧美日韩综合不卡| 91视频免费看| 国产一区二区三区免费观看| 图片区小说区区亚洲影院| 亚洲欧洲日韩av| 久久久亚洲高清| 91精品国产色综合久久ai换脸| 色狠狠色狠狠综合| 99视频在线精品| 国产精品一区三区| 精品制服美女丁香| 天天免费综合色| 亚洲欧美日韩综合aⅴ视频| 欧美高清在线一区| 欧美精品一区男女天堂| 日韩美女一区二区三区四区| 欧美欧美午夜aⅴ在线观看| 91视频xxxx| 99国产精品久久久久久久久久 | 日本精品裸体写真集在线观看| 成人一区二区三区在线观看| 国产在线播放一区三区四| 麻豆精品视频在线观看| 视频在线观看91| 亚洲成人自拍网| 一区二区三区国产精品| 日韩美女视频一区二区| 国产精品久久二区二区| 国产欧美日韩一区二区三区在线观看| 精品国产一二三区| 精品欧美一区二区三区精品久久| 欧美一区中文字幕| 欧美日韩的一区二区| 欧美日韩精品福利| 欧美色窝79yyyycom| 91传媒视频在线播放| 色视频欧美一区二区三区| 99re成人在线| 91日韩在线专区| 色婷婷亚洲综合| 欧美少妇bbb| 欧美嫩在线观看| 欧美一区二区三区日韩| 欧美一卡2卡3卡4卡| 日韩视频不卡中文| 日韩欧美成人一区| 精品免费日韩av| 久久婷婷综合激情| 国产亚洲欧美日韩在线一区| 久久久99精品久久| 欧美国产综合一区二区| 国产精品久久久久久久久晋中| 国产精品久久毛片a| 亚洲日本电影在线| 亚洲一区在线电影| 丝袜诱惑制服诱惑色一区在线观看 | 久久精品国产一区二区三| 久久福利视频一区二区| 国产成人在线视频网址| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 一区二区三区加勒比av| 午夜久久久影院| 久久机这里只有精品| 国产91在线|亚洲| 91免费看`日韩一区二区| 色欧美乱欧美15图片| 欧美日韩国产中文| 日韩亚洲电影在线| 日本一二三不卡| 亚洲综合免费观看高清完整版在线| 日韩精品一二三区| 国产精品一区二区在线播放| 97se亚洲国产综合在线| 欧美日韩国产三级| 精品免费视频一区二区| 国产精品久久久久一区二区三区| 一区二区三区四区精品在线视频| 日韩av电影一区| 成人一区二区在线观看| 欧美视频完全免费看| 精品久久久久一区| 国产精品久久久久桃色tv| 亚洲国产cao| 国产精品综合一区二区| 91国偷自产一区二区开放时间| 欧美一级精品大片| 国产精品免费久久| 午夜精品一区二区三区免费视频 | 日韩精品电影一区亚洲| 国产露脸91国语对白| 色婷婷久久久久swag精品| 日韩精品一区二区三区swag| 中文字幕在线免费不卡| 视频一区二区三区在线| 成人爽a毛片一区二区免费| 欧美最猛性xxxxx直播| 久久久青草青青国产亚洲免观| 一区二区在线观看免费| 九色综合国产一区二区三区| 91麻豆免费在线观看| 日韩精品一区二区三区视频在线观看| 国产精品视频免费| 日韩精品乱码免费| 97精品久久久午夜一区二区三区 | 久久99精品久久久久| 色哟哟在线观看一区二区三区| 日韩美女在线视频 | 午夜精品影院在线观看| heyzo一本久久综合| 91精品国产综合久久久久久久久久 | 欧美精品99久久久**| 国产精品理伦片| 精品一区二区三区在线视频|