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

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

?? cx24110.c

?? linux數字電視播放器,比先的版本高一些.
?? C
?? 第 1 頁 / 共 2 頁
字號:
           /* set AcqVitDis bit */           if(rate[fec]>0) {              cx24110_writereg(i2c,0x05,(cx24110_readreg(i2c,0x05)&0xf0)|rate[fec]);              /* set nominal Viterbi rate */              cx24110_writereg(i2c,0x22,(cx24110_readreg(i2c,0x22)&0xf0)|rate[fec]);              /* set current Viterbi rate */              cx24110_writereg(i2c,0x1a,g1[fec]);              cx24110_writereg(i2c,0x1b,g2[fec]);              /* not sure if this is the right way: I always used AutoAcq mode */           } else return -ENOTSUPP;/* fixme (low): which is the correct return code? */        };	return 0;}staticfe_code_rate_t cx24110_get_fec (struct dvb_i2c_bus *i2c){	int i;	i=cx24110_readreg(i2c,0x22)&0x0f;	if(!(i&0x08)) {	   return FEC_1_2 + i - 1;	} else {/* fixme (low): a special code rate has been selected. In theory, we need to   return a denominator value, a numerator value, and a pair of puncture   maps to correctly describe this mode. But this should never happen in   practice, because it cannot be set by cx24110_get_fec. */	   return FEC_NONE;	}}staticint cx24110_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate){/* fixme (low): add error handling */        u32 ratio;        u32 tmp, fclk, BDRI;        static const u32 bands[]={5000000UL,15000000UL,90999000UL/2};        static const u32 vca[]={0x80f03800,0x81f0f800,0x83f1f800};        static const u32 vga[]={0x5f8fc000,0x580f0000,0x500c0000};        static const u8  filtune[]={0xa2,0xcc,0x66};        int i;dprintk("cx24110 debug: entering %s(%d)\n",__FUNCTION__,srate);        if (srate>90999000UL/2)                srate=90999000UL/2;        if (srate<500000)                srate=500000;        for(i=0;(i<sizeof(bands)/sizeof(bands[0]))&&(srate>bands[i]);i++);        /* first, check which sample rate is appropriate: 45, 60 80 or 90 MHz,           and set the PLL accordingly (R07[1:0] Fclk, R06[7:4] PLLmult,           R06[3:0] PLLphaseDetGain */        tmp=cx24110_readreg(i2c,0x07)&0xfc;        if(srate<90999000UL/4) { /* sample rate 45MHz*/           cx24110_writereg(i2c,0x07,tmp);           cx24110_writereg(i2c,0x06,0x78);           fclk=90999000UL/2;        } else if(srate<60666000UL/2) { /* sample rate 60MHz */           cx24110_writereg(i2c,0x07,tmp|0x1);           cx24110_writereg(i2c,0x06,0xa5);           fclk=60666000UL;        } else if(srate<80888000UL/2) { /* sample rate 80MHz */           cx24110_writereg(i2c,0x07,tmp|0x2);           cx24110_writereg(i2c,0x06,0x87);           fclk=80888000UL;        } else { /* sample rate 90MHz */           cx24110_writereg(i2c,0x07,tmp|0x3);           cx24110_writereg(i2c,0x06,0x78);           fclk=90999000UL;        };        dprintk("cx24110 debug: fclk %d Hz\n",fclk);        /* we need to divide two integers with approx. 27 bits in 32 bit           arithmetic giving a 25 bit result */        /* the maximum dividend is 90999000/2, 0x02b6446c, this number is           also the most complex divisor. Hence, the dividend has,           assuming 32bit unsigned arithmetic, 6 clear bits on top, the            divisor 2 unused bits at the bottom. Also, the quotient is           always less than 1/2. Borrowed from VES1893.c, of course */        tmp=srate<<6;        BDRI=fclk>>2;        ratio=(tmp/BDRI);                tmp=(tmp%BDRI)<<8;        ratio=(ratio<<8)+(tmp/BDRI);                tmp=(tmp%BDRI)<<8;        ratio=(ratio<<8)+(tmp/BDRI);        tmp=(tmp%BDRI)<<1;        ratio=(ratio<<1)+(tmp/BDRI);                dprintk("srate= %d (range %d, up to %d)\n", srate,i,bands[i]);        dprintk("fclk = %d\n", fclk);        dprintk("ratio= %08x\n", ratio);        cx24110_writereg(i2c, 0x1, (ratio>>16)&0xff);        cx24110_writereg(i2c, 0x2, (ratio>>8)&0xff);        cx24110_writereg(i2c, 0x3, (ratio)&0xff);        /* please see the cx24108 data sheet, this controls tuner gain            and bandwidth settings depending on the symbol rate */        cx24108_write(i2c,vga[i]);        cx24108_write(i2c,vca[i]); /* gain is set on tuner chip */        cx24110_writereg(i2c,0x56,filtune[i]); /* bw is contolled by filtune voltage */                return 0;}staticint cx24110_set_voltage (struct dvb_i2c_bus *i2c, fe_sec_voltage_t voltage){	switch (voltage) {	case SEC_VOLTAGE_13:           return cx24110_writereg(i2c,0x76,(cx24110_readreg(i2c,0x76)&0x3b)|0xc0);	case SEC_VOLTAGE_18:           return cx24110_writereg(i2c,0x76,(cx24110_readreg(i2c,0x76)&0x3b)|0x40);	default:		return -EINVAL;	};}staticint cx24110_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg){	struct dvb_i2c_bus *i2c = fe->i2c;	static int lastber=0, lastbyer=0,lastbler=0, lastesn0=0, sum_bler=0;                        switch (cmd) {        case FE_GET_INFO:		memcpy (arg, &cx24110_info, sizeof(struct dvb_frontend_info));		break;        case FE_READ_STATUS:	{		fe_status_t *status = arg;		int sync = cx24110_readreg (i2c, 0x55);		*status = 0;		if (sync & 0x10)			*status |= FE_HAS_SIGNAL;		if (sync & 0x08)			*status |= FE_HAS_CARRIER;		sync = cx24110_readreg (i2c, 0x08);		if (sync & 0x40)			*status |= FE_HAS_VITERBI;		if (sync & 0x20)			*status |= FE_HAS_SYNC;		if ((sync & 0x60) == 0x60)			*status |= FE_HAS_LOCK;		if(cx24110_readreg(i2c,0x10)&0x40) {		   /* the RS error counter has finished one counting window */		   cx24110_writereg(i2c,0x10,0x60); /* select the byer reg */		   lastbyer=cx24110_readreg(i2c,0x12)|                            (cx24110_readreg(i2c,0x13)<<8)|			    (cx24110_readreg(i2c,0x14)<<16);		   cx24110_writereg(i2c,0x10,0x70); /* select the bler reg */		   lastbler=cx24110_readreg(i2c,0x12)|                            (cx24110_readreg(i2c,0x13)<<8)|			    (cx24110_readreg(i2c,0x14)<<16);		   cx24110_writereg(i2c,0x10,0x20); /* start new count window */		   sum_bler += lastbler;		}				if(cx24110_readreg(i2c,0x24)&0x10) {		   /* the Viterbi error counter has finished one counting window */		   cx24110_writereg(i2c,0x24,0x04); /* select the ber reg */		   lastber=cx24110_readreg(i2c,0x25)|                           (cx24110_readreg(i2c,0x26)<<8);		   cx24110_writereg(i2c,0x24,0x04); /* start new count window */		   cx24110_writereg(i2c,0x24,0x14);		}				if(cx24110_readreg(i2c,0x6a)&0x80) {		   /* the Es/N0 error counter has finished one counting window */		   lastesn0=cx24110_readreg(i2c,0x69)|                            (cx24110_readreg(i2c,0x68)<<8);		   cx24110_writereg(i2c,0x6a,0x84); /* start new count window */		}				break;	}        case FE_READ_BER:	{		u32 *ber = (u32 *) arg;		*ber = lastber;/* fixme (maybe): value range is 16 bit. Scale? */		break;	}        case FE_READ_SIGNAL_STRENGTH:	{/* no provision in hardware. Read the frontend AGC accumulator. No idea how to scale this, but I know it is 2s complement */		u8 signal = cx24110_readreg (i2c, 0x27)+128;		*((u16*) arg) = (signal << 8) | signal;		break;	}        case FE_READ_SNR:	{/* no provision in hardware. Can be computed from the Es/N0 estimator, but I don't know how. */		*(u16*) arg = lastesn0;		break;	}	case FE_READ_UNCORRECTED_BLOCKS: 	{		*(u16*) arg = sum_bler&0xffff;		sum_bler=0;		break;	}        case FE_SET_FRONTEND:        {		struct dvb_frontend_parameters *p = arg;		cx24108_set_tv_freq (i2c, p->frequency);		cx24110_set_inversion (i2c, p->inversion);		cx24110_set_fec (i2c, p->u.qpsk.fec_inner);		cx24110_set_symbolrate (i2c, p->u.qpsk.symbol_rate);                break;        }	case FE_GET_FRONTEND:	{		struct dvb_frontend_parameters *p = arg;		s32 afc; unsigned sclk;/* cannot read back tuner settings (freq). Need to have some private storage */		sclk = cx24110_readreg (i2c, 0x07) & 0x03;/* ok, real AFC (FEDR) freq. is afc/2^24*fsamp, fsamp=45/60/80/90MHz. Need 64 bit arithmetic. Is thiss possible in the kernel? */		if (sclk==0) sclk=90999000L/2L;		else if (sclk==1) sclk=60666000L;		else if (sclk==2) sclk=80888000L;		else sclk=90999000L; 		sclk>>=8;		afc = sclk*(cx24110_readreg (i2c, 0x44)&0x1f)+		      ((sclk*cx24110_readreg (i2c, 0x45))>>8)+		      ((sclk*cx24110_readreg (i2c, 0x46))>>16);				p->frequency += afc;		p->inversion = (cx24110_readreg (i2c, 0x22) & 0x10) ? 					INVERSION_ON : INVERSION_OFF;		p->u.qpsk.fec_inner = cx24110_get_fec (i2c);		break;	}        case FE_SLEEP:/* cannot do this from the FE end. How to communicate this to the place where it can be done? */		break;         case FE_INIT:		return cx24110_init (i2c);	case FE_RESET:/* no idea what to do for this call *//* fixme (medium): fill me in */		break;			case FE_SET_TONE:		return cx24110_writereg(i2c,0x76,(cx24110_readreg(i2c,0x76)&~0x10)|((((fe_sec_tone_mode_t) arg)==SEC_TONE_ON)?0x10:0));	case FE_SET_VOLTAGE:		return cx24110_set_voltage (i2c, (fe_sec_voltage_t) arg);	default:		return -EOPNOTSUPP;        };                return 0;} staticint cx24110_attach (struct dvb_i2c_bus *i2c){	u8 sig;	sig=cx24110_readreg (i2c, 0x00);	if ( sig != 0x5a && sig != 0x69 )		return -ENODEV;	dvb_register_frontend (cx24110_ioctl, i2c, NULL, &cx24110_info);	return 0;}staticvoid cx24110_detach (struct dvb_i2c_bus *i2c){	dvb_unregister_frontend (cx24110_ioctl, i2c);}staticint __init init_cx24110 (void){	return dvb_register_i2c_device (THIS_MODULE, cx24110_attach, cx24110_detach);}static void __exit exit_cx24110 (void){	dvb_unregister_i2c_device (cx24110_attach);}module_init(init_cx24110);module_exit(exit_cx24110);MODULE_DESCRIPTION("DVB Frontend driver module for the Conexant cx24108/cx24110 chipset");MODULE_AUTHOR("Peter Hettkamp");MODULE_LICENSE("GPL");MODULE_PARM(debug,"i");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选在线播放| 自拍偷自拍亚洲精品播放| 91免费视频网| 91在线丨porny丨国产| 国产麻豆欧美日韩一区| 国模冰冰炮一区二区| 激情五月播播久久久精品| 免费欧美日韩国产三级电影| 免费成人你懂的| 狠狠v欧美v日韩v亚洲ⅴ| 久久电影网站中文字幕| 精品午夜久久福利影院| 国产在线视频不卡二| 激情国产一区二区| 国产精品影视在线观看| 国产精品538一区二区在线| 国产成人综合亚洲91猫咪| 高清不卡一二三区| 91麻豆国产在线观看| 91久久久免费一区二区| 在线不卡免费av| 精品国产免费久久 | 国产三级精品视频| 国产嫩草影院久久久久| 综合色天天鬼久久鬼色| 亚洲国产中文字幕在线视频综合| 亚洲电影中文字幕在线观看| 美洲天堂一区二卡三卡四卡视频 | 欧美一卡二卡三卡| 久久一留热品黄| 亚洲欧美怡红院| 午夜激情久久久| 韩国av一区二区三区在线观看| 国产精品456露脸| 91久久精品一区二区二区| 欧美日韩成人在线一区| 26uuu另类欧美| 亚洲欧美日韩人成在线播放| 夜夜嗨av一区二区三区中文字幕| 午夜精品久久久久久久久久久| 国内精品国产成人国产三级粉色 | 成人高清伦理免费影院在线观看| 99在线热播精品免费| 欧美亚洲综合色| 欧美成人午夜电影| 亚洲欧美日韩中文字幕一区二区三区| 日韩精品欧美精品| 成人免费毛片嘿嘿连载视频| 欧美日韩免费高清一区色橹橹 | 日韩国产精品91| 国产成人a级片| 欧美色视频在线观看| 精品国产麻豆免费人成网站| 亚洲黄色免费电影| 国产九九视频一区二区三区| 91视频91自| 精品国产自在久精品国产| 亚洲女同ⅹxx女同tv| 麻豆一区二区99久久久久| 一本久道中文字幕精品亚洲嫩| 欧美xxxxx裸体时装秀| 亚洲久本草在线中文字幕| 极品美女销魂一区二区三区| 色一情一乱一乱一91av| 久久这里只有精品6| 偷拍日韩校园综合在线| av在线播放不卡| 久久一二三国产| 日本欧美韩国一区三区| 色婷婷国产精品| 国产欧美一区视频| 久久精品99久久久| 欧美色综合久久| 中文字幕一区二区在线观看| 久久99精品一区二区三区三区| 色综合久久中文字幕| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲成av人片在线| 91在线免费看| 国产精品美女一区二区三区| 久久成人免费电影| 7777精品伊人久久久大香线蕉最新版| 亚洲视频在线一区| 国产999精品久久| 精品国产网站在线观看| 天天色天天操综合| 91搞黄在线观看| 国产精品久久久久久一区二区三区| 免费日本视频一区| 91精品国产91久久久久久一区二区| 一区二区三区成人在线视频| av亚洲精华国产精华| 国产日韩欧美精品综合| 久草在线在线精品观看| 欧美一区二区女人| 五月激情丁香一区二区三区| 欧美在线综合视频| 一区二区三区日韩欧美精品| 色综合天天性综合| 亚洲免费观看在线视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 九色porny丨国产精品| 91麻豆精品91久久久久同性| 午夜久久久久久电影| 欧美午夜片在线看| 亚洲超丰满肉感bbw| 欧美午夜理伦三级在线观看| 一区二区理论电影在线观看| 91黄色激情网站| 亚洲一区二区av在线| 欧美综合亚洲图片综合区| 一区二区三区蜜桃| 欧美日韩黄视频| 日韩成人午夜电影| 日韩欧美高清dvd碟片| 精品一区免费av| 国产亚洲精品免费| 国产jizzjizz一区二区| 国产精品久久久久四虎| 99精品视频免费在线观看| 亚洲男人电影天堂| 欧美日韩小视频| 男男成人高潮片免费网站| 精品久久久久久无| 成人一区二区三区视频 | 成人午夜视频福利| 综合久久久久久| 欧美视频在线一区二区三区| 午夜精品123| 久久美女高清视频| caoporn国产精品| 亚洲一二三四在线观看| 欧美一区二区久久| 国产精品综合二区| 亚洲欧美日韩人成在线播放| 欧美日韩一区二区三区在线看| 麻豆久久久久久久| 国产精品久久久久久户外露出| 国产亚洲一本大道中文在线| 精品欧美乱码久久久久久1区2区 | 欧美精品一区二区久久婷婷 | 精品国产人成亚洲区| 国产一区不卡视频| 中文字幕一区免费在线观看| 欧美日韩一区 二区 三区 久久精品| 日本视频在线一区| 中文字幕欧美三区| 欧美日韩一区小说| 国产麻豆91精品| 一区二区成人在线| 2021国产精品久久精品| 色婷婷狠狠综合| 老司机精品视频在线| 中文字幕中文字幕一区二区| 欧美日韩和欧美的一区二区| 精品一区免费av| 亚洲激情自拍偷拍| 久久久久久久国产精品影院| 91官网在线免费观看| 国产一区二区中文字幕| 一区二区视频免费在线观看| www一区二区| 欧美色大人视频| 国产成人av影院| 青椒成人免费视频| 亚洲精品ww久久久久久p站| 26uuuu精品一区二区| 欧美日韩国产天堂| 成人午夜激情在线| 蜜桃视频在线一区| 亚洲国产精品影院| 中文字幕乱码久久午夜不卡 | 亚洲精品中文字幕乱码三区| 欧美电影免费观看高清完整版在线| 色综合天天综合狠狠| 国产成人精品影视| 日韩高清一级片| 亚洲综合激情网| 国产精品福利一区二区三区| 日韩精品专区在线影院观看| 在线看一区二区| 不卡欧美aaaaa| 国产高清久久久久| 理论电影国产精品| 奇米一区二区三区| 亚洲国产cao| 一区二区三区免费| 亚洲欧美成人一区二区三区| 久久久久久久一区| 在线电影欧美成精品| eeuss鲁片一区二区三区在线观看| 蜜臀a∨国产成人精品| 亚洲精品视频自拍| 国产蜜臀av在线一区二区三区| 欧美二区三区的天堂| 不卡av在线网| 国产一区二区三区香蕉| 天天操天天综合网| 夜色激情一区二区| 亚洲日本一区二区三区|