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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? video_buffer.c

?? 一個嵌入式camera驅動 驅動 驅動
?? C
字號:
/* *  drivers/char/arca/video_buffer.c *  Driver for control Video buffer and get the Finger data. * *  Copyright (C) 2003 LingFang Micro System.  * *   * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. See * the file "COPYING" in the main directory of this archive * for more details. * */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/list.h>#include <linux/arca-chars.h>#include <asm/uaccess.h>#include <asm/system.h>#include <asm/io.h>#include <asm/delay.h>#include <asm/hardware.h>//SCCB define.#define SCC_PORT_MASK  0x3F#define SCC_DATA_HIGH  0x80 + SCC_PORT_MASK	//PA7 -- data#define SCC_DATA_LOW   0x00 + SCC_PORT_MASK#define SCC_CLK_HIGH   0x40		//PA6 -- clock#define SCC_CLK_LOW    0x00/*#define SCC_PORT_MASK  0xCF#define SCC_DATA_HIGH  0x20 + SCC_PORT_MASK	//PA5 -- data#define SCC_DATA_LOW   0x00 + SCC_PORT_MASK#define SCC_CLK_HIGH   0x10		//PA4 -- clock#define SCC_CLK_LOW    0x00*/#define SCC_PORT       *(unsigned char volatile *)(0xE0000504)//SCCB define end.	//The driver's function define#define FIFO_RESET_DELAY 0x20//Windows defines.#define X_START 176#define Y_START 132#define X_WIDTH 296#define Y_WIDTH 300//Windows define end.static int	video_buffer_open(struct inode *, struct file *);static int	video_buffer_close(struct inode *, struct file *);static ssize_t	video_buffer_read(struct file *, char *, unsigned long , loff_t *);static ssize_t	video_buffer_write(struct file *, const char *, size_t, loff_t *);static int	video_buffer_ioctl(struct inode *, struct file *,			     unsigned int, unsigned long);static void     video_buffer_interrupt(int irq, void *dev_id, struct pt_regs *regs);//This is the address for my video buffer.static unsigned long VIDEO_BUFFER_ADDRESS;//This device's struct.struct video_buffer_dev_struct {	int opened;	char *name;	void *private;} video_buffer_dev;video_buffer_dev_minor = 0x22; //Here are the same number in the /dev/arca/video_buffer nods./*************************************************************************** **  define driver struct.   **  ***************************************************************************/static struct file_operations video_buffer_fops ={	open:	video_buffer_open,	release:video_buffer_close,	read:	video_buffer_read,	write:	video_buffer_write,	ioctl:	video_buffer_ioctl,};//SCCB function define.void sccb_write_ov_sio_data_io(unsigned char devaddress, unsigned char regaddress, unsigned char mydata);void sccb_delay(void){	unsigned long i;	for(i=0x0000;i<0xF000;i++)    {		i++;	}}//////////////////////////////////////////////////////////////////////////////////////////////////////*************************************************************************** **  driver open process. **  ***************************************************************************/void reset_7620(void){	unsigned long i;	unsigned char data;	//__gpiod_write(0xDF);	//__gpiod_as_outputs();		*(unsigned char *)(0xE0000534) = 0xD0;	*(unsigned long *)(0xE0000530) = 0x00000FF0;	*(unsigned char *)(0xE0000534) = 0x10;	for(i=0;i<FIFO_RESET_DELAY;i++)	{i++;}		data = *(unsigned char volatile *)(VIDEO_BUFFER_ADDRESS);	data = *(unsigned char volatile *)(VIDEO_BUFFER_ADDRESS + 1);	for(i=0;i<FIFO_RESET_DELAY;i++)	{i++;}	*(unsigned char *)(0xE0000534) = 0xD0;	}static int video_buffer_open(struct inode *inode, struct file *filp){	unsigned long i;	unsigned char data;	unsigned long reg;	unsigned char hstart,hend,vstart,vend;		if (video_buffer_dev.opened) {		printk(KERN_INFO "video_buffer: the device is busy\n");		return -EBUSY;	}	VIDEO_BUFFER_ADDRESS = ioremap(0x84000000,0x4B000);	*(unsigned char *)(0xE0000534) = 0xD0;	*(unsigned long *)(0xE0000530) = 0x00000FF0;	//*(unsigned long volatile *)(0xE1020008) = 0x02222200;		        *(unsigned long volatile *)(0xE1020008) = 0x04444400;			__gpioa_write(0xFF);	__gpioa_as_outputs();			hstart = 0x2F + (X_START/4);	hend = hstart + (X_WIDTH/4);	vstart = 0x06 + (Y_START/2);	vend = vstart - 1 + (Y_WIDTH/2);			sccb_write_ov_sio_data_io(0x42,0x28,0x20);	sccb_delay();	//sccb_write_ov_sio_data_io(0x42,0x17,0x57);	sccb_write_ov_sio_data_io(0x42,0x17,hstart);	sccb_delay();	//sccb_write_ov_sio_data_io(0x42,0x18,0xA7);	sccb_write_ov_sio_data_io(0x42,0x18,hend);	sccb_delay();	//sccb_write_ov_sio_data_io(0x42,0x19,0x2E);	sccb_write_ov_sio_data_io(0x42,0x19,vstart);	sccb_delay();	//sccb_write_ov_sio_data_io(0x42,0x1A,0xCD);	sccb_write_ov_sio_data_io(0x42,0x1A,vend);        sccb_delay();        /*	for(i=0;i<0x1000000;i++)	{i++;}	__gpiod_write(0x10);	for(i=0;i<0x100000;i++)	{i++;}		data = *(unsigned char volatile *)(VIDEO_BUFFER_ADDRESS);	data = *(unsigned char volatile *)(VIDEO_BUFFER_ADDRESS + 1);	for(i=0;i<0x1000000;i++)	{i++;}	__gpiod_write(0xDF);        */        reset_7620();	MOD_INC_USE_COUNT;	video_buffer_dev.opened = 1;		//printk("The ioremap result for fucking video buffer is %08X.\n",VIDEO_BUFFER_ADDRESS);	return 0;}/*************************************************************************** ** driver close process. **  ***************************************************************************/static int video_buffer_close(struct inode *inode, struct file *filp){	MOD_DEC_USE_COUNT;	video_buffer_dev.opened = 0;	return 0;}/*************************************************************************** **  Read video buffer data. **  ***************************************************************************/static ssize_t video_buffer_read(struct file *filp, char *buf,			   unsigned long count, loff_t *ppos){	unsigned char mydata;	unsigned long i;	reset_7620();	//for(i=0;i<(640*480);i++)	//for(i=0;i<(320*320);i++)	for(i=0;i<(X_WIDTH * Y_WIDTH);i++)	{		buf[i] = *(unsigned char volatile *)(VIDEO_BUFFER_ADDRESS + i);		}	return 0x01;}/*************************************************************************** ** Dummy Write data.  **  ***************************************************************************/static ssize_t video_buffer_write(struct file *filp, const char *buf,			    size_t count, loff_t *ppos){	return 0;}/*************************************************************************** **  ioctl function.  **  ***************************************************************************/static int video_buffer_ioctl(struct inode *inode, struct file *filp,			unsigned int cmd, unsigned long arg){	int val=0;	unsigned long value=0;	unsigned long flags;	switch (cmd) {	case 0:		return 0x00;	case 1:		return 0x01;	}	return -EINVAL;}/*************************************************************************** ** interrupt process routine.  **  ***************************************************************************/static void video_buffer_interrupt(int irq, void *dev_id, struct pt_regs *regs){}/*************************************************************************** **  Init routine **  ***************************************************************************/static int __init video_buffer_init(void){	int result;	int i;	unsigned long value=0;		result = arca_register_chrdev(video_buffer_dev_minor, "video_bffer",				      &video_buffer_fops);	return result;}/*************************************************************************** **  exit routine. **  ***************************************************************************/static void __exit video_buffer_exit(void){	printk(KERN_INFO "video_buffer driver exit.\n");}//This is the SCCB function.//The devaddress is the address of OV7620 sensor, it should be 0x42,and decided by the power on pull up/down set.//The regaddress is the address of OV register,//The data is the data you want to change to .void sccb_write_ov_sio_data_io(unsigned char devaddress, unsigned char regaddress, unsigned char mydata){	unsigned char i,j,k;	unsigned char data;			SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH; //Set data and clock high for start.	//data = *(unsigned char volatile *)(0xE0000504);	//printk("PORTA is %02X.\n",data);	SCC_PORT = SCC_DATA_LOW + SCC_CLK_HIGH; //Set data low for start signal of IIC.	//data = *(unsigned char volatile *)(0xE0000504);	//printk("PORTA is %02X.\n",data);		sccb_delay();	//send device id address.	j = 0x80;	for(i=0;i<0x08;i++)	{		k = j & devaddress;		if(j == k)		{		//Send data high when this bit is "1".				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;								sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;		}		else		{		//Send data low when this bit is "0".				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_HIGH;				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;		}		j = j>>1;	}	//send x bit.	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	//send register address.	j = 0x80;	for(i=0;i<0x08;i++)	{		k = j & regaddress;		if(j == k)		{		//Send data high when this bit is "1".				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;								sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;		}		else		{		//Send data low when this bit is "0".				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_HIGH;				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;		}		j = j>>1;	}	//send x bit.	//*(unsigned char *)(0x60000000) = 0b10000000;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	//send data.	j = 0x80;	for(i=0;i<0x08;i++)	{		k = j & mydata;		if(j == k)		{		//Send data high when this bit is "1".				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;				sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;								sccb_delay();				SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;		}		else		{		//Send data low when this bit is "0".				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;					sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_HIGH;				sccb_delay();				SCC_PORT = SCC_DATA_LOW + SCC_CLK_LOW;		}		j = j>>1;	}	//send x bit.	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_LOW;	sccb_delay();	sccb_delay();	SCC_PORT = SCC_DATA_LOW + SCC_CLK_HIGH;	sccb_delay();	SCC_PORT = SCC_DATA_HIGH + SCC_CLK_HIGH;}MODULE_AUTHOR ("");MODULE_DESCRIPTION ("video_buffer driver");MODULE_LICENSE("GPL");module_init(video_buffer_init);module_exit(video_buffer_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区在线观看| 亚洲人成网站色在线观看| 国产亚洲成aⅴ人片在线观看| 国产精品国模大尺度视频| 午夜av一区二区三区| 国产在线观看一区二区| 欧美三电影在线| 久久精品人人做人人爽人人| 午夜视频久久久久久| av亚洲精华国产精华精| 久久夜色精品一区| 首页国产欧美久久| 91国偷自产一区二区三区观看| 久久午夜老司机| 日本不卡不码高清免费观看| 在线观看日韩毛片| 亚洲色图欧美激情| 国产福利一区二区| 精品久久久久久综合日本欧美| 亚洲伊人伊色伊影伊综合网| 成人蜜臀av电影| 久久精品人人做人人综合| 免费成人av资源网| 在线观看欧美精品| 又紧又大又爽精品一区二区| 风间由美一区二区av101| 欧美xxxxxxxx| 久久精品理论片| 91麻豆精品91久久久久同性| 亚洲三级电影全部在线观看高清| 国产成人午夜视频| 久久一区二区三区四区| 激情五月婷婷综合| 日韩欧美国产一区二区在线播放| 五月天一区二区三区| 欧美色电影在线| 亚洲亚洲精品在线观看| 精品婷婷伊人一区三区三| 亚洲最大的成人av| 在线精品亚洲一区二区不卡| 亚洲精选视频在线| 欧美性色黄大片| 五月婷婷综合网| 欧美一区二区在线不卡| 美女在线视频一区| 久久综合九色综合97婷婷| 国内精品久久久久影院薰衣草| 日韩欧美国产一区二区三区| 九九视频精品免费| 欧美精品一区二区久久久| 国产在线一区观看| 国产亚洲精品aa| 国产精品18久久久| 日韩毛片精品高清免费| 91成人看片片| 丝袜美腿亚洲一区二区图片| 欧美一级二级三级乱码| 激情综合亚洲精品| 中文字幕中文乱码欧美一区二区| av不卡免费电影| 亚洲成人av在线电影| 日韩精品一区国产麻豆| 国产精品正在播放| 亚洲免费观看高清完整版在线观看 | 国产日韩欧美高清在线| 99久久久无码国产精品| 亚洲成av人在线观看| 日韩欧美国产精品| 成人av资源网站| 五月综合激情网| 国产精品美女久久久久av爽李琼| 99热精品一区二区| 天堂va蜜桃一区二区三区| www国产成人| 在线观看亚洲成人| 国产一区日韩二区欧美三区| 中文字幕在线观看一区| 欧美日本国产视频| 成人午夜伦理影院| 亚洲不卡在线观看| 国产午夜精品在线观看| 欧美天堂一区二区三区| 国产精品911| 婷婷开心久久网| 国产精品国产成人国产三级| 91精品国产麻豆| 成人一二三区视频| 麻豆精品新av中文字幕| 亚洲黄色录像片| 亚洲国产经典视频| 日韩一区二区在线免费观看| 日本高清免费不卡视频| 国产成人在线看| 日本午夜精品一区二区三区电影| 国产精品久久久久久久久晋中| 欧美一区二区三区思思人| 色综合中文综合网| 国产三级精品三级| 欧美高清视频一二三区 | 欧美日韩午夜影院| 懂色av一区二区三区免费观看| 亚洲bdsm女犯bdsm网站| 亚洲视频一区二区免费在线观看| 精品少妇一区二区| 欧美日韩在线精品一区二区三区激情| 国产成人小视频| 国产在线视频精品一区| 欧美aaaaa成人免费观看视频| 亚洲日本一区二区| 日本一区二区高清| 久久九九99视频| 精品精品国产高清a毛片牛牛| 欧美午夜一区二区三区免费大片| 色综合一区二区三区| 成人黄色av网站在线| 成人美女视频在线看| 国产aⅴ精品一区二区三区色成熟| 精品一区二区综合| 久久精品国产亚洲一区二区三区| 五月天丁香久久| 日本中文字幕一区二区有限公司| 亚洲超碰精品一区二区| 日韩精品一二三| 日韩av中文在线观看| 亚洲夂夂婷婷色拍ww47| 洋洋成人永久网站入口| 亚洲国产综合色| 午夜婷婷国产麻豆精品| 水蜜桃久久夜色精品一区的特点| 日本一区中文字幕| 日本欧美一区二区| 麻豆成人91精品二区三区| 黄色资源网久久资源365| 国产一区二区主播在线| 成人中文字幕电影| 一本到不卡精品视频在线观看| 色婷婷综合久久久久中文 | 亚洲综合色自拍一区| 亚洲国产精品自拍| 免费的国产精品| 国产成人午夜精品5599| aaa国产一区| 欧美日韩在线观看一区二区 | 久久青草国产手机看片福利盒子| 久久蜜臀精品av| 国产精品高潮呻吟久久| 亚洲精品久久久蜜桃| 日韩福利视频导航| 国产精品一区二区你懂的| 波多野结衣91| 欧美三级资源在线| 久久久精品免费观看| 亚洲欧美韩国综合色| 日本欧美一区二区三区| 成人免费高清在线| 欧美精品日韩一区| 国产欧美精品一区二区色综合朱莉| 亚洲精品中文在线观看| 日韩av中文字幕一区二区| 成人综合婷婷国产精品久久| 欧美日韩在线播放三区| 久久蜜桃av一区二区天堂| 一区二区三区小说| 久久机这里只有精品| 91麻豆.com| 精品国产乱码久久久久久久久 | 国产麻豆91精品| 欧美性色aⅴ视频一区日韩精品| 日韩欧美一区二区在线视频| 国产精品日韩精品欧美在线| 亚洲成人av中文| av在线一区二区| 精品久久久久av影院| 亚洲图片自拍偷拍| av日韩在线网站| 亚洲精品在线免费观看视频| 亚洲国产综合色| 91在线视频网址| 久久这里只精品最新地址| 日韩精品三区四区| 99久精品国产| 国产亚洲一区二区三区四区| 日韩和欧美的一区| 欧美中文字幕亚洲一区二区va在线 | 另类小说色综合网站| 欧美综合天天夜夜久久| 中文字幕一区三区| 国产精品99久久久久久宅男| 欧美一区中文字幕| 亚洲成在人线免费| 欧美在线不卡视频| 中文字幕综合网| 成人动漫精品一区二区| 国产女同性恋一区二区| 蜜芽一区二区三区| 在线电影一区二区三区| 亚洲一卡二卡三卡四卡无卡久久 | 日一区二区三区| 色悠久久久久综合欧美99| 国产精品久久久久影院老司|