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

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

?? mt9v111.c

?? LINUX下的ov2640驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. *//* * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html *//*! * @file mt9v111.c * * @brief mt9v111 camera driver functions * * @ingroup Camera */#include <linux/module.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/ctype.h>#include <linux/types.h>#include <linux/delay.h>#include <linux/device.h>#include <linux/i2c.h>#include <linux/clk.h>#include <asm/arch/mxc_i2c.h>#include "mxc_v4l2_capture.h"#include "mt9v111.h"#ifdef MT9V111_DEBUGstatic u16 testpattern = 0;#endifstatic sensor_interface *interface_param = NULL;static mt9v111_conf mt9v111_device;static int reset_frame_rate = 30;#define MT9V111_FRAME_RATE_NUM    20static mt9v111_image_format format[2] = {	{	 .index = 0,	 .width = 640,	 .height = 480,	 },	{	 .index = 1,	 .width = 352,	 .height = 288,	 },};static int mt9v111_attach(struct i2c_adapter *adapter);static int mt9v111_detach(struct i2c_client *client);static struct i2c_driver mt9v111_i2c_driver = {	.driver = {		   .owner = THIS_MODULE,		   .name = "MT9V111 Client",		   },	.attach_adapter = mt9v111_attach,	.detach_client = mt9v111_detach,};static struct i2c_client mt9v111_i2c_client = {	.name = "mt9v111 I2C dev",	.addr = MT9V111_I2C_ADDRESS,	.driver = &mt9v111_i2c_driver,};/* * Function definitions */static u16 mt9v111_endian_swap16(u16 data){	u16 temp;	temp = data;	temp = ((data >> 8) & 0xff) | ((data << 8) & 0xff00);	return temp;}static int mt9v111_i2c_client_xfer(unsigned int addr, char *reg, int reg_len,				   char *buf, int num, int tran_flag){	struct i2c_msg msg[2];	int ret;	msg[0].addr = addr;	msg[0].len = reg_len;	msg[0].buf = reg;	msg[0].flags = tran_flag;	msg[0].flags &= ~I2C_M_RD;	msg[1].addr = addr;	msg[1].len = num;	msg[1].buf = buf;	msg[1].flags = tran_flag;	if (tran_flag & MXC_I2C_FLAG_READ) {		msg[1].flags |= I2C_M_RD;	} else {		msg[1].flags &= ~I2C_M_RD;	}	ret = i2c_transfer(mt9v111_i2c_client.adapter, msg, 2);	if (ret >= 0)		return 0;	return ret;}static int mt9v111_read_reg(u8 * reg, u16 * val){	return mt9v111_i2c_client_xfer(MT9V111_I2C_ADDRESS, reg, 1,				       (u8 *) val, 2, MXC_I2C_FLAG_READ);}static int mt9v111_write_reg(u8 reg, u16 val){	u8 temp1;	u16 temp2;	temp1 = reg;	temp2 = mt9v111_endian_swap16(val);	pr_debug("write reg %x val %x.\n", reg, val);	return mt9v111_i2c_client_xfer(MT9V111_I2C_ADDRESS, &temp1, 1,				       (u8 *) & temp2, 2, 0);}/*! * Initialize mt9v111_sensor_lib * Libarary for Sensor configuration through I2C * * @param       coreReg       Core Registers * @param       ifpReg        IFP Register * * @return status */static u8 mt9v111_sensor_lib(mt9v111_coreReg * coreReg, mt9v111_IFPReg * ifpReg){	u8 reg;	u16 data;	u8 error = 0;	/*	 * setup to IFP registers	 */	reg = MT9V111I_ADDR_SPACE_SEL;	data = ifpReg->addrSpaceSel;	mt9v111_write_reg(reg, data);	// Operation Mode Control	reg = MT9V111I_MODE_CONTROL;	data = ifpReg->modeControl;	mt9v111_write_reg(reg, data);	// Output format	reg = MT9V111I_FORMAT_CONTROL;	data = ifpReg->formatControl;	// Set bit 12	mt9v111_write_reg(reg, data);	// Flicker Control	reg = MT9V111I_FLICKER_CONTROL;	data = ifpReg->flickerCtrl;	mt9v111_write_reg(reg, data);	// AE limit 4	reg = MT9V111I_SHUTTER_WIDTH_LIMIT_AE;	data = ifpReg->gainLimitAE;	mt9v111_write_reg(reg, data);	reg = MT9V111I_OUTPUT_FORMAT_CTRL2;	data = ifpReg->outputFormatCtrl2;	mt9v111_write_reg(reg, data);	reg = MT9V111I_AE_SPEED;	data = ifpReg->AESpeed;	mt9v111_write_reg(reg, data);	/* output image size */	reg = MT9V111i_H_PAN;	data = 0x8000 | ifpReg->HPan;	mt9v111_write_reg(reg, data);	reg = MT9V111i_H_ZOOM;	data = 0x8000 | ifpReg->HZoom;	mt9v111_write_reg(reg, data);	reg = MT9V111i_H_SIZE;	data = 0x8000 | ifpReg->HSize;	mt9v111_write_reg(reg, data);	reg = MT9V111i_V_PAN;	data = 0x8000 | ifpReg->VPan;	mt9v111_write_reg(reg, data);	reg = MT9V111i_V_ZOOM;	data = 0x8000 | ifpReg->VZoom;	mt9v111_write_reg(reg, data);	reg = MT9V111i_V_SIZE;	data = 0x8000 | ifpReg->VSize;	mt9v111_write_reg(reg, data);	reg = MT9V111i_H_PAN;	data = ~0x8000 & ifpReg->HPan;	mt9v111_write_reg(reg, data);#if 0	reg = MT9V111I_UPPER_SHUTTER_DELAY_LIM;	data = ifpReg->upperShutterDelayLi;	mt9v111_write_reg(reg, data);	reg = MT9V111I_SHUTTER_60;	data = ifpReg->shutter_width_60;	mt9v111_write_reg(reg, data);	reg = MT9V111I_SEARCH_FLICK_60;	data = ifpReg->search_flicker_60;	mt9v111_write_reg(reg, data);#endif	/*	 * setup to sensor core registers	 */	reg = MT9V111I_ADDR_SPACE_SEL;	data = coreReg->addressSelect;	mt9v111_write_reg(reg, data);	// enable changes and put the Sync bit on	reg = MT9V111S_OUTPUT_CTRL;	data = MT9V111S_OUTCTRL_SYNC | MT9V111S_OUTCTRL_CHIP_ENABLE | 0x3000;	mt9v111_write_reg(reg, data);	// min PIXCLK - Default	reg = MT9V111S_PIXEL_CLOCK_SPEED;	data = coreReg->pixelClockSpeed;	mt9v111_write_reg(reg, data);	//Setup image flipping / Dark rows / row/column skip	reg = MT9V111S_READ_MODE;	data = coreReg->readMode;	mt9v111_write_reg(reg, data);	//zoom 0	reg = MT9V111S_DIGITAL_ZOOM;	data = coreReg->digitalZoom;	mt9v111_write_reg(reg, data);	// min H-blank	reg = MT9V111S_HOR_BLANKING;	data = coreReg->horizontalBlanking;	mt9v111_write_reg(reg, data);	// min V-blank	reg = MT9V111S_VER_BLANKING;	data = coreReg->verticalBlanking;	mt9v111_write_reg(reg, data);	reg = MT9V111S_SHUTTER_WIDTH;	data = coreReg->shutterWidth;	mt9v111_write_reg(reg, data);	reg = MT9V111S_SHUTTER_DELAY;	data = ifpReg->upperShutterDelayLi;	mt9v111_write_reg(reg, data);	// changes become effective	reg = MT9V111S_OUTPUT_CTRL;	data = MT9V111S_OUTCTRL_CHIP_ENABLE | 0x3000;	mt9v111_write_reg(reg, data);	return error;}/*! * mt9v111 sensor interface Initialization * @param param            sensor_interface * * @param width            u32 * @param height           u32 * @return  None */static void mt9v111_interface(sensor_interface * param, u32 width, u32 height){	param->Vsync_pol = 0x0;	param->clk_mode = 0x0;	//gated	param->pixclk_pol = 0x0;	param->data_width = 0x1;	param->data_pol = 0x0;	param->ext_vsync = 0x0;	param->Vsync_pol = 0x0;	param->Hsync_pol = 0x0;	param->width = width - 1;	param->height = height - 1;	param->pixel_fmt = IPU_PIX_FMT_UYVY;	param->mclk = 27000000;}/*! * MT9V111 frame rate calculate * * @param frame_rate       int * * @param mclk             int * @return  None */static void mt9v111_rate_cal(int *frame_rate, int mclk){	int num_clock_per_row;	int max_rate = 0;	mt9v111_device.coreReg->horizontalBlanking = MT9V111_HORZBLANK_MIN;	num_clock_per_row = (format[0].width + 114 + MT9V111_HORZBLANK_MIN) * 2;	max_rate = mclk / (num_clock_per_row *			   (format[0].height + MT9V111_VERTBLANK_DEFAULT));	if ((*frame_rate > max_rate) || (*frame_rate == 0)) {		*frame_rate = max_rate;	}	mt9v111_device.coreReg->verticalBlanking	    = mclk / (*frame_rate * num_clock_per_row) - format[0].height;	reset_frame_rate = *frame_rate;}/*! * MT9V111 sensor configuration * * @param frame_rate       int * * @param high_quality     int * @return  sensor_interface * */sensor_interface *mt9v111_config(int *frame_rate, int high_quality){	u32 out_width, out_height;	mt9v111_device.coreReg->addressSelect = MT9V111I_SEL_SCA;	mt9v111_device.ifpReg->addrSpaceSel = MT9V111I_SEL_IFP;	mt9v111_device.coreReg->windowHeight = MT9V111_WINHEIGHT;	mt9v111_device.coreReg->windowWidth = MT9V111_WINWIDTH;	mt9v111_device.coreReg->zoomColStart = 0;	mt9v111_device.coreReg->zomRowStart = 0;	mt9v111_device.coreReg->digitalZoom = 0x0;	mt9v111_device.coreReg->verticalBlanking = MT9V111_VERTBLANK_DEFAULT;	mt9v111_device.coreReg->horizontalBlanking = MT9V111_HORZBLANK_MIN;	mt9v111_device.coreReg->pixelClockSpeed = 0;	mt9v111_device.coreReg->readMode = 0xd0a1;	mt9v111_device.ifpReg->outputFormatCtrl2 = 0;	mt9v111_device.ifpReg->gainLimitAE = 0x300;	mt9v111_device.ifpReg->AESpeed = 0x80;	// here is the default value	mt9v111_device.ifpReg->formatControl = 0xc800;	mt9v111_device.ifpReg->modeControl = 0x708e;	mt9v111_device.ifpReg->awbSpeed = 0x4514;	mt9v111_device.ifpReg->flickerCtrl = 0x02;	mt9v111_device.coreReg->shutterWidth = 0xf8;	out_width = 640;	out_height = 480;	/*output size */	mt9v111_device.ifpReg->HPan = 0;	mt9v111_device.ifpReg->HZoom = 640;	mt9v111_device.ifpReg->HSize = out_width;	mt9v111_device.ifpReg->VPan = 0;	mt9v111_device.ifpReg->VZoom = 480;	mt9v111_device.ifpReg->VSize = out_height;	mt9v111_interface(interface_param, out_width, out_height);	set_mclk_rate(&interface_param->mclk);	mt9v111_rate_cal(frame_rate, interface_param->mclk);	mt9v111_sensor_lib(mt9v111_device.coreReg, mt9v111_device.ifpReg);	return interface_param;}/*! * mt9v111 sensor set color configuration * * @param bright       int * @param saturation   int * @param red          int * @param green        int * @param blue         int * @return  None */static voidmt9v111_set_color(int bright, int saturation, int red, int green, int blue){	u8 reg;	u16 data;	switch (saturation) {	case 100:		mt9v111_device.ifpReg->awbSpeed = 0x4514;		break;	case 150:		mt9v111_device.ifpReg->awbSpeed = 0x6D14;		break;	case 75:		mt9v111_device.ifpReg->awbSpeed = 0x4D14;		break;	case 50:		mt9v111_device.ifpReg->awbSpeed = 0x5514;		break;	case 37:		mt9v111_device.ifpReg->awbSpeed = 0x5D14;		break;	case 25:		mt9v111_device.ifpReg->awbSpeed = 0x6514;		break;	default:		mt9v111_device.ifpReg->awbSpeed = 0x4514;		break;	}	reg = MT9V111I_ADDR_SPACE_SEL;	data = mt9v111_device.ifpReg->addrSpaceSel;	mt9v111_write_reg(reg, data);	// Operation Mode Control	reg = MT9V111I_AWB_SPEED;	data = mt9v111_device.ifpReg->awbSpeed;	mt9v111_write_reg(reg, data);}/*! * mt9v111 sensor get color configuration * * @param bright       int * * @param saturation   int * * @param red          int * * @param green        int * * @param blue         int * * @return  None */static voidmt9v111_get_color(int *bright, int *saturation, int *red, int *green, int *blue){	*saturation = (mt9v111_device.ifpReg->awbSpeed & 0x3800) >> 11;	switch (*saturation) {	case 0:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频在线观看一区| 欧美tickle裸体挠脚心vk| 亚洲精品免费在线| 91久久精品日日躁夜夜躁欧美| 中文字幕欧美日韩一区| 成人精品视频一区二区三区| 国产精品福利av| 欧美午夜一区二区三区免费大片| 亚洲成人高清在线| 日韩一区二区精品葵司在线| 国产在线精品一区二区三区不卡| 国产欧美一区二区精品忘忧草 | 国产精品久久久久久久久快鸭| 99在线精品免费| 一区二区三区日韩在线观看| 国产精品日日摸夜夜摸av| 成人综合激情网| 一区二区三区四区激情| 在线播放国产精品二区一二区四区| 日韩高清在线观看| 国产日韩欧美精品在线| 一本到三区不卡视频| 天天综合色天天综合| 欧美精品一区二区三区在线播放| 波多野结衣中文字幕一区二区三区 | 国产婷婷色一区二区三区四区| 国产成人精品aa毛片| 亚洲欧美日韩国产综合在线| 正在播放亚洲一区| 菠萝蜜视频在线观看一区| 亚洲一级片在线观看| 2023国产精品自拍| 欧美在线短视频| 国产露脸91国语对白| 日韩美女视频一区二区 | 日韩免费福利电影在线观看| 99国产精品国产精品久久| 日韩国产高清影视| 日韩一区在线免费观看| 日韩欧美一区中文| 色婷婷久久久亚洲一区二区三区 | 久久99热99| 亚洲男同性视频| 久久久91精品国产一区二区精品| 欧美天堂亚洲电影院在线播放| 国产精品性做久久久久久| 亚洲成人激情社区| 亚洲欧美影音先锋| 久久久亚洲国产美女国产盗摄| 欧美性猛片xxxx免费看久爱| 国产91精品露脸国语对白| 日本不卡123| 一级日本不卡的影视| 国产三级精品视频| 欧美成人一区二区| 在线不卡a资源高清| 在线视频你懂得一区二区三区| 国产精品一区二区三区99| 奇米888四色在线精品| 一区二区三区四区视频精品免费 | 免费精品视频在线| 亚洲香肠在线观看| 亚洲欧美一区二区三区极速播放 | 日日夜夜精品视频天天综合网| 亚洲欧洲成人自拍| 中文字幕成人网| 久久精品水蜜桃av综合天堂| 日韩免费一区二区三区在线播放| 欧美裸体bbwbbwbbw| 日本福利一区二区| 色综合久久综合| gogogo免费视频观看亚洲一| 国产不卡在线视频| 国产99精品国产| 高清国产午夜精品久久久久久| 国产另类ts人妖一区二区| 九色综合国产一区二区三区| 日本女优在线视频一区二区| 日本亚洲天堂网| 男女性色大片免费观看一区二区| 日本强好片久久久久久aaa| 丝袜诱惑制服诱惑色一区在线观看 | 一本大道久久a久久精品综合| 成人av在线一区二区三区| 国产不卡视频在线播放| 波多野结衣在线aⅴ中文字幕不卡| 成人自拍视频在线| 色哟哟日韩精品| 欧美日韩国产高清一区| 91精品国产色综合久久不卡电影 | 91视频观看视频| 在线精品视频小说1| 欧美日韩国产大片| 日韩精品综合一本久道在线视频| 精品国产三级a在线观看| 久久精品男人的天堂| 国产精品久久久久久久久久久免费看| 综合在线观看色| 图片区小说区国产精品视频| 免费在线观看成人| 国产一区二区在线看| 成人avav影音| 欧美日韩在线播| 337p粉嫩大胆色噜噜噜噜亚洲| 国产日韩欧美一区二区三区综合| 亚洲人成伊人成综合网小说| 亚洲成av人在线观看| 日本va欧美va精品| 丰满少妇久久久久久久| 日本丰满少妇一区二区三区| 日韩欧美综合在线| 国产精品麻豆欧美日韩ww| 亚洲国产精品影院| 国产精品中文欧美| 91福利精品第一导航| 欧美精品一区视频| 亚洲激情图片qvod| 久久精品国产第一区二区三区| 成人深夜福利app| 欧美日韩国产综合草草| 国产免费成人在线视频| 亚洲午夜免费电影| 国产黄色成人av| 在线播放欧美女士性生活| 国产精品蜜臀av| 久久66热偷产精品| 欧美综合久久久| 国产精品视频观看| 麻豆一区二区99久久久久| av午夜一区麻豆| 精品嫩草影院久久| 亚洲国产视频网站| 成人性生交大合| 日韩欧美电影在线| 亚洲成av人片观看| 91香蕉视频在线| 国产女同互慰高潮91漫画| 日韩成人av影视| 在线视频欧美精品| 中文字幕一区二区三区视频| 精品一区二区在线视频| 欧美网站大全在线观看| 国产精品国产三级国产有无不卡| 毛片不卡一区二区| 欧美日韩高清一区二区三区| 中文字幕中文乱码欧美一区二区 | 国产精品自拍网站| 日韩手机在线导航| 日韩电影一区二区三区四区| 色综合天天性综合| 国产精品萝li| 福利视频网站一区二区三区| 日韩美女一区二区三区四区| 午夜影视日本亚洲欧洲精品| 91一区在线观看| 中文字幕在线一区| 国产99久久久久久免费看农村| 欧美成人精品1314www| 午夜精品久久久久影视| 欧美中文字幕久久| 亚洲一区在线播放| 色婷婷av久久久久久久| 亚洲人123区| 色伊人久久综合中文字幕| 亚洲视频小说图片| 91亚洲国产成人精品一区二三| 国产女主播一区| 成人三级伦理片| 亚洲国产电影在线观看| www.综合网.com| 亚洲色图第一区| 91麻豆免费观看| 亚洲激情六月丁香| 欧美在线高清视频| 天天色天天爱天天射综合| 欧美日韩大陆在线| 美女视频网站黄色亚洲| 日韩视频一区二区| 激情综合色播五月| 国产欧美一区二区精品秋霞影院| 国产suv精品一区二区6| 国产精品久久夜| 色婷婷一区二区三区四区| 亚洲成av人片一区二区| 日韩视频国产视频| 国产精品一区二区不卡| 国产精品久久久久一区| 91啪亚洲精品| 亚洲h在线观看| 久久综合九色欧美综合狠狠| 粉嫩aⅴ一区二区三区四区五区| 亚洲欧美激情一区二区| 欧美日本在线一区| 国产毛片精品视频| 专区另类欧美日韩| 日韩女优电影在线观看| 成人av电影在线观看| 亚洲福利一区二区| 久久久一区二区三区| 99国产麻豆精品|