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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dvb-dibusb-fe-i2c.c

?? h內(nèi)核
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * dvb-dibusb-fe-i2c.c is part of the driver for mobile USB Budget DVB-T devices  * based on reference design made by DiBcom (http://www.dibcom.fr/) * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) * * see dvb-dibusb-core.c for more copyright details. * * This file contains functions for attaching, initializing of an appropriate * demodulator/frontend. I2C-stuff is also located here. *  */#include "dvb-dibusb.h"#include <linux/usb.h>int dibusb_i2c_msg(struct usb_dibusb *dib, u8 addr, 		u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen){	u8 sndbuf[wlen+4]; /* lead(1) devaddr,direction(1) addr(2) data(wlen) (len(2) (when reading)) */	/* write only ? */	int wo = (rbuf == NULL || rlen == 0), 		len = 2 + wlen + (wo ? 0 : 2);		sndbuf[0] = wo ? DIBUSB_REQ_I2C_WRITE : DIBUSB_REQ_I2C_READ;	sndbuf[1] = (addr << 1) | (wo ? 0 : 1);	memcpy(&sndbuf[2],wbuf,wlen);		if (!wo) {		sndbuf[wlen+2] = (rlen >> 8) & 0xff;		sndbuf[wlen+3] = rlen & 0xff;	}		return dibusb_readwrite_usb(dib,sndbuf,len,rbuf,rlen);}/* * I2C master xfer function */static int dibusb_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msg[],int num){	struct usb_dibusb *dib = i2c_get_adapdata(adap);	int i;	if (down_interruptible(&dib->i2c_sem) < 0) 		return -EAGAIN;	if (num > 2)		warn("more than 2 i2c messages at a time is not handled yet. TODO.");		for (i = 0; i < num; i++) {		/* write/read request */		if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {			if (dibusb_i2c_msg(dib, msg[i].addr, msg[i].buf,msg[i].len,						msg[i+1].buf,msg[i+1].len) < 0)				break;			i++;		} else 			if (dibusb_i2c_msg(dib, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)				break;	}		up(&dib->i2c_sem);	return i;	}static u32 dibusb_i2c_func(struct i2c_adapter *adapter){	return I2C_FUNC_I2C;}static struct i2c_algorithm dibusb_algo = {	.name			= "DiBcom USB i2c algorithm",	.id				= I2C_ALGO_BIT,	.master_xfer	= dibusb_i2c_xfer,	.functionality	= dibusb_i2c_func,};static int dibusb_general_demod_init(struct dvb_frontend *fe);static u8 dibusb_general_pll_addr(struct dvb_frontend *fe);static int dibusb_general_pll_init(struct dvb_frontend *fe, u8 pll_buf[5]);static int dibusb_general_pll_set(struct dvb_frontend *fe, 		struct dvb_frontend_parameters* params, u8 pll_buf[5]);static struct mt352_config mt352_hanftek_umt_010_config = {	.demod_address = 0x1e,	.demod_init = dibusb_general_demod_init,   	.pll_set = dibusb_general_pll_set,};static int dibusb_tuner_quirk(struct usb_dibusb *dib) {	switch (dib->dibdev->dev_cl->id) {		case DIBUSB1_1: /* some these device have the ENV77H11D5 and some the THOMSON CABLE */		case DIBUSB1_1_AN2235: { /* actually its this device, but in warm state they are indistinguishable */			struct dibusb_tuner *t;			u8 b[2] = { 0,0 } ,b2[1];			struct i2c_msg msg[2] = {				{ .flags = 0, .buf = b, .len = 2 },				{ .flags = I2C_M_RD, .buf = b2, .len = 1},			};						t = &dibusb_tuner[DIBUSB_TUNER_COFDM_PANASONIC_ENV77H11D5];						msg[0].addr = msg[1].addr = t->pll_addr;					if (dib->xfer_ops.tuner_pass_ctrl != NULL)				dib->xfer_ops.tuner_pass_ctrl(dib->fe,1,t->pll_addr);			dibusb_i2c_xfer(&dib->i2c_adap,msg,2);			if (dib->xfer_ops.tuner_pass_ctrl != NULL)				dib->xfer_ops.tuner_pass_ctrl(dib->fe,0,t->pll_addr);			if (b2[0] == 0xfe)				info("this device has the Thomson Cable onboard. Which is default.");			else {				dib->tuner = t;				info("this device has the Panasonic ENV77H11D5 onboard.");			}			break;			}		default:			break;	}	return 0;}/* there is a ugly pid_filter in the firmware of the umt devices, it is accessible  * by i2c address 0x8. Don't know how to deactivate it and how many rows it has. */static int dibusb_umt_pid_control(struct dvb_frontend *fe, int index, int pid, int onoff){	struct usb_dibusb *dib = fe->dvb->priv;	u8 b[3];	b[0] = index;	if (onoff) {		b[1] = (pid >> 8) & 0xff;		b[2] = pid & 0xff;	} else {		b[1] = 0;		b[2] = 0;	}	dibusb_i2c_msg(dib, 0x8, b, 3, NULL,0);	dibusb_set_streaming_mode(dib,0);	dibusb_set_streaming_mode(dib,1);	return 0;}int dibusb_fe_init(struct usb_dibusb* dib){	struct dib3000_config demod_cfg;	int i;		if (dib->init_state & DIBUSB_STATE_I2C) { 		for (i = 0; i < sizeof(dib->dibdev->dev_cl->demod->i2c_addrs) / sizeof(unsigned char) && 				dib->dibdev->dev_cl->demod->i2c_addrs[i] != 0; i++) {			demod_cfg.demod_address = dib->dibdev->dev_cl->demod->i2c_addrs[i];			demod_cfg.pll_addr = dibusb_general_pll_addr;			demod_cfg.pll_set = dibusb_general_pll_set;			demod_cfg.pll_init = dibusb_general_pll_init;			switch (dib->dibdev->dev_cl->demod->id) {				case DIBUSB_DIB3000MB:					dib->fe = dib3000mb_attach(&demod_cfg,&dib->i2c_adap,&dib->xfer_ops);				break;				case DIBUSB_DIB3000MC:					dib->fe = dib3000mc_attach(&demod_cfg,&dib->i2c_adap,&dib->xfer_ops);				break;				case DIBUSB_MT352:					mt352_hanftek_umt_010_config.demod_address = dib->dibdev->dev_cl->demod->i2c_addrs[i];					dib->fe = mt352_attach(&mt352_hanftek_umt_010_config, &dib->i2c_adap);					dib->xfer_ops.pid_ctrl = dibusb_umt_pid_control;				break;			}			if (dib->fe != NULL) {				info("found demodulator at i2c address 0x%x",dib->dibdev->dev_cl->demod->i2c_addrs[i]);				break;			}		}		if (dib->fe->ops->sleep != NULL)			dib->fe_sleep = dib->fe->ops->sleep;		dib->fe->ops->sleep = dibusb_hw_sleep;		if (dib->fe->ops->init != NULL ) 			dib->fe_init = dib->fe->ops->init;		dib->fe->ops->init = dibusb_hw_wakeup;			/* setting the default tuner */ 		dib->tuner = dib->dibdev->dev_cl->tuner;		/* check which tuner is mounted on this device, in case this is unsure */		dibusb_tuner_quirk(dib);	}	if (dib->fe == NULL) {		err("A frontend driver was not found for device '%s'.",		       dib->dibdev->name);		return -ENODEV;	} else {		if (dvb_register_frontend(dib->adapter, dib->fe)) {			err("Frontend registration failed.");			if (dib->fe->ops->release)				dib->fe->ops->release(dib->fe);			dib->fe = NULL;			return -ENODEV;		}	}	return 0;}int dibusb_fe_exit(struct usb_dibusb *dib){	if (dib->fe != NULL)		dvb_unregister_frontend(dib->fe);	return 0;}int dibusb_i2c_init(struct usb_dibusb *dib){	int ret = 0;	dib->adapter->priv = dib;	strncpy(dib->i2c_adap.name,dib->dibdev->name,I2C_NAME_SIZE);#ifdef I2C_ADAP_CLASS_TV_DIGITAL	dib->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL,#else	dib->i2c_adap.class = I2C_CLASS_TV_DIGITAL,#endif	dib->i2c_adap.algo 		= &dibusb_algo;	dib->i2c_adap.algo_data = NULL;	dib->i2c_adap.id		= I2C_ALGO_BIT;		i2c_set_adapdata(&dib->i2c_adap, dib);		if ((ret = i2c_add_adapter(&dib->i2c_adap)) < 0)		err("could not add i2c adapter");		dib->init_state |= DIBUSB_STATE_I2C;	return ret;}int dibusb_i2c_exit(struct usb_dibusb *dib){	if (dib->init_state & DIBUSB_STATE_I2C)		i2c_del_adapter(&dib->i2c_adap);	dib->init_state &= ~DIBUSB_STATE_I2C;	return 0;}/* pll stuff, maybe removed soon (thx to Gerd/Andrew in advance) */static int thomson_cable_eu_pll_set(struct dvb_frontend_parameters *fep, u8 pllbuf[4]){	u32 tfreq = (fep->frequency + 36125000) / 62500;	int vu,p0,p1,p2;	if (fep->frequency > 403250000)		vu = 1, p2 = 1, p1 = 0, p0 = 1;	else if (fep->frequency > 115750000)		vu = 0, p2 = 1, p1 = 1, p0 = 0;	else if (fep->frequency > 44250000)		vu = 0, p2 = 0, p1 = 1, p0 = 1;	else		return -EINVAL;	pllbuf[0] = (tfreq >> 8) & 0x7f;	pllbuf[1] = tfreq & 0xff;   	pllbuf[2] = 0x8e;   	pllbuf[3] = (vu << 7) | (p2 << 2) | (p1 << 1) | p0;	return 0;}static int panasonic_cofdm_env57h1xd5_pll_set(struct dvb_frontend_parameters *fep, u8 pllbuf[4]){	u32 freq = fep->frequency;	u32 tfreq = ((freq + 36125000)*6 + 500000) / 1000000;	u8 TA, T210, R210, ctrl1, cp210, p4321;	if (freq > 858000000) {		err("frequency cannot be larger than 858 MHz.");		return -EINVAL;	}		// contol data 1 : 1 | T/A=1 | T2,T1,T0 = 0,0,0 | R2,R1,R0 = 0,1,0	TA = 1;	T210 = 0;	R210 = 0x2;	ctrl1 = (1 << 7) | (TA << 6) | (T210 << 3) | R210;// ********    CHARGE PUMP CONFIG vs RF FREQUENCIES     *****************	if (freq < 470000000) 		cp210 = 2;  // VHF Low and High band ch E12 to E4 to E12	else if (freq < 526000000) 		cp210 = 4;  // UHF band Ch E21 to E27	else // if (freq < 862000000) 		cp210 = 5;  // UHF band ch E28 to E69//*********************    BW select  *******************************	if (freq < 153000000) 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久久久久久| 精品一区二区久久| 九九国产精品视频| 日韩免费电影一区| 国产999精品久久| 国产农村妇女毛片精品久久麻豆 | av毛片久久久久**hd| 亚洲丰满少妇videoshd| 日韩美女一区二区三区四区| 成人一区二区三区中文字幕| 一区二区三区在线视频观看58| 日韩欧美专区在线| 不卡在线观看av| 日本不卡123| 亚洲国产三级在线| 中文字幕的久久| 精品剧情v国产在线观看在线| 国产成人av资源| 麻豆久久一区二区| 日韩av午夜在线观看| 中文字幕亚洲精品在线观看| 欧美一区二区久久| 欧美巨大另类极品videosbest| 国产成人在线观看免费网站| 老司机精品视频线观看86 | 久久亚洲春色中文字幕久久久| 在线视频国内一区二区| 成人18精品视频| 99精品视频免费在线观看| 国产大陆亚洲精品国产| 国内精品第一页| 国产激情一区二区三区四区| 黄色日韩三级电影| 懂色一区二区三区免费观看| 国产精品综合视频| 成人永久aaa| 色综合久久综合中文综合网| 在线视频欧美区| 在线不卡中文字幕播放| 制服丝袜亚洲色图| 日韩欧美www| 国产精品无人区| 亚洲精品老司机| 久热成人在线视频| 成人午夜免费视频| 欧美酷刑日本凌虐凌虐| 日韩欧美黄色影院| 亚洲美女一区二区三区| 午夜天堂影视香蕉久久| 韩国中文字幕2020精品| 欧美裸体bbwbbwbbw| 2020国产精品久久精品美国| 国产精品家庭影院| 日本亚洲欧美天堂免费| 成人精品gif动图一区| 欧美成人精精品一区二区频| 亚洲国产精华液网站w| 日韩国产欧美在线观看| 91亚洲精华国产精华精华液| 日韩精品在线一区二区| 午夜视频一区在线观看| 色哟哟日韩精品| 国产精品久久久久一区二区三区| 久久黄色级2电影| 538在线一区二区精品国产| 亚洲色图视频免费播放| 99久久精品国产导航| 久久亚洲免费视频| 国产最新精品精品你懂的| 91麻豆精品国产91久久久久| 亚洲妇熟xx妇色黄| 日韩一级免费观看| 久久99精品国产麻豆婷婷洗澡| 在线播放一区二区三区| 日韩专区欧美专区| 精品日韩欧美在线| 国产成人自拍在线| 亚洲色图视频网| 欧美色中文字幕| 日本美女一区二区三区| 欧美不卡在线视频| 成人av电影免费在线播放| 亚洲黄色免费电影| 欧美精品v日韩精品v韩国精品v| 日本一不卡视频| 国产女人水真多18毛片18精品视频| 99视频一区二区三区| 亚洲成av人片www| 久久精品一区蜜桃臀影院| 一本一道久久a久久精品| 国产精品综合视频| 亚洲一区二区三区自拍| 欧美一区二区视频在线观看| 国产在线一区二区| 亚洲国产综合色| 精品国产乱子伦一区| 色偷偷成人一区二区三区91| 天堂在线亚洲视频| 亚洲人成网站色在线观看| 欧美一区二区三区男人的天堂| 懂色一区二区三区免费观看| 午夜精品久久久| 成人欧美一区二区三区在线播放| 91麻豆精品国产91| 在线一区二区三区四区五区| 国产成人av一区二区三区在线观看| 亚洲国产精品久久久久秋霞影院 | 精品伊人久久久久7777人| 国产精品灌醉下药二区| 国产亚洲女人久久久久毛片| 555www色欧美视频| 精品少妇一区二区三区免费观看| 欧美亚洲禁片免费| 51精品秘密在线观看| 欧美三级在线播放| 91麻豆精品国产91久久久久久久久 | 欧美老人xxxx18| 6080午夜不卡| 久久香蕉国产线看观看99| 91精品国产麻豆国产自产在线 | 97精品电影院| 国产自产高清不卡| 美女任你摸久久| 亚洲狠狠爱一区二区三区| 一区二区三区精密机械公司| 国产精品素人视频| 久久精品欧美一区二区三区麻豆| 精品少妇一区二区三区在线视频 | 亚洲男人的天堂在线观看| 国产欧美一区二区精品久导航| 成人国产免费视频| 91传媒视频在线播放| 欧美日韩三级视频| www精品美女久久久tv| 国产亚洲精品福利| 国产精品国产三级国产有无不卡| 国产精品久久久久aaaa樱花| 亚洲欧洲成人av每日更新| 亚洲图片欧美一区| 国产一区二区三区四区在线观看| 成人精品国产一区二区4080| 色香蕉成人二区免费| 欧美一二三区在线观看| 久久嫩草精品久久久精品| 怡红院av一区二区三区| 麻豆91在线观看| 在线影视一区二区三区| 精品国产91久久久久久久妲己| 中文字幕不卡的av| 奇米四色…亚洲| 在线欧美一区二区| 久久青草国产手机看片福利盒子| 中文字幕第一区综合| 麻豆精品久久精品色综合| 国产成人鲁色资源国产91色综| 99视频在线观看一区三区| 欧美一区二区三区播放老司机| 亚洲视频精选在线| 六月丁香综合在线视频| 欧美日韩一区二区三区视频| 国产精品久久久久久久久动漫| 天堂成人免费av电影一区| 在线观看av一区二区| 欧美激情一区在线| 成人黄色国产精品网站大全在线免费观看| 在线成人午夜影院| 日韩国产成人精品| 欧美精品精品一区| 亚洲国产精品久久久久秋霞影院 | 久久久亚洲综合| 狠狠色狠狠色综合| 成人欧美一区二区三区1314| 欧洲av一区二区嗯嗯嗯啊| 亚洲女女做受ⅹxx高潮| 欧美性三三影院| 麻豆视频一区二区| 国产精品传媒入口麻豆| 懂色av一区二区夜夜嗨| 亚洲精品国产精品乱码不99| 91麻豆swag| 亚洲精品免费电影| 欧美绝品在线观看成人午夜影视| 日韩精品欧美精品| 26uuu色噜噜精品一区| 成人av中文字幕| 日韩电影一区二区三区| 欧美区一区二区三区| 国产在线播放一区三区四| 亚洲欧洲综合另类在线| 欧美高清视频一二三区 | 久久久久亚洲蜜桃| 欧美在线综合视频| 成人在线一区二区三区| 日韩国产高清影视| 一区二区三区欧美日| 日韩欧美成人午夜| 欧美丰满少妇xxxbbb| 成人一级片网址| 国产一区二区导航在线播放| 亚洲午夜免费电影|