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

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

?? davincifb.c

?? 這是我自已改的適合RGB888的視頻驅(qū)動
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* * drivers/video/dm64xxfb.c * * Framebuffer driver for Texas Instruments DM644x display controller. * * Copyright (C) 2005 Texas Instruments, Inc. * Rishi Bhattacharya <support@ti.com> * * Leveraged from the framebuffer driver for OMAP24xx  * written by Andy Lowe (source@mvista.com) * Copyright (C) 2004 MontaVista Software, Inc. * * This file is licensed under the terms of the GNU General Public License * version 2. This program is licensed "as is" without any warranty of any * kind, whether express or implied. */#include <linux/module.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/tty.h>#include <linux/slab.h>//包含內(nèi)存分配函數(shù),原來的malloc.h不存在#include <linux/delay.h>#include <linux/fb.h>#include <linux/init.h>#include <linux/dma-mapping.h>#include <linux/interrupt.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <video/davincifb.h>


/*為了定義 pinmux0和pinmux1而包含以下的文件,調(diào)試時可根據(jù)結(jié)果刪減文件*/
/*
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/major.h>
#include <linux/root_dev.h>

#include <asm/setup.h>
#include <asm/semaphore.h>
#include <asm/hardware/clock.h>
#include <asm/io.h>
#include <asm/mach-types.h>

#include <asm/mach/arch.h>
#include <asm/mach/map.h>

#include <asm/arch/hardware.h>
//#include "clock.h"
#define PINMUX0     __REG(0x01c40000)
#define PINMUX1     __REG(0x01c40004)
///////////////////////////////////////////////////

*/


#define PINMUX0     IO_ADDRESS(0x01c40000)
#define PINMUX1     IO_ADDRESS(0x01c40004)

#define LCDS 7#define PLL IO_ADDRESS(0x01c40c00)#define PLLM (PLL+0x110)      //PLL的默認(rèn)值是12,與文檔中不一樣#define PLLDIV1 (PLL+0x118)   //PLLDIV1的默認(rèn)值是5,與文檔中不一樣#define PLLDIV2 (PLL+0x11c)#define POSTDIV (PLL+0x128)#define PLLCTL (PLL+0x100)#define EDMA IO_ADDRESS(0x01c00000)#define EER (EDMA+0x1020)#define EERH (EDMA+0x1024)#define EECR (EDMA+0x1028)#define EECRH (EDMA+0x102c)#define EESR (EDMA+0x1030)#define EESRH (EDMA+0x1034)#define DDR IO_ADDRESS(0x20000000)#define DDR_SDRSTAT (DDR+0x04)#define DDR_SDBCR      (DDR+0x08)#define  DDR_SDRCR (DDR+0x0c)#define DDR_DDRPHYCR (DDR+0xe4)/* Output Format Selection  */#define COMPOSITE_OUTPUT//#define SVIDEO_OUTPUT//#define COMPONENT_OUTPUT//#define	DEBUG#ifdef 	DEBUG#define	DBGENTER	printk("Entered %s\n", __FUNCTION__)#define	DBGEXIT		printk("Exited %s\n", __FUNCTION__)#define	RETURN(x)						\do {								\	int __ret = (x);					\	printk("Exited %s : ret %d\n", __FUNCTION__, __ret);	\	return __ret; 						\} while(0)#else#define	DBGENTER#define	DBGEXIT#define	RETURN(x)	return (x)#endif//#define MULTIPLE_BUFFERING	1 #ifdef MULTIPLE_BUFFERING#define DOUBLE_BUF	2#define TRIPLE_BUF	3#else#define DOUBLE_BUF	1#define TRIPLE_BUF	1#endif/* * display controller register I/O routines */static __inline__ u32dispc_reg_in(u32 offset)       //把offset地址中的值讀入{	return(inl(offset));}static __inline__ u32dispc_reg_out(u32 offset, u32 val)  //把val寫到offset地址中{	/* outw(val, offset);  */	outl(val, offset);	return(val);}static __inline__ u32dispc_reg_merge(u32 offset, u32 val, u32 mask)//寄存器值的合并,把val中mask指定的位寫入到寄存器中{	u32 addr = offset;	u32 new_val = (inl(addr) & ~mask) | (val & mask); 	outl(new_val, addr);                   	return(new_val);}/* There are 4 framebuffers, each represented by an fb_info and  * a dm_win_info structure  */#define DRIVER		"dm64xxfb"
#define OSD0_FBNAME	"dm_osd0_fb"#define OSD1_FBNAME	"dm_osd1_fb"#define VID0_FBNAME	"dm_vid0_fb"#define VID1_FBNAME	"dm_vid1_fb"/* usage:	if (is_win(info->fix.id, OSD0)) ... */#define is_win(name, x) ((strcmp(name, x ## _FBNAME) == 0) ? 1 : 0)  struct dm_win_info {					//窗口的信息結(jié)構(gòu)	struct fb_info	info;			//此窗口的fb_info信息	/* X and Y position */
	unsigned int x, y; 				//x,y的坐標(biāo)
	
	/* framebuffer area */
	dma_addr_t fb_base_phys;		//ram 的物理地址
	unsigned long fb_base;			//fb的起始地址
	unsigned long fb_size;			//fb的大小

	u32 pseudo_palette[17];

	/* flag to identify if framebuffer area is fixed already or not */
	int alloc_fb_mem;	

	struct dm_info *dm;				//
};static struct dm_info {	struct dm_win_info *osd0;	struct dm_win_info *osd1;	
	struct dm_win_info *vid0;	
	struct dm_win_info *vid1;	/* to map the registers */	dma_addr_t mmio_base_phys;	unsigned long mmio_base;	unsigned long mmio_size;	wait_queue_head_t vsync_wait;	unsigned long vsync_cnt;	int timeout;	/* this is the function that configures the output device (NTSC/PAL/LCD)	 * for the required output format (composite/s-video/component/rgb)	 */ 	void (*output_device_config)(int on);} dm;static struct fb_ops dm64xxfb_ops;#define BASEX		0x25 //80#define BASEY		0x15#define NTSCPAL  LCDS#define DISP_XRES	1280#define DISP_YRES	1024#define DISP_MEMY	1024#ifdef  COMPOSITE_OUTPUT#define OUTPUT COMPOSITE#endif#ifdef  SVIDEO_OUTPUT#define OUTPUT SVIDEO#endif#ifdef  COMPONENT_OUTPUT#define OUTPUT COMPONENT#endif/* Random value chosen for now. Should be within the panel's supported range */#define LCD_PANEL_CLOCK	18518	//這個還沒弄懂!!!/* All window widths have to be rounded up to a multiple of 32 bytes *//* The OSD0 window has to be always within VID0. Plus, since it is in RGB565  * mode, it _cannot_ overlap with VID1.  * For defaults, we are setting the OSD0 window to be displayed in the top  * left quadrant of the screen, and the VID1 in the bottom right quadrant.  * So the default 'xres' and 'yres' are set to  half of the screen width and  * height respectively. Note however that the framebuffer size is allocated  * for the full screen size so the user can change the 'xres' and 'yres' by  * using the FBIOPUT_VSCREENINFO ioctl within the limits of the screen size. */#define round_32(width)	((((width) + 31) / 32) * 32 ) //把width取到32的整數(shù)倍		#define OSD0_XRES	round_32((720)*16/8) * 8/16	/* pixels */   //round_32((DISP_XRES)*16/8)是round后水平方向含有的byte數(shù)#define OSD0_YRES	480 //DISP_YRES  //垂直方向的分辨率,不用是32的整數(shù)倍#define OSD0_FB_PHY	0#define OSD0_FB_SIZE	(round_32((720)*16/8) * DISP_MEMY * DOUBLE_BUF) //FB的大小,水平方向的byte數(shù)×DISP_MEMY×buffer的個數(shù)			/* 16 bpp, Double buffered */static struct fb_var_screeninfo osd0_default_var = {	.xres		= 256;//OSD0_XRES,					//x方向可見分辨率	.yres		= 200;//OSD0_YRES,					//y方向可見分辨率	.xres_virtual	= OSD0_XRES,
	.yres_virtual	= OSD0_YRES * DOUBLE_BUF,    //y方向的虛擬(存儲)分辨率	.xoffset	= 0,   //可見畫面與可顯示畫面的偏移	.yoffset	= 0,	.bits_per_pixel	= 16,			//每個象素有16bit	.grayscale	= 0,				//灰度平衡 0	.red		= {11, 5, 0},     /*RGB 565 模式*/	.green		= { 5, 6, 0},	.blue		= { 0, 5, 0},	.transp		= { 0, 0, 0},	.nonstd		= 0,	.activate	= FB_ACTIVATE_NOW,	.height		= -1,	.width		= -1,	.accel_flags	= 0,	.pixclock	= LCD_PANEL_CLOCK, /* picoseconds */	.left_margin	= 40,		/* pixclocks */	.right_margin	= 4,		/* pixclocks */	.upper_margin	= 8,		/* line clocks */	.lower_margin	= 2,		/* line clocks */	.hsync_len	= 4,		/* pixclocks */
	.vsync_len	= 2,		/* line clocks */	.sync		= 0,	.vmode		= FB_VMODE_INTERLACED,	.reserved[0]	= 0,		/* X position */	.reserved[1] = 0,		/* Y position */	//.reserved[3]	= 0,		/* Zoom */};/* Using the full screen for OSD1 by default */
#define OSD1_XRES	round_32(DISP_XRES*4/8) * 8/4	/* pixels */
#define OSD1_YRES	DISP_YRES
#define OSD1_FB_PHY	0
#define OSD1_FB_SIZE	(round_32(DISP_XRES*4/8) * DISP_MEMY * DOUBLE_BUF)
			
static struct fb_var_screeninfo osd1_default_var = {
	.xres		= DISP_XRES,	.yres		= OSD1_YRES,	.xres_virtual	= OSD1_XRES,	.yres_virtual	= OSD1_YRES * DOUBLE_BUF,	.xoffset	= 0,	.yoffset	= 0,	.bits_per_pixel	= 4,	.activate	= FB_ACTIVATE_NOW,	.accel_flags	= 0,	.pixclock	= LCD_PANEL_CLOCK, /* picoseconds */	.vmode		= FB_VMODE_INTERLACED,	.reserved[0]	= 0,		/* X position */	.reserved[1]	= 0,		/* Y position */	//.reserved[3]	= 0,		/* Zoom */};/* Using the full screen for VID0 by default */#define VID0_XRES	(round_32((DISP_XRES)*16/8) * 8/16)	/* pixels */#define VID0_YRES	DISP_YRES#define VID0_FB_PHY	0#define VID0_FB_SIZE	(round_32((DISP_XRES)*16/8) * DISP_MEMY * TRIPLE_BUF)static struct fb_var_screeninfo vid0_default_var = {	.xres		= VID0_XRES,	.yres		= VID0_YRES,	.xres_virtual	= VID0_XRES,	.yres_virtual	= VID0_YRES * TRIPLE_BUF ,		////////////	.xoffset	= 0,	.yoffset	= 0,	.bits_per_pixel	= 16,	.activate	= FB_ACTIVATE_NOW,	.height		= -1,	.width		= -1,	.left_margin	= 20,		/* pixclocks */	.right_margin	= 4,		/* pixclocks */	.upper_margin	= 8,		/* line clocks */	.lower_margin	= 2,		/* line clocks */	.hsync_len	= 4,		/* pixclocks */
	.vsync_len	= 2,		/* line clocks */	.sync		= 0,	.accel_flags	= 0,	.pixclock	= LCD_PANEL_CLOCK, /* picoseconds */	.vmode		= FB_VMODE_INTERLACED,	.reserved[0]	= 0,		/* X position */	.reserved[1]	= 0,		/* Y position */	//.reserved[3]	= 0,		/* Zoom */};/* Using the bottom right quadrant of the screen screen for VID1 by default,  * but keeping the framebuffer allocated for the full screen, so the user can  * change the 'xres' and 'yres' later using the FBIOPUT_VSCREENINFO ioctl.  */#define VID1_BPP	32   //*****16	/* Video1 can be in YUV or RGB888 format */#define VID1_XRES (round_32((DISP_XRES)*32/8) * 8/32)	/* pixels */#define VID1_YRES DISP_YRES#define VID1_FB_PHY	0#define VID1_FB_SIZE (round_32((DISP_XRES)*32/8) * DISP_MEMY * TRIPLE_BUF)static struct fb_var_screeninfo vid1_default_var = {	.xres		= VID1_XRES,	.yres		= VID1_YRES,	.xres_virtual	= VID1_XRES,	.yres_virtual	= VID1_YRES * TRIPLE_BUF,	.xoffset	= 0,	.yoffset	= 0,		.red={16,8,0},	.green={8,8,0},	.blue={0,8,0},	.transp		= { 0, 0, 0},	.nonstd		= 0,	.grayscale=0,	.height		= -1,	.width		= -1,	.left_margin	= 20,		/* pixclocks */	.right_margin	= 4,		/* pixclocks */	.upper_margin	= 8,		/* line clocks */	.lower_margin	= 2,		/* line clocks */	.hsync_len	= 4,		/* pixclocks */
	.vsync_len	= 2,		/* line clocks */	.sync		= 0,		.bits_per_pixel	= VID1_BPP,	.activate	= FB_ACTIVATE_NOW,	.accel_flags	= 0,	.pixclock	= LCD_PANEL_CLOCK, /* picoseconds */	.vmode		= FB_VMODE_INTERLACED,	//.reserved[0]	= 256 + 16, /* X position */ //相對于OSD0窗口的位置
	//.reserved[1]	= 200 + 16, /* Y position */	//.reserved[3]	= 0,		/* Zoom */};#define	x_pos(w)	((w)->x)#define	y_pos(w)	((w)->y)#define	zoom(w)		((w)->zoom)/*#define	x_pos(v)	((v)->reserved[0])#define	y_pos(v)	((v)->reserved[1])#define	zoom(v)		((v)->reserved[2])*/static struct dmparams_t {        u8 output;        u8 format;        u8 windows;      /* bitmap flag based on VID0, VID1, OSD0, OSD1                          * definitions in header file */        u32 vid0_xres;        u32 vid0_yres;        u32 vid0_xpos;        u32 vid0_ypos;        u32 vid1_xres;        u32 vid1_yres;        u32 vid1_xpos;        u32 vid1_ypos;        u32 osd0_xres;
        u32 osd0_yres;        u32 osd0_xpos;        u32 osd0_ypos;        u32 osd1_xres;        u32 osd1_yres;        u32 osd1_xpos;        u32 osd1_ypos;} dmparams =    {                        NTSCPAL,                        /* output */                        OUTPUT,             /* format */                        (1<<VID0)|(1<<VID1)|(1<<OSD0)&~(1<<OSD1), /*設(shè)置窗口的使能與否*/                                                   /* windows registered */								VID0_XRES, VID0_YRES, 0, 0,                        //712,480,256+16,200+16,         /* vid0 size and position */                        VID1_XRES, VID1_YRES, 0, 0,         /* vid1 size and position */								//720 ,  480  , 0 ,   0 ,								//712 ,480  ,16 ,  0 ,                        256,200, 0,0,         /* osd0 size and position */                        OSD1_XRES,OSD1_YRES, 0, 0,         /* osd1 size and position */                };/* Must do checks against the limits of the output device */static int dm64xx_venc_check_mode(const struct dm_win_info *w, 				  const struct fb_var_screeninfo *var){	DBGENTER;	RETURN(0);}static irqreturn_t dm64xxfb_isr(int irq, void *arg, struct pt_regs *regs){

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲高清| 国产精品99久| 中文在线一区二区| 精品裸体舞一区二区三区| 欧美日高清视频| 色综合久久久久综合99| 懂色av一区二区三区免费观看| 视频一区欧美日韩| 日韩精品中文字幕在线一区| 最近中文字幕一区二区三区| 日韩欧美成人午夜| 欧美群妇大交群中文字幕| 91网站在线播放| 成人黄色网址在线观看| 国产91高潮流白浆在线麻豆 | 久久久精品一品道一区| 欧美一级高清片| 欧美videos大乳护士334| 日韩欧美亚洲一区二区| 欧美一区二区免费观在线| 欧美一级理论性理论a| 欧美高清性hdvideosex| 日韩精品中文字幕在线不卡尤物| 日韩欧美国产系列| 久久在线观看免费| 国产日韩欧美精品电影三级在线| 国产欧美一区二区在线| 欧美精品一区二区三区一线天视频| 久久亚洲精品国产精品紫薇| 国产色91在线| 亚洲国产成人av| 韩国欧美国产1区| 97国产精品videossex| 欧美军同video69gay| 亚洲精品在线三区| 亚洲黄色小视频| 另类的小说在线视频另类成人小视频在线| 国产乱国产乱300精品| 色婷婷激情综合| 久久先锋影音av鲁色资源网| 亚洲欧洲日韩综合一区二区| 婷婷国产在线综合| 99久久婷婷国产精品综合| 在线播放/欧美激情| 中文字幕在线一区| 极品少妇xxxx偷拍精品少妇| 欧洲精品一区二区三区在线观看| 久久久久久久久久久久电影| 亚洲一二三四区不卡| 成人久久视频在线观看| 欧美videos大乳护士334| 亚洲一二三级电影| 色哟哟亚洲精品| 国产日韩欧美高清| 精品在线免费观看| 日韩欧美高清在线| 麻豆极品一区二区三区| 91超碰这里只有精品国产| 亚洲精品国产精品乱码不99 | 777奇米四色成人影色区| 亚洲图片激情小说| 成人动漫av在线| 国产精品美女久久久久av爽李琼| 久久精品国产精品亚洲综合| 日韩三级av在线播放| 日韩电影免费在线看| 欧美电影影音先锋| 日韩高清不卡在线| 日韩一级在线观看| 国产成人精品免费在线| 日韩制服丝袜av| 欧美人体做爰大胆视频| 日韩激情一二三区| 欧美剧情片在线观看| 日韩成人午夜电影| 久久这里只精品最新地址| 国产酒店精品激情| 亚洲视频资源在线| 欧美日韩一区二区电影| 久久成人久久鬼色| 国产亚洲福利社区一区| 色综合久久综合| 亚洲va欧美va人人爽午夜| 日韩精品一区二区三区视频播放| 国产成人欧美日韩在线电影| 中文字幕一区二区不卡| 91精品一区二区三区久久久久久| 精品一区二区三区不卡| 自拍视频在线观看一区二区| 欧美日韩一区二区三区高清| 精久久久久久久久久久| 亚洲久草在线视频| 久久精品人人做| 欧美精品v国产精品v日韩精品 | 亚洲福利视频导航| 欧美中文字幕久久| 国产91色综合久久免费分享| 亚洲综合小说图片| 国产片一区二区三区| 制服丝袜在线91| 色婷婷久久99综合精品jk白丝| 毛片av一区二区| 亚洲国产精品久久久男人的天堂| 久久久午夜电影| 日韩视频国产视频| 欧洲精品在线观看| 色偷偷久久人人79超碰人人澡| 国产在线精品一区二区| 青青草成人在线观看| 亚洲综合一二三区| 亚洲精品久久久蜜桃| 最近日韩中文字幕| 最新国产成人在线观看| 国产精品国产自产拍高清av| 国产亚洲成年网址在线观看| 国产精品乡下勾搭老头1| 亚洲人快播电影网| 综合欧美亚洲日本| 亚洲人成网站在线| 亚洲一区在线观看视频| 一区二区免费看| 亚洲自拍与偷拍| 亚洲妇女屁股眼交7| 五月婷婷综合激情| 日韩av成人高清| 国产一区二区在线电影| 国产成人av电影在线| 成人精品国产一区二区4080| av网站一区二区三区| 日本高清不卡视频| 欧美日韩国产精选| 精品久久久久久亚洲综合网 | 欧美极品少妇xxxxⅹ高跟鞋| 亚洲欧美在线aaa| 午夜视频久久久久久| 国产制服丝袜一区| 色婷婷久久久综合中文字幕| 国产原创一区二区三区| 99re成人在线| 欧美一区二区成人6969| 欧美国产一区视频在线观看| 亚洲色欲色欲www| 美女视频网站久久| eeuss鲁一区二区三区| 欧美一区二区三区爱爱| 最新成人av在线| 国内国产精品久久| 欧美日韩国产美女| 最新高清无码专区| 国产乱码精品1区2区3区| 色综合天天综合网天天狠天天 | 91精品国产综合久久香蕉麻豆| 色丁香久综合在线久综合在线观看| 亚洲精品在线电影| 亚洲成人精品影院| 91免费版在线看| 国产欧美日韩另类一区| 日韩1区2区3区| 欧美主播一区二区三区美女| 国产无一区二区| 国产一区欧美二区| 91精品麻豆日日躁夜夜躁| 日韩理论片网站| 不卡区在线中文字幕| 欧美国产在线观看| 国产乱子轮精品视频| 精品国产一区二区国模嫣然| 免播放器亚洲一区| 91精品一区二区三区久久久久久 | 国产精品三级电影| 成人综合日日夜夜| 国产精品免费看片| 大胆欧美人体老妇| 国产精品麻豆一区二区 | 国产不卡高清在线观看视频| 久久久久综合网| 国产成人精品免费| 一色桃子久久精品亚洲| 97久久超碰国产精品电影| 亚洲女子a中天字幕| 欧美欧美午夜aⅴ在线观看| 日韩精品欧美成人高清一区二区| 欧美精品亚洲一区二区在线播放| 蜜桃视频在线观看一区| 亚洲精品一区二区三区99| 粉嫩一区二区三区性色av| 最新不卡av在线| 日韩视频免费观看高清完整版在线观看 | 免费看日韩精品| 国产片一区二区三区| 欧美主播一区二区三区美女| 美美哒免费高清在线观看视频一区二区 | 成人久久久精品乱码一区二区三区| 亚洲女爱视频在线| 日韩欧美亚洲另类制服综合在线| 成人午夜电影网站| 视频一区视频二区中文| 久久久久久99精品| 日韩一区二区三区电影在线观看| 国产麻豆午夜三级精品|