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

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

?? cx24110.c

?? linux TV 源碼
?? 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一区二区三区免费野_久草精品视频
日韩精品久久久久久| 在线免费一区三区| 在线精品亚洲一区二区不卡| 日韩一区和二区| 亚洲在线一区二区三区| 成人深夜在线观看| 日韩欧美国产一区二区三区 | 久久精子c满五个校花| 亚洲国产wwwccc36天堂| 北岛玲一区二区三区四区| 精品久久人人做人人爱| 日日摸夜夜添夜夜添亚洲女人| 97久久精品人人做人人爽50路| 精品福利一二区| 日本中文一区二区三区| 欧美午夜精品一区| 亚洲欧美另类综合偷拍| 国产成人av电影在线播放| 精品久久久久久最新网址| 亚洲一级二级在线| 在线视频欧美区| 亚洲自拍偷拍图区| 在线视频综合导航| 一区二区三区在线播| 色综合久久综合网欧美综合网 | 成人高清av在线| 国产丝袜欧美中文另类| 国产成人精品亚洲日本在线桃色| 欧美不卡一二三| 国产一区日韩二区欧美三区| 日韩精品一区二区三区在线| 精品无人区卡一卡二卡三乱码免费卡| 制服丝袜成人动漫| 日本午夜精品视频在线观看| 911精品产国品一二三产区| 亚洲一区二区三区四区在线观看| 91丨porny丨户外露出| 亚洲免费视频成人| 欧美午夜精品一区二区蜜桃 | 亚洲蜜臀av乱码久久精品| 色视频一区二区| 日韩一区欧美二区| 精品久久久久久久一区二区蜜臀| 国产一区二区福利| 亚洲欧洲韩国日本视频| 在线视频一区二区免费| 日韩经典中文字幕一区| 日韩一区二区三区高清免费看看| 狠狠色丁香久久婷婷综合_中| 久久精品人人做人人爽97| 99re这里只有精品视频首页| 一区二区成人在线| 日韩一级完整毛片| 国产成人亚洲精品狼色在线 | 国产精品色一区二区三区| av电影在线观看完整版一区二区| 亚洲私人黄色宅男| 69堂精品视频| 粉嫩欧美一区二区三区高清影视| 亚洲色图在线播放| 91麻豆精品国产自产在线| 国产精品自拍一区| 亚洲欧美一区二区三区极速播放| 欧美日韩www| 成人免费三级在线| 婷婷中文字幕综合| 国产精品色眯眯| 日韩一区二区在线观看视频| 成人一级黄色片| 日本美女一区二区| 一区二区三区四区av| 欧美videossexotv100| 91麻豆国产自产在线观看| 久久精品国产亚洲一区二区三区| 综合久久久久久| 日韩精品最新网址| 在线欧美日韩国产| 成人av在线播放网站| 美国十次了思思久久精品导航| 亚洲欧美在线另类| 精品国产凹凸成av人导航| 在线视频中文字幕一区二区| 国产成人免费xxxxxxxx| 蜜桃久久精品一区二区| 亚洲精品免费播放| 日本一区二区视频在线| 欧美电视剧在线观看完整版| 欧美性色综合网| 成人白浆超碰人人人人| 精品一区二区三区视频| 首页国产欧美久久| 一区二区三国产精华液| 国产精品免费看片| 久久久不卡网国产精品二区| 日韩精品中文字幕在线一区| 欧美美女一区二区| 欧洲精品一区二区| 一本到一区二区三区| bt7086福利一区国产| 国产一区二区三区av电影| 奇米一区二区三区av| 婷婷成人激情在线网| 亚洲一区av在线| 亚洲国产日韩精品| 亚洲成人第一页| 一区二区三区在线视频观看| 国产精品久久毛片a| 中文字幕av不卡| 国产精品网站在线播放| 久久久久久久久久久久电影| 日韩欧美中文字幕制服| 日韩亚洲欧美一区二区三区| 91精品国产高清一区二区三区| 欧美日本乱大交xxxxx| 欧美日本一道本| 在线不卡一区二区| 欧美一区二区三区不卡| 欧美一级淫片007| 国产精品久99| 中文乱码免费一区二区 | 日韩精品一区二区三区swag| 日韩三级视频在线看| 欧美mv日韩mv国产网站| ww久久中文字幕| 日本一区二区三区高清不卡| 中文成人av在线| 亚洲乱码国产乱码精品精的特点| 亚洲人吸女人奶水| 亚洲国产综合视频在线观看| 丝袜美腿亚洲一区| 激情偷乱视频一区二区三区| 国产成人免费在线| 在线看国产一区| 日韩一区二区电影| 国产精品久久久久久久午夜片| 日韩久久一区二区| 视频一区在线视频| 国产麻豆精品视频| 色婷婷综合久久| 日韩小视频在线观看专区| 欧美激情综合网| 亚洲地区一二三色| 激情综合亚洲精品| 91亚洲国产成人精品一区二三| 91精品国产综合久久小美女| 精品国产sm最大网站| 亚洲激情自拍偷拍| 久久成人久久爱| av亚洲精华国产精华精华| 欧美军同video69gay| 欧美激情一区三区| 视频精品一区二区| 成年人国产精品| 日韩精品一区二区三区蜜臀| 国产精品成人免费在线| 三级久久三级久久| 成人精品高清在线| 日韩一区二区三区高清免费看看| 国产精品九色蝌蚪自拍| 美女视频一区二区三区| 一本色道久久综合狠狠躁的推荐| 欧美tickling网站挠脚心| 一区二区三区四区蜜桃| 精品综合免费视频观看| 欧美日韩1234| 中文字幕五月欧美| 国产一区欧美一区| 日韩一区二区免费高清| 亚洲一区在线观看免费| 成年人国产精品| 久久久久久亚洲综合影院红桃| 一区二区三区免费网站| 成人一区二区三区视频在线观看 | 韩国中文字幕2020精品| 欧美日韩一区二区三区免费看| 亚洲国产精品成人综合色在线婷婷 | 青青草国产成人av片免费| 91啪九色porn原创视频在线观看| 欧美成人一区二区三区| 亚洲va欧美va人人爽| 91女神在线视频| 中文字幕在线观看一区| 国产传媒日韩欧美成人| 精品国产一区久久| 男人的j进女人的j一区| 欧洲精品中文字幕| 亚洲一区二区免费视频| 色系网站成人免费| 成人免费一区二区三区视频| 成人一区二区三区视频| 国产日韩欧美精品在线| 国产激情视频一区二区三区欧美 | 91成人免费网站| 亚洲欧美激情在线| 91丝袜美腿高跟国产极品老师 | 国产欧美一区视频| 国产精品主播直播| 精品国产电影一区二区| 国产一区二区久久| 国产三级一区二区|