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

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

?? w9968cf.c

?? V4l driver for DVB HD
?? C
?? 第 1 頁 / 共 5 頁
字號:
static int w9968cf_smbus_stop(struct w9968cf_device* cam){	int err = 0;	err += w9968cf_write_sb(cam, 0x0011); /* SDE=1, SDA=0, SCL=1 */	err += w9968cf_write_sb(cam, 0x0013); /* SDE=1, SDA=1, SCL=1 */	return err;}static int w9968cf_smbus_write_byte(struct w9968cf_device* cam, u8 v){	u8 bit;	int err = 0, sda;	for (bit = 0 ; bit < 8 ; bit++) {		sda = (v & 0x80) ? 2 : 0;		v <<= 1;		/* SDE=1, SDA=sda, SCL=0 */		err += w9968cf_write_sb(cam, 0x10 | sda);		/* SDE=1, SDA=sda, SCL=1 */		err += w9968cf_write_sb(cam, 0x11 | sda);		/* SDE=1, SDA=sda, SCL=0 */		err += w9968cf_write_sb(cam, 0x10 | sda);	}	return err;}static int w9968cf_smbus_read_byte(struct w9968cf_device* cam, u8* v){	u8 bit;	int err = 0;	*v = 0;	for (bit = 0 ; bit < 8 ; bit++) {		*v <<= 1;		err += w9968cf_write_sb(cam, 0x0013);		*v |= (w9968cf_read_sb(cam) & 0x0008) ? 1 : 0;		err += w9968cf_write_sb(cam, 0x0012);	}	return err;}static int w9968cf_smbus_write_ack(struct w9968cf_device* cam){	int err = 0;	err += w9968cf_write_sb(cam, 0x0010); /* SDE=1, SDA=0, SCL=0 */	err += w9968cf_write_sb(cam, 0x0011); /* SDE=1, SDA=0, SCL=1 */	err += w9968cf_write_sb(cam, 0x0010); /* SDE=1, SDA=0, SCL=0 */	return err;}static int w9968cf_smbus_read_ack(struct w9968cf_device* cam){	int err = 0, sda;	err += w9968cf_write_sb(cam, 0x0013); /* SDE=1, SDA=1, SCL=1 */	sda = (w9968cf_read_sb(cam) & 0x08) ? 1 : 0; /* sda = SDA */	err += w9968cf_write_sb(cam, 0x0012); /* SDE=1, SDA=1, SCL=0 */	if (sda < 0)		err += sda;	if (sda == 1) {		DBG(6, "Couldn't receive the ACK")		err += -1;	}	return err;}/* This seems to refresh the communication through the serial bus */static int w9968cf_smbus_refresh_bus(struct w9968cf_device* cam){	int err = 0, j;	for (j = 1; j <= 10; j++) {		err = w9968cf_write_reg(cam, 0x0020, 0x01);		err += w9968cf_write_reg(cam, 0x0000, 0x01);		if (err)			break;	}	return err;}/* SMBus protocol: S Addr Wr [A] Subaddr [A] Value [A] P */static intw9968cf_i2c_adap_fastwrite_byte_data(struct w9968cf_device* cam,				     u16 address, u8 subaddress,u8 value){	u16* data = cam->data_buffer;	int err = 0;	err += w9968cf_smbus_refresh_bus(cam);	/* Enable SBUS outputs */	err += w9968cf_write_sb(cam, 0x0020);	data[0] = 0x082f | ((address & 0x80) ? 0x1500 : 0x0);	data[0] |= (address & 0x40) ? 0x4000 : 0x0;	data[1] = 0x2082 | ((address & 0x40) ? 0x0005 : 0x0);	data[1] |= (address & 0x20) ? 0x0150 : 0x0;	data[1] |= (address & 0x10) ? 0x5400 : 0x0;	data[2] = 0x8208 | ((address & 0x08) ? 0x0015 : 0x0);	data[2] |= (address & 0x04) ? 0x0540 : 0x0;	data[2] |= (address & 0x02) ? 0x5000 : 0x0;	data[3] = 0x1d20 | ((address & 0x02) ? 0x0001 : 0x0);	data[3] |= (address & 0x01) ? 0x0054 : 0x0;	err += w9968cf_write_fsb(cam, data);	data[0] = 0x8208 | ((subaddress & 0x80) ? 0x0015 : 0x0);	data[0] |= (subaddress & 0x40) ? 0x0540 : 0x0;	data[0] |= (subaddress & 0x20) ? 0x5000 : 0x0;	data[1] = 0x0820 | ((subaddress & 0x20) ? 0x0001 : 0x0);	data[1] |= (subaddress & 0x10) ? 0x0054 : 0x0;	data[1] |= (subaddress & 0x08) ? 0x1500 : 0x0;	data[1] |= (subaddress & 0x04) ? 0x4000 : 0x0;	data[2] = 0x2082 | ((subaddress & 0x04) ? 0x0005 : 0x0);	data[2] |= (subaddress & 0x02) ? 0x0150 : 0x0;	data[2] |= (subaddress & 0x01) ? 0x5400 : 0x0;	data[3] = 0x001d;	err += w9968cf_write_fsb(cam, data);	data[0] = 0x8208 | ((value & 0x80) ? 0x0015 : 0x0);	data[0] |= (value & 0x40) ? 0x0540 : 0x0;	data[0] |= (value & 0x20) ? 0x5000 : 0x0;	data[1] = 0x0820 | ((value & 0x20) ? 0x0001 : 0x0);	data[1] |= (value & 0x10) ? 0x0054 : 0x0;	data[1] |= (value & 0x08) ? 0x1500 : 0x0;	data[1] |= (value & 0x04) ? 0x4000 : 0x0;	data[2] = 0x2082 | ((value & 0x04) ? 0x0005 : 0x0);	data[2] |= (value & 0x02) ? 0x0150 : 0x0;	data[2] |= (value & 0x01) ? 0x5400 : 0x0;	data[3] = 0xfe1d;	err += w9968cf_write_fsb(cam, data);	/* Disable SBUS outputs */	err += w9968cf_write_sb(cam, 0x0000);	if (!err)		DBG(5, "I2C write byte data done, addr.0x%04X, subaddr.0x%02X "		       "value 0x%02X", address, subaddress, value)	else		DBG(5, "I2C write byte data failed, addr.0x%04X, "		       "subaddr.0x%02X, value 0x%02X",		    address, subaddress, value)	return err;}/* SMBus protocol: S Addr Wr [A] Subaddr [A] P S Addr+1 Rd [A] [Value] NA P */static intw9968cf_i2c_adap_read_byte_data(struct w9968cf_device* cam,				u16 address, u8 subaddress,				u8* value){	int err = 0;	/* Serial data enable */	err += w9968cf_write_sb(cam, 0x0013); /* don't change ! */	err += w9968cf_smbus_start(cam);	err += w9968cf_smbus_write_byte(cam, address);	err += w9968cf_smbus_read_ack(cam);	err += w9968cf_smbus_write_byte(cam, subaddress);	err += w9968cf_smbus_read_ack(cam);	err += w9968cf_smbus_stop(cam);	err += w9968cf_smbus_start(cam);	err += w9968cf_smbus_write_byte(cam, address + 1);	err += w9968cf_smbus_read_ack(cam);	err += w9968cf_smbus_read_byte(cam, value);	err += w9968cf_smbus_write_ack(cam);	err += w9968cf_smbus_stop(cam);	/* Serial data disable */	err += w9968cf_write_sb(cam, 0x0000);	if (!err)		DBG(5, "I2C read byte data done, addr.0x%04X, "		       "subaddr.0x%02X, value 0x%02X",		    address, subaddress, *value)	else		DBG(5, "I2C read byte data failed, addr.0x%04X, "		       "subaddr.0x%02X, wrong value 0x%02X",		    address, subaddress, *value)	return err;}/* SMBus protocol: S Addr+1 Rd [A] [Value] NA P */static intw9968cf_i2c_adap_read_byte(struct w9968cf_device* cam,			   u16 address, u8* value){	int err = 0;	/* Serial data enable */	err += w9968cf_write_sb(cam, 0x0013);	err += w9968cf_smbus_start(cam);	err += w9968cf_smbus_write_byte(cam, address + 1);	err += w9968cf_smbus_read_ack(cam);	err += w9968cf_smbus_read_byte(cam, value);	err += w9968cf_smbus_write_ack(cam);	err += w9968cf_smbus_stop(cam);	/* Serial data disable */	err += w9968cf_write_sb(cam, 0x0000);	if (!err)		DBG(5, "I2C read byte done, addr.0x%04X, "		       "value 0x%02X", address, *value)	else		DBG(5, "I2C read byte failed, addr.0x%04X, "		       "wrong value 0x%02X", address, *value)	return err;}/* SMBus protocol: S Addr Wr [A] Value [A] P */static intw9968cf_i2c_adap_write_byte(struct w9968cf_device* cam,			    u16 address, u8 value){	DBG(4, "i2c_write_byte() is an unsupported transfer mode")	return -EINVAL;}/**************************************************************************** * I2C interface to kernel                                                  * ****************************************************************************/static intw9968cf_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,		       unsigned short flags, char read_write, u8 command,		       int size, union i2c_smbus_data *data){	struct w9968cf_device* cam = i2c_get_adapdata(adapter);	u8 i;	int err = 0;	switch (addr) {		case OV6xx0_SID:		case OV7xx0_SID:			break;		default:			DBG(4, "Rejected slave ID 0x%04X", addr)			return -EINVAL;	}	if (size == I2C_SMBUS_BYTE) {		/* Why addr <<= 1? See OVXXX0_SID defines in ovcamchip.h */		addr <<= 1;		if (read_write == I2C_SMBUS_WRITE)			err = w9968cf_i2c_adap_write_byte(cam, addr, command);		else if (read_write == I2C_SMBUS_READ)			err = w9968cf_i2c_adap_read_byte(cam,addr,&data->byte);	} else if (size == I2C_SMBUS_BYTE_DATA) {		addr <<= 1;		if (read_write == I2C_SMBUS_WRITE)			err = w9968cf_i2c_adap_fastwrite_byte_data(cam, addr,							  command, data->byte);		else if (read_write == I2C_SMBUS_READ) {			for (i = 1; i <= W9968CF_I2C_RW_RETRIES; i++) {				err = w9968cf_i2c_adap_read_byte_data(cam,addr,							 command, &data->byte);				if (err) {					if (w9968cf_smbus_refresh_bus(cam)) {						err = -EIO;						break;					}				} else					break;			}		} else			return -EINVAL;	} else {		DBG(4, "Unsupported I2C transfer mode (%d)", size)		return -EINVAL;	}	return err;}static u32 w9968cf_i2c_func(struct i2c_adapter* adap){	return I2C_FUNC_SMBUS_READ_BYTE |	       I2C_FUNC_SMBUS_READ_BYTE_DATA  |	       I2C_FUNC_SMBUS_WRITE_BYTE_DATA;}static int w9968cf_i2c_attach_inform(struct i2c_client* client){	struct w9968cf_device* cam = i2c_get_adapdata(client->adapter);	int id = client->driver->id, err = 0;	if (id == I2C_DRIVERID_OVCAMCHIP) {		cam->sensor_client = client;		err = w9968cf_sensor_init(cam);		if (err) {			cam->sensor_client = NULL;			return err;		}	} else {		DBG(4, "Rejected client [%s] with driver [%s]",		    client->name, client->driver->driver.name)		return -EINVAL;	}	DBG(5, "I2C attach client [%s] with driver [%s]",	    client->name, client->driver->driver.name)	return 0;}static int w9968cf_i2c_detach_inform(struct i2c_client* client){	struct w9968cf_device* cam = i2c_get_adapdata(client->adapter);	if (cam->sensor_client == client)		cam->sensor_client = NULL;	DBG(5, "I2C detach client [%s]", client->name)	return 0;}static intw9968cf_i2c_control(struct i2c_adapter* adapter, unsigned int cmd,		    unsigned long arg){	return 0;}static int w9968cf_i2c_init(struct w9968cf_device* cam){	int err = 0;	static struct i2c_algorithm algo = {		.smbus_xfer =    w9968cf_i2c_smbus_xfer,		.algo_control =  w9968cf_i2c_control,		.functionality = w9968cf_i2c_func,	};	static struct i2c_adapter adap = {		.id =                I2C_HW_SMBUS_W9968CF,		.class =             I2C_CLASS_CAM_DIGITAL,		.owner =             THIS_MODULE,		.client_register =   w9968cf_i2c_attach_inform,		.client_unregister = w9968cf_i2c_detach_inform,		.algo =              &algo,	};	memcpy(&cam->i2c_adapter, &adap, sizeof(struct i2c_adapter));	strcpy(cam->i2c_adapter.name, "w9968cf");	i2c_set_adapdata(&cam->i2c_adapter, cam);	DBG(6, "Registering I2C adapter with kernel...")	err = i2c_add_adapter(&cam->i2c_adapter);	if (err)		DBG(1, "Failed to register the I2C adapter")	else		DBG(5, "I2C adapter registered")	return err;}/****************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一二三| 26uuu另类欧美亚洲曰本| 国产精品不卡在线观看| 粉嫩av一区二区三区| 国产精品看片你懂得| 色综合久久久久综合体桃花网| 中文av一区二区| 91农村精品一区二区在线| 亚洲一区二区在线播放相泽 | 亚洲第一会所有码转帖| 欧美无砖砖区免费| 免费在线观看一区| 国产欧美一区在线| 99国产精品久久久| 亚洲国产一区二区在线播放| 91精品一区二区三区久久久久久| 激情欧美一区二区三区在线观看| 国产目拍亚洲精品99久久精品| www..com久久爱| 亚洲国产另类av| 91麻豆精品国产自产在线 | 亚洲免费电影在线| 欧美一区二区免费视频| 极品少妇xxxx偷拍精品少妇| 欧美国产精品久久| 欧美色涩在线第一页| 国产综合色精品一区二区三区| 国产精品欧美一级免费| 欧美三级电影精品| 国产成人亚洲综合色影视| 一区二区三区四区蜜桃| 日韩美女视频一区二区在线观看| www.一区二区| 蜜桃久久av一区| 日韩一区欧美小说| 日韩精品资源二区在线| 一本一道综合狠狠老| 久久国产夜色精品鲁鲁99| 亚洲免费观看在线视频| 日韩色在线观看| 91小视频在线| 国产一区二区在线电影| 亚洲一区二区三区不卡国产欧美| 久久噜噜亚洲综合| 欧美一区二区视频观看视频| 99久久精品99国产精品| 狂野欧美性猛交blacked| 一区二区三区视频在线看| 国产拍欧美日韩视频二区| 欧美日韩国产不卡| 91丨九色porny丨蝌蚪| 国产美女在线精品| 久久黄色级2电影| 亚洲一区二区三区爽爽爽爽爽| 国产日韩欧美精品在线| 91麻豆精品国产无毒不卡在线观看| 99久久精品免费看国产| 成人做爰69片免费看网站| 久久99九九99精品| 日韩不卡一区二区三区| 亚洲一区二区四区蜜桃| 亚洲精品水蜜桃| 中文字幕不卡在线播放| 久久综合999| 精品伦理精品一区| 欧美一区日本一区韩国一区| 欧美少妇xxx| 在线亚洲免费视频| 91极品美女在线| 在线一区二区三区做爰视频网站| 国产寡妇亲子伦一区二区| 久久99精品国产.久久久久久| 日韩中文字幕91| 偷拍亚洲欧洲综合| 日日摸夜夜添夜夜添国产精品| 亚洲图片一区二区| 亚洲大片免费看| 亚洲不卡一区二区三区| 香蕉久久夜色精品国产使用方法| 亚洲激情第一区| 一区二区日韩av| 天天色 色综合| 欧美日韩国产片| 午夜精品久久久久久久久久久| 欧美午夜一区二区三区免费大片| 亚洲成人动漫精品| 日韩欧美国产一区二区在线播放 | 99精品视频在线免费观看| 国产精品视频免费| 色香蕉久久蜜桃| 午夜在线成人av| 欧美一区二区三区视频在线观看 | 91丝袜美腿高跟国产极品老师| 亚洲人成7777| 91精品国产欧美日韩| 精彩视频一区二区三区| 国产日产欧美一区| 91丨porny丨中文| 日韩高清不卡一区二区| 26uuu另类欧美亚洲曰本| av在线综合网| 天堂成人国产精品一区| 欧美电影免费观看完整版| 蜜桃视频在线观看一区二区| 精品国产一区二区三区不卡| 一区二区视频免费在线观看| 欧美视频完全免费看| 韩国在线一区二区| 国产欧美日韩在线看| 不卡的电视剧免费网站有什么| 136国产福利精品导航| 97久久精品人人爽人人爽蜜臀| 午夜精品123| 精品国产亚洲在线| 成人97人人超碰人人99| 亚洲国产视频网站| 欧美tickling挠脚心丨vk| www..com久久爱| 欧美aaa在线| 国产精品毛片a∨一区二区三区| 一本到一区二区三区| 日本aⅴ亚洲精品中文乱码| 91最新地址在线播放| 久久99九九99精品| 中文字幕在线不卡一区 | 美腿丝袜在线亚洲一区| 666欧美在线视频| 日韩影院在线观看| 国产欧美日韩综合| 国产**成人网毛片九色| 亚洲午夜久久久久久久久电影网| 91精品国产欧美一区二区成人| 亚洲国产视频a| 国产精品人人做人人爽人人添| www.久久精品| 精东粉嫩av免费一区二区三区| 亚洲天堂免费在线观看视频| 日韩一级黄色片| 精品一区二区三区日韩| 亚洲精品在线电影| 欧美日韩aaaaaa| www.日韩在线| 国产乱子伦视频一区二区三区| 亚洲精品日韩一| 国产精品青草久久| 精品国产乱码91久久久久久网站| 99免费精品在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲免费av高清| 国产欧美一区二区精品性| 日韩亚洲欧美综合| 欧美日韩中文精品| 色欧美日韩亚洲| 国产91精品久久久久久久网曝门| 免费观看在线色综合| 午夜不卡av在线| 亚洲丰满少妇videoshd| 亚洲情趣在线观看| 国产精品美女久久久久久久久久久 | 99久久精品情趣| 偷窥国产亚洲免费视频| 一区二区三区在线免费播放| 亚洲欧洲成人精品av97| 亚洲国产精品成人综合| 日韩欧美一区二区三区在线| 久久影院电视剧免费观看| 欧美sm美女调教| 日韩免费观看高清完整版在线观看| 精品视频一区二区三区免费| 日韩午夜电影av| 日韩一区二区三区在线观看| 51精品秘密在线观看| 欧美男人的天堂一二区| 欧美日韩一区二区三区在线看| 成人免费福利片| 成人18精品视频| 色噜噜狠狠一区二区三区果冻| av毛片久久久久**hd| 色综合久久综合网欧美综合网 | 天天综合网天天综合色| 亚洲一区二区三区在线看| 亚洲夂夂婷婷色拍ww47| 丝袜诱惑制服诱惑色一区在线观看| 久久婷婷成人综合色| 国产性天天综合网| 日韩伦理免费电影| 亚洲一区在线观看免费 | 欧美美女激情18p| 日韩亚洲国产中文字幕欧美| www久久精品| 国产精品久久久久9999吃药| 亚洲精品视频免费看| 一区二区在线电影| 国产电影一区在线| 色综合天天天天做夜夜夜夜做| 欧美视频一区在线| 2023国产精品自拍| 视频一区在线视频| 国内精品伊人久久久久av一坑 | 色天使久久综合网天天|