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

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

?? ov511.c

?? 本源代碼為USB攝像頭的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
static int ov51x_set_slave_ids(struct usb_ov511 *ov511,		    unsigned char write_id,		    unsigned char read_id){	struct usb_device *dev = ov511->dev;	if (ov511_reg_write(dev, OV511_REG_I2C_SLAVE_ID_WRITE, write_id) < 0)		return -EIO;	if (ov511_reg_write(dev, OV511_REG_I2C_SLAVE_ID_READ, read_id) < 0)		return -EIO;	if (ov511_reset(ov511, OV511_RESET_NOREGS) < 0)		return -EIO;	return 0;}/* This does an initial reset of an OmniVision sensor and ensures that I2C * is synchronized. Returns <0 for failure. */static int ov51x_init_ov_sensor(struct usb_ov511 *ov511){	int i, success;	/* Reset the sensor */ 	if (ov51x_i2c_write(ov511, 0x12, 0x80) < 0) return -EIO;	/* Wait for it to initialize */ 	schedule_timeout (1 + 150 * HZ / 1000);	for (i = 0, success = 0; i < i2c_detect_tries && !success; i++) {		if ((ov51x_i2c_read(ov511, OV7610_REG_ID_HIGH) == 0x7F) &&		    (ov51x_i2c_read(ov511, OV7610_REG_ID_LOW) == 0xA2)) {			success = 1;			continue;		}		/* Reset the sensor */ 		if (ov51x_i2c_write(ov511, 0x12, 0x80) < 0) return -EIO;		/* Wait for it to initialize */ 		schedule_timeout(1 + 150 * HZ / 1000);		/* Dummy read to sync I2C */		if (ov51x_i2c_read(ov511, 0x00) < 0) return -EIO;	}	if (!success)		return -EIO;		PDEBUG(1, "I2C synced in %d attempt(s)", i);	return 0;}static int ov511_set_packet_size(struct usb_ov511 *ov511, int size){	int alt, mult;	if (ov511_stop(ov511) < 0)		return -EIO;	mult = size >> 5;	if (ov511->bridge == BRG_OV511) {		if (size == 0) alt = OV511_ALT_SIZE_0;		else if (size == 257) alt = OV511_ALT_SIZE_257;		else if (size == 513) alt = OV511_ALT_SIZE_513;		else if (size == 769) alt = OV511_ALT_SIZE_769;		else if (size == 993) alt = OV511_ALT_SIZE_993;		else {			err("Set packet size: invalid size (%d)", size);			return -EINVAL;		}	} else if (ov511->bridge == BRG_OV511PLUS) {		if (size == 0) alt = OV511PLUS_ALT_SIZE_0;		else if (size == 33) alt = OV511PLUS_ALT_SIZE_33;		else if (size == 129) alt = OV511PLUS_ALT_SIZE_129;		else if (size == 257) alt = OV511PLUS_ALT_SIZE_257;		else if (size == 385) alt = OV511PLUS_ALT_SIZE_385;		else if (size == 513) alt = OV511PLUS_ALT_SIZE_513;		else if (size == 769) alt = OV511PLUS_ALT_SIZE_769;		else if (size == 961) alt = OV511PLUS_ALT_SIZE_961;		else {			err("Set packet size: invalid size (%d)", size);			return -EINVAL;		}	} else if (ov511->bridge == BRG_OV518 ||		   ov511->bridge == BRG_OV518PLUS) {		if (size == 0) alt = OV518_ALT_SIZE_0;		else if (size == 128) alt = OV518_ALT_SIZE_128;		else if (size == 256) alt = OV518_ALT_SIZE_256;		else if (size == 384) alt = OV518_ALT_SIZE_384;		else if (size == 512) alt = OV518_ALT_SIZE_512;		else if (size == 640) alt = OV518_ALT_SIZE_640;		else if (size == 768) alt = OV518_ALT_SIZE_768;		else if (size == 896) alt = OV518_ALT_SIZE_896;		else {			err("Set packet size: invalid size (%d)", size);			return -EINVAL;		}	} else {		err("Set packet size: Invalid bridge type");		return -EINVAL;	}	PDEBUG(3, "set packet size: %d, mult=%d, alt=%d", size, mult, alt);	// FIXME: Don't know how to do this on OV518 yet	if (ov511->bridge != BRG_OV518 &&	    ov511->bridge != BRG_OV518PLUS) {		if (ov511_reg_write(ov511->dev, OV511_REG_FIFO_PACKET_SIZE,				    mult) < 0) {			return -EIO;		}	}		if (usb_set_interface(ov511->dev, ov511->iface, alt) < 0) {		err("Set packet size: set interface error");		return -EBUSY;	}	/* Initialize the stream */	if (ov511->bridge == BRG_OV518 ||	    ov511->bridge == BRG_OV518PLUS)		if (ov511_reg_write(ov511->dev, 0x2f, 0x80) < 0)			return -EIO;	// FIXME - Should we only reset the FIFO?	if (ov511_reset(ov511, OV511_RESET_NOREGS) < 0)		return -EIO;	ov511->packet_size = size;	if (ov511_restart(ov511) < 0)		return -EIO;	return 0;}/* Upload compression params and quantization tables. Returns 0 for success. */static intov511_init_compression(struct usb_ov511 *ov511){	struct usb_device *dev = ov511->dev;	int rc = 0;	if (!ov511->compress_inited) {		ov511_reg_write(dev, 0x70, phy);		ov511_reg_write(dev, 0x71, phuv);		ov511_reg_write(dev, 0x72, pvy);		ov511_reg_write(dev, 0x73, pvuv);		ov511_reg_write(dev, 0x74, qhy);		ov511_reg_write(dev, 0x75, qhuv);		ov511_reg_write(dev, 0x76, qvy);		ov511_reg_write(dev, 0x77, qvuv);		if (ov511_upload_quan_tables(dev) < 0) {			err("Error uploading quantization tables");			rc = -EIO;			goto out;		}	}	ov511->compress_inited = 1;out:		return rc;}/* Upload compression params and quantization tables. Returns 0 for success. */static intov518_init_compression(struct usb_ov511 *ov511){	struct usb_device *dev = ov511->dev;	int rc = 0;	if (!ov511->compress_inited) {		if (ov518_upload_quan_tables(dev) < 0) {			err("Error uploading quantization tables");			rc = -EIO;			goto out;		}	}	ov511->compress_inited = 1;out:		return rc;}/* -------------------------------------------------------------------------- *//* Sets sensor's contrast setting to "val" */static intsensor_set_contrast(struct usb_ov511 *ov511, unsigned short val){	int rc;	PDEBUG(3, "%d", val);	if (ov511->stop_during_set)		if (ov511_stop(ov511) < 0)			return -EIO;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV6620:	case SEN_OV6630:	{		rc = ov51x_i2c_write(ov511, OV7610_REG_CNT, val >> 8);		if (rc < 0)			goto out;		break;	}	case SEN_OV7620:	{		unsigned char ctab[] = {			0x01, 0x05, 0x09, 0x11, 0x15, 0x35, 0x37, 0x57,			0x5b, 0xa5, 0xa7, 0xc7, 0xc9, 0xcf, 0xef, 0xff		};		/* Use Y gamma control instead. Bit 0 enables it. */		rc = ov51x_i2c_write(ov511, 0x64, ctab[val>>12]);		if (rc < 0)			goto out;		break;	}	case SEN_SAA7111A:	{		rc = ov51x_i2c_write(ov511, 0x0b, val >> 9);		if (rc < 0)			goto out;		break;	}	default:	{		PDEBUG(3, "Unsupported with this sensor");		rc = -EPERM;		goto out;	}	}	rc = 0;		/* Success */	ov511->contrast = val;out:	if (ov511_restart(ov511) < 0)		return -EIO;	return rc;}/* Gets sensor's contrast setting */static intsensor_get_contrast(struct usb_ov511 *ov511, unsigned short *val){	int rc;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_read(ov511, OV7610_REG_CNT);		if (rc < 0)			return rc;		else			*val = rc << 8;		break;	case SEN_OV7620:		/* Use Y gamma reg instead. Bit 0 is the enable bit. */		rc = ov51x_i2c_read(ov511, 0x64);		if (rc < 0)			return rc;		else			*val = (rc & 0xfe) << 8;		break;	case SEN_SAA7111A:		*val = ov511->contrast;		break;	default:		PDEBUG(3, "Unsupported with this sensor");		return -EPERM;	}	PDEBUG(3, "%d", *val);	ov511->contrast = *val;	return 0;}/* -------------------------------------------------------------------------- *//* Sets sensor's brightness setting to "val" */static intsensor_set_brightness(struct usb_ov511 *ov511, unsigned short val){	int rc;	PDEBUG(4, "%d", val);	if (ov511->stop_during_set)		if (ov511_stop(ov511) < 0)			return -EIO;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV7620AE:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_write(ov511, OV7610_REG_BRT, val >> 8);		if (rc < 0)			goto out;		break;	case SEN_OV7620:		/* 7620 doesn't like manual changes when in auto mode */		if (!ov511->auto_brt) {			rc = ov51x_i2c_write(ov511, OV7610_REG_BRT, val >> 8);			if (rc < 0)				goto out;		}		break;	case SEN_SAA7111A:		rc = ov51x_i2c_write(ov511, 0x0a, val >> 8);		if (rc < 0)			goto out;		break;	default:		PDEBUG(3, "Unsupported with this sensor");		rc = -EPERM;		goto out;	}	rc = 0;		/* Success */	ov511->brightness = val;out:	if (ov511_restart(ov511) < 0)		return -EIO;	return rc;}/* Gets sensor's brightness setting */static intsensor_get_brightness(struct usb_ov511 *ov511, unsigned short *val){	int rc;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV7620AE:	case SEN_OV7620:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_read(ov511, OV7610_REG_BRT);		if (rc < 0)			return rc;		else			*val = rc << 8;		break;	case SEN_SAA7111A:		*val = ov511->brightness;		break;	default:		PDEBUG(3, "Unsupported with this sensor");		return -EPERM;	}	PDEBUG(3, "%d", *val);	ov511->brightness = *val;	return 0;}/* -------------------------------------------------------------------------- *//* Sets sensor's saturation (color intensity) setting to "val" */static intsensor_set_saturation(struct usb_ov511 *ov511, unsigned short val){	int rc;	PDEBUG(3, "%d", val);	if (ov511->stop_during_set)		if (ov511_stop(ov511) < 0)			return -EIO;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV7620AE:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_write(ov511, OV7610_REG_SAT, val >> 8);		if (rc < 0)			goto out;		break;	case SEN_OV7620://		/* Use UV gamma control instead. Bits 0 & 7 are reserved. *///		rc = ov511_i2c_write(ov511->dev, 0x62, (val >> 9) & 0x7e);//		if (rc < 0)//			goto out;		rc = ov51x_i2c_write(ov511, OV7610_REG_SAT, val >> 8);		if (rc < 0)			goto out;		break;	case SEN_SAA7111A:		rc = ov51x_i2c_write(ov511, 0x0c, val >> 9);		if (rc < 0)			goto out;		break;	default:		PDEBUG(3, "Unsupported with this sensor");		rc = -EPERM;		goto out;	}	rc = 0;		/* Success */	ov511->colour = val;out:	if (ov511_restart(ov511) < 0)		return -EIO;	return rc;}/* Gets sensor's saturation (color intensity) setting */static intsensor_get_saturation(struct usb_ov511 *ov511, unsigned short *val){	int rc;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV7620AE:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_read(ov511, OV7610_REG_SAT);		if (rc < 0)			return rc;		else			*val = rc << 8;		break;	case SEN_OV7620://		/* Use UV gamma reg instead. Bits 0 & 7 are reserved. *///		rc = ov51x_i2c_read(ov511, 0x62);//		if (rc < 0)//			return rc;//		else//			*val = (rc & 0x7e) << 9;		rc = ov51x_i2c_read(ov511, OV7610_REG_SAT);		if (rc < 0)			return rc;		else			*val = rc << 8;		break;	case SEN_SAA7111A:		*val = ov511->colour;		break;	default:		PDEBUG(3, "Unsupported with this sensor");		return -EPERM;	}	PDEBUG(3, "%d", *val);	ov511->colour = *val;	return 0;}/* -------------------------------------------------------------------------- *//* Sets sensor's hue (red/blue balance) setting to "val" */static intsensor_set_hue(struct usb_ov511 *ov511, unsigned short val){	int rc;	PDEBUG(3, "%d", val);	if (ov511->stop_during_set)		if (ov511_stop(ov511) < 0)			return -EIO;	switch (ov511->sensor) {	case SEN_OV7610:	case SEN_OV6620:	case SEN_OV6630:		rc = ov51x_i2c_write(ov511, OV7610_REG_RED, 0xFF - (val >> 8));		if (rc < 0)			goto out;		rc = ov51x_i2c_write(ov511, OV7610_REG_BLUE, val >> 8);		if (rc < 0)			goto out;		break;	case SEN_OV7620:// Hue control is causing problems. I will enable it once it's fixed.#if 0		rc = ov51x_i2c_write(ov511, 0x7a,				     (unsigned char)(val >> 8) + 0xb);		if (rc < 0)			goto out;		rc = ov51x_i2c_write(ov511, 0x79, 				     (unsigned char)(val >> 8) + 0xb);		if (rc < 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩二区三区| 国产精品白丝av| 欧美日韩1区2区| 秋霞成人午夜伦在线观看| 欧美一区二区三区视频| 久久69国产一区二区蜜臀| 精品动漫一区二区三区在线观看| 另类专区欧美蜜桃臀第一页| 国产午夜精品美女毛片视频| 丁香六月综合激情| 亚洲欧美日韩国产另类专区| 欧美伊人久久久久久午夜久久久久| 亚洲丰满少妇videoshd| 日韩视频免费观看高清完整版| 国产一区二区三区综合| 国产日韩欧美一区二区三区乱码 | 又紧又大又爽精品一区二区| 99麻豆久久久国产精品免费优播| 一区二区三区在线视频观看| 欧美久久一二区| 国产一区美女在线| 亚洲欧美在线另类| 在线播放91灌醉迷j高跟美女| 久久精品国产精品青草| 国产精品三级av| 欧美美女网站色| 成人做爰69片免费看网站| 亚洲一级二级在线| 久久久久久毛片| 欧美视频你懂的| 国产美女娇喘av呻吟久久| 亚洲精品你懂的| 亚洲精品一区二区三区四区高清| 99在线热播精品免费| 蜜乳av一区二区| 亚洲人成精品久久久久久| 91精品国产丝袜白色高跟鞋| 99久久夜色精品国产网站| 裸体一区二区三区| 亚洲欧美国产77777| 日韩欧美国产1| 在线观看视频一区二区欧美日韩| 九九精品视频在线看| 亚洲韩国一区二区三区| 国产日产欧美一区| 日韩欧美一级二级| 色先锋久久av资源部| 国产精品影视天天线| 天天影视涩香欲综合网| 国产精品电影一区二区| 精品国产三级电影在线观看| 欧美性大战久久久久久久蜜臀| 国产99精品国产| av成人老司机| 国产精品影视在线观看| 蜜臀av性久久久久蜜臀av麻豆| 亚洲综合偷拍欧美一区色| 中文字幕第一区二区| 欧美成人精品1314www| 91精品在线免费| 欧美三级视频在线播放| 在线免费观看日本一区| 99re成人在线| 不卡视频一二三| 不卡av在线免费观看| 国产一区二区中文字幕| 久久精品国产秦先生| 蜜桃免费网站一区二区三区| 亚洲日本va午夜在线影院| 国产精品三级电影| 国产精品天美传媒| 国产人妖乱国产精品人妖| 久久午夜电影网| 久久综合狠狠综合久久综合88 | 欧美精品亚洲二区| 欧美性感一区二区三区| 在线观看一区不卡| 欧美在线三级电影| 欧美在线|欧美| 欧美日韩视频在线观看一区二区三区 | 福利一区福利二区| 国产成人午夜片在线观看高清观看| 经典三级视频一区| 国产在线精品一区在线观看麻豆| 久久99精品国产麻豆婷婷洗澡| 狠狠色丁香婷综合久久| 国产精品一区久久久久| 成人午夜碰碰视频| 日本韩国精品在线| 欧美日韩专区在线| 9191久久久久久久久久久| 在线观看91视频| 欧美一区二区在线免费播放| 欧美大片一区二区| 久久久久国产精品免费免费搜索| 国产亚洲精品7777| 亚洲欧美另类久久久精品| 亚洲综合一区二区精品导航| 日韩在线一二三区| 激情综合网最新| 成人高清视频在线观看| 色婷婷香蕉在线一区二区| 久久免费电影网| 中文字幕中文乱码欧美一区二区 | 亚洲高清视频中文字幕| 日韩精品一级中文字幕精品视频免费观看| 日韩有码一区二区三区| 国产激情视频一区二区在线观看| bt欧美亚洲午夜电影天堂| 91高清在线观看| 日韩欧美中文字幕制服| 国产精品午夜免费| 调教+趴+乳夹+国产+精品| 国产精品99久久久久久宅男| 欧美无砖专区一中文字| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品视频yy9299一区| 一区二区在线观看视频在线观看| 久久国产精品第一页| 99久久99久久精品免费看蜜桃| 制服丝袜亚洲色图| 中文字幕在线一区二区三区| 日本欧美一区二区三区乱码| 成人性生交大片免费| 日韩视频免费观看高清在线视频| 亚洲免费视频成人| 国产在线国偷精品产拍免费yy | 欧美猛男gaygay网站| 精品国产一区二区亚洲人成毛片| 国产三级三级三级精品8ⅰ区| 国产精品18久久久久| 在线观看国产91| 国产精品午夜在线| 蜜臀av一区二区在线免费观看| 91日韩一区二区三区| 精品sm捆绑视频| 日韩av在线播放中文字幕| 99这里只有久久精品视频| 久久一区二区视频| 日韩av在线免费观看不卡| 在线国产亚洲欧美| 中文字幕一区二区三区乱码在线 | 国产视频一区二区在线| 亚洲18色成人| 在线一区二区三区做爰视频网站| 久久精品综合网| 国内外精品视频| 日韩欧美精品在线| 午夜av一区二区三区| 91免费国产在线| 国产精品三级在线观看| 国产成人av电影在线| 欧美成人一区二区三区在线观看| 亚洲一二三专区| 色老汉av一区二区三区| 国产欧美精品一区aⅴ影院| 久久99精品网久久| 精品国产一区二区三区av性色| 日本一道高清亚洲日美韩| 欧美日本一道本| 亚洲国产精品麻豆| 在线观看网站黄不卡| 亚洲综合久久av| 97久久超碰国产精品电影| 中文字幕av资源一区| 国产成人精品1024| 日本一区二区免费在线观看视频 | 成人综合婷婷国产精品久久 | 欧美电视剧在线看免费| 免费看欧美女人艹b| 日韩手机在线导航| 久久超级碰视频| 久久久亚洲午夜电影| 国内成人精品2018免费看| 国产清纯白嫩初高生在线观看91| 国产电影一区二区三区| 国产精品乱码一区二区三区软件| 国产不卡视频一区二区三区| 中文字幕av不卡| 日本福利一区二区| 亚洲高清免费观看高清完整版在线观看 | 一区二区三区蜜桃| 欧美日韩一区小说| 在线一区二区三区四区五区| 国产亚洲一区字幕| 成人h版在线观看| 亚洲日本乱码在线观看| 在线观看亚洲专区| 日本麻豆一区二区三区视频| 精品国产一区a| 91小视频免费看| 午夜欧美2019年伦理| 精品国产一区二区三区不卡 | 91精品久久久久久久久99蜜臂| 日韩精品一区第一页| 精品久久久久久久一区二区蜜臀| 国产乱妇无码大片在线观看| 亚洲欧美在线观看| 欧美一区二区黄| aaa欧美日韩|