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

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

?? dvb-dibusb-fe-i2c.c

?? h內核
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * 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) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一二三| 一级日本不卡的影视| 日韩一区在线播放| 日韩av成人高清| 99re在线精品| 精品国产1区二区| 午夜精品国产更新| 91啦中文在线观看| 亚洲国产精品成人久久综合一区| 午夜精品久久久久久久99樱桃 | 91成人网在线| 久久久久久久一区| 免费成人美女在线观看.| 在线视频中文字幕一区二区| 国产精品乱人伦| 国产美女一区二区| 欧美va亚洲va香蕉在线| 日韩高清中文字幕一区| 欧美在线不卡视频| 中文字幕一区二区5566日韩| 国产精品一线二线三线| 精品日产卡一卡二卡麻豆| 五月婷婷色综合| 7777女厕盗摄久久久| 亚洲va欧美va人人爽| 欧美日韩一卡二卡三卡| 一区二区在线观看视频在线观看| 成年人国产精品| 欧美国产精品v| 成人妖精视频yjsp地址| 久久久久久久一区| 福利电影一区二区| 国产精品传媒在线| 92精品国产成人观看免费| 中文字幕在线不卡一区二区三区| 成人avav在线| 亚洲欧美二区三区| 精品视频免费在线| 美洲天堂一区二卡三卡四卡视频| 欧美日韩高清影院| 蜜桃传媒麻豆第一区在线观看| 欧美变态凌虐bdsm| 国产99久久久国产精品潘金网站| 国产午夜精品美女毛片视频| 国产69精品久久久久777| 国产精品免费丝袜| 色综合天天综合给合国产| 亚洲视频香蕉人妖| 欧美三级中文字幕在线观看| 天天操天天综合网| 337p日本欧洲亚洲大胆精品| 国产成人精品网址| 日韩美女久久久| 69堂精品视频| 国产99久久精品| 亚洲最新在线观看| 欧美成人高清电影在线| 国产91精品精华液一区二区三区 | 综合欧美一区二区三区| 欧美亚洲免费在线一区| 久久99精品一区二区三区| 中文字幕一区视频| 宅男噜噜噜66一区二区66| 国产精品影视在线| 亚洲国产中文字幕| 精品国产乱码久久久久久牛牛| 丁香激情综合国产| 爽好多水快深点欧美视频| 久久久久久麻豆| 欧美日韩国产美女| 成人蜜臀av电影| 美女视频一区在线观看| 亚洲色图一区二区三区| 日韩欧美久久一区| 色噜噜夜夜夜综合网| 韩国一区二区三区| 一区二区国产视频| 久久久国产精品麻豆| 欧美三级日韩在线| 懂色av一区二区在线播放| 日韩国产精品久久久| 亚洲欧洲日韩一区二区三区| 欧美一卡二卡三卡| 在线免费观看日本欧美| 国产成人亚洲综合a∨婷婷图片| 亚洲午夜久久久| 国产精品国产三级国产专播品爱网 | 成人晚上爱看视频| 蜜臀a∨国产成人精品| 亚洲欧美日韩一区二区三区在线观看| 日韩精品一区二区三区四区视频| 一道本成人在线| 懂色av一区二区三区免费观看| 日本视频在线一区| 亚洲一区二区av电影| 国产精品福利一区二区| 2021中文字幕一区亚洲| 欧美一区二区网站| 欧美色倩网站大全免费| 在线看不卡av| 一本久久a久久精品亚洲| 国产精品一二三| 国内精品久久久久影院一蜜桃| 日韩成人dvd| 日韩中文字幕亚洲一区二区va在线| 中文字幕一区二区三区不卡| 国产精品嫩草久久久久| 国产农村妇女毛片精品久久麻豆| 精品三级在线看| 日韩一区二区免费电影| 欧美日韩高清影院| 欧美精品欧美精品系列| 欧美三级电影精品| 欧美群妇大交群中文字幕| 欧美性三三影院| 欧美色图免费看| 欧美一级欧美三级在线观看| 在线播放91灌醉迷j高跟美女| 欧美日韩在线三区| 91.麻豆视频| 精品伦理精品一区| 国产亚洲视频系列| 中文子幕无线码一区tr| 亚洲欧洲精品一区二区三区| 国产精品久久久久毛片软件| **欧美大码日韩| 亚洲主播在线观看| 视频一区视频二区在线观看| 日本91福利区| 国产福利一区二区三区视频在线| 成a人片亚洲日本久久| 91黄视频在线| 日韩一级免费观看| 久久精品亚洲乱码伦伦中文| 国产欧美精品一区| 亚洲三级久久久| 日本少妇一区二区| 国产露脸91国语对白| 91色.com| 日韩手机在线导航| 国产欧美一区二区精品久导航| 中文字幕一区二区视频| 亚洲成a人片在线不卡一二三区 | 日韩一区二区电影| 欧美国产日韩一二三区| 亚洲午夜电影在线| 精品无码三级在线观看视频| 成人99免费视频| 91精品午夜视频| 国产精品乱子久久久久| 日韩精品免费专区| 岛国精品在线观看| 欧美一区二区视频在线观看2022| 国产精品欧美久久久久无广告| 亚洲福利国产精品| 国产成人综合网| 欧美老年两性高潮| 久久精子c满五个校花| 亚洲一区在线观看免费| 国内精品第一页| 欧美午夜理伦三级在线观看| 国产亚洲精品bt天堂精选| 午夜欧美2019年伦理| 成人av电影在线观看| 欧美成人官网二区| 亚洲成av人片在www色猫咪| 大美女一区二区三区| 欧美一区二区三区小说| 一区二区理论电影在线观看| 福利电影一区二区| 精品av久久707| 亚欧色一区w666天堂| 94色蜜桃网一区二区三区| 欧美精品一区二区三区视频 | 亚洲欧美日韩精品久久久久| 精品系列免费在线观看| 欧美日韩精品是欧美日韩精品| 国产精品久久久久久久久免费桃花 | 国产精品成人免费在线| 毛片一区二区三区| 欧美精品久久久久久久多人混战| 国产精品国产馆在线真实露脸| 极品美女销魂一区二区三区| 欧美乱妇15p| 亚洲一区二区三区自拍| 一本大道综合伊人精品热热| 日本一区二区三区dvd视频在线| 另类专区欧美蜜桃臀第一页| 欧美精品vⅰdeose4hd| 亚洲午夜在线视频| 色欧美88888久久久久久影院| 国产精品进线69影院| 成人黄色综合网站| 日本一区二区三区免费乱视频| 国产在线精品免费| 久久综合99re88久久爱| 国产尤物一区二区在线| 久久这里都是精品| 国产精品一二三四五| 日本一区二区三区在线观看|