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

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

?? cx24110.c

?? linux數字電視播放器,比先的版本高一些.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*     cx24110 - Single Chip Satellite Channel Receiver driver module               used on the the Pinnacle PCTV Sat cards    Copyright (C) 2002 Peter Hettkamp <peter.hettkamp@t-online.de> based on    work    Copyright (C) 1999 Convergence Integrated Media GmbH <ralph@convergence.de>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/    /* currently drives the Conexant cx24110 and cx24106 QPSK decoder chips,    connected via i2c to a Conexant Fusion 878 (this uses the standard   linux bttv driver). The tuner chip is supposed to be the Conexant   cx24108 digital satellite tuner, driven through the tuner interface   of the cx24110. SEC is also supplied by the cx24110.      Oct-2002: Migrate to API V3 (formerly known as NEWSTRUCT)*/#include <linux/module.h>#include <linux/init.h>#include "compat.h"#include "dvb_frontend.h"static int debug = 0;#define dprintk	if (debug) printkstaticstruct dvb_frontend_info cx24110_info = {	name: "Conexant CX24110 with CX24108 tuner, aka HM1221/HM1811",	type: FE_QPSK,	frequency_min: 950000,	frequency_max: 2150000,	frequency_stepsize: 1011,           /* kHz for QPSK frontends, can be reduced to 253kHz on the cx24108 tuner */	frequency_tolerance: 29500,	symbol_rate_min: 1000000,	symbol_rate_max: 45000000,/*      symbol_rate_tolerance: ???,*/	notifier_delay: 50,                /* 1/20 s */	caps:   FE_CAN_INVERSION_AUTO |		FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |		FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |		FE_CAN_QPSK | 		FE_CAN_CLEAN_SETUP};/* fixme: are these values correct? especially ..._tolerance and caps */staticstruct {u8 reg; u8 data;} cx24110_regdata[]=                      /* Comments beginning with @ denote this value should                         be the default */        {{0x09,0x01}, /* SoftResetAll */         {0x09,0x00}, /* release reset */         {0x01,0xe8}, /* MSB of code rate 27.5MS/s */         {0x02,0x17}, /* middle byte " */         {0x03,0x29}, /* LSB         " */         {0x05,0x03}, /* @ DVB mode, standard code rate 3/4 */         {0x06,0xa5}, /* @ PLL 60MHz */         {0x07,0x01}, /* @ Fclk, i.e. sampling clock, 60MHz */         {0x0a,0x00}, /* @ partial chip disables, do not set */         {0x0b,0x01}, /* set output clock in gapped mode, start signal low                         active for first byte */         {0x0c,0x11}, /* no parity bytes, large hold time, serial data out */         {0x0d,0x6f}, /* @ RS Sync/Unsync thresholds */         {0x10,0x40}, /* chip doc is misleading here: write bit 6 as 1                         to avoid starting the BER counter. Reset the                          CRC test bit. Finite counting selected */         {0x15,0xff}, /* @ size of the limited time window for RS BER                         estimation. It is <value>*256 RS blocks, this                         gives approx. 2.6 sec at 27.5MS/s, rate 3/4 */         {0x16,0x00}, /* @ enable all RS output ports */         {0x17,0x04}, /* @ time window allowed for the RS to sync */         {0x18,0xae}, /* @ allow all standard DVB code rates to be scanned                         for automatically */                      /* leave the current code rate and normalization                         registers as they are after reset... */         {0x21,0x10}, /* @ during AutoAcq, search each viterbi setting                         only once */         {0x23,0x18}, /* @ size of the limited time window for Viterbi BER                               estimation. It is <value>*65536 channel bits, i.e.                         approx. 38ms at 27.5MS/s, rate 3/4 */         {0x24,0x24}, /* do not trigger Viterbi CRC test. Finite count window */                      /* leave front-end AGC parameters at default values */                      /* leave decimation AGC parameters at default values */         {0x35,0x40}, /* disable all interrupts. They are not connected anyway */         {0x36,0xff}, /* clear all interrupt pending flags */         {0x37,0x00}, /* @ fully enable AutoAcqq state machine */         {0x38,0x07}, /* @ enable fade recovery, but not autostart AutoAcq */                      /* leave the equalizer parameters on their default values */                      /* leave the final AGC parameters on their default values */         {0x41,0x00}, /* @ MSB of front-end derotator frequency */         {0x42,0x00}, /* @ middle bytes " */         {0x43,0x00}, /* @ LSB          " */                      /* leave the carrier tracking loop parameters on default */                      /* leave the bit timing loop parameters at gefault */         {0x56,0x4d}, /* set the filtune voltage to 2.7V, as recommended by */                      /* the cx24108 data sheet for symbol rates above 15MS/s */         {0x57,0x00}, /* @ Filter sigma delta enabled, positive */         {0x61,0x95}, /* GPIO pins 1-4 have special function */         {0x62,0x05}, /* GPIO pin 5 has special function, pin 6 is GPIO */         {0x63,0x00}, /* All GPIO pins use CMOS output characteristics */         {0x64,0x20}, /* GPIO 6 is input, all others are outputs */         {0x6d,0x30}, /* tuner auto mode clock freq 62kHz */         {0x70,0x15}, /* use auto mode, tuner word is 21 bits long */         {0x73,0x00}, /* @ disable several demod bypasses */         {0x74,0x00}, /* @  " */         {0x75,0x00}  /* @  " */                      /* the remaining registers are for SEC */	};staticint cx24110_writereg (struct dvb_i2c_bus *i2c, int reg, int data){        u8 buf [] = { reg, data };	struct i2c_msg msg = { addr: 0x55, flags: 0, buf: buf, len: 2 };/* fixme (medium): HW allows any i2c address. 0x55 is the default, but the   cx24110 might show up at any address */ 	int err;        if ((err = i2c->xfer (i2c, &msg, 1)) != 1) {		dprintk ("%s: writereg error (err == %i, reg == 0x%02x, data == 0x%02x)\n", __FUNCTION__, err, reg, data);		return -EREMOTEIO;	}        return 0;}staticu8 cx24110_readreg (struct dvb_i2c_bus *i2c, u8 reg){	int ret;	u8 b0 [] = { reg };	u8 b1 [] = { 0 };	struct i2c_msg msg [] = { { addr: 0x55, flags: 0, buf: b0, len: 1 },			   { addr: 0x55, flags: I2C_M_RD, buf: b1, len: 1 } };/* fixme (medium): address might be different from 0x55 */	ret = i2c->xfer (i2c, msg, 2);	if (ret != 2)		dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret);	return b1[0];}staticint cx24108_write (struct dvb_i2c_bus *i2c, u32 data){/* tuner data is 21 bits long, must be left-aligned in data *//* tuner cx24108 is written through a dedicated 3wire interface on the demod chip *//* fixme (low): add error handling, avoid infinite loops if HW fails... */dprintk("cx24110 debug: cx24108_write(%8.8x)\n",data);        cx24110_writereg(i2c,0x6d,0x30); /* auto mode at 62kHz */        cx24110_writereg(i2c,0x70,0x15); /* auto mode 21 bits */        /* if the auto tuner writer is still busy, clear it out */        while(cx24110_readreg(i2c,0x6d)&0x80) cx24110_writereg(i2c,0x72,0);        /* write the topmost 8 bits */        cx24110_writereg(i2c,0x72,(data>>24)&0xff);        /* wait for the send to be completed */        while((cx24110_readreg(i2c,0x6d)&0xc0)==0x80);        /* send another 8 bytes */        cx24110_writereg(i2c,0x72,(data>>16)&0xff);        while((cx24110_readreg(i2c,0x6d)&0xc0)==0x80);        /* and the topmost 5 bits of this byte */        cx24110_writereg(i2c,0x72,(data>>8)&0xff);        while((cx24110_readreg(i2c,0x6d)&0xc0)==0x80);        /* now strobe the enable line once */        cx24110_writereg(i2c,0x6d,0x32);        cx24110_writereg(i2c,0x6d,0x30);                return 0;}staticint cx24108_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq){/* fixme (low): error handling */        int i, a, n, pump;         u32 band, pll;                static const u32 osci[]={ 950000,1019000,1075000,1178000,			         1296000,1432000,1576000,1718000,				 1856000,2036000,2150000};        static const u32 bandsel[]={0,0x00020000,0x00040000,0x00100800,				      0x00101000,0x00102000,0x00104000,				      0x00108000,0x00110000,0x00120000,				      0x00140000};                   #define XTAL 1011100 /* Hz, really 1.0111 MHz and a /10 prescaler */        dprintk("cx24110 debug: cx24108_set_tv_freq, freq=%d\n",freq);                freq/=1000; /* change units to kHz */        if(freq<950000) freq=950000; /* kHz */        if(freq>2150000) freq=2150000; /* satellite IF is 950..2150MHz */        /* decide which VCO to use for the input frequency */        for(i=1;(i<sizeof(osci)/sizeof(osci[0]))&&(osci[i]<freq);i++);        dprintk("cx24110 debug: select vco #%d (f=%d)\n",i,freq);        band=bandsel[i];        /* the gain values must be set by SetSymbolrate */        /* compute the pll divider needed, from Conexant data sheet,           resolved for (n*32+a), remember f(vco) is f(receive) *2 or *4,           depending on the divider bit. It is set to /4 on the 2 lowest            bands  */        n=((i<=2?2:1)*freq*10L)/(XTAL/100);        a=n%32; n/=32; if(a==0) n--;        pump=(freq<(osci[i-1]+osci[i])/2);        pll=0xf8000000|            ((pump?1:2)<<(14+11))|            ((n&0x1ff)<<(5+11))|            ((a&0x1f)<<11);        /* everything is shifted left 11 bits to left-align the bits in the           32bit word. Output to the tuner goes MSB-aligned, after all */        dprintk("cx24110 debug: pump=%d, n=%d, a=%d\n",pump,n,a);        cx24108_write(i2c,band);        /* set vga and vca to their widest-band settings, as a precaution.           SetSymbolrate might not be called to set this up */        cx24108_write(i2c,0x500c0000);        cx24108_write(i2c,0x83f1f800);        cx24108_write(i2c,pll);        cx24110_writereg(i2c,0x56,0x7f);/* fixme (low): tuner pll lock can be monitored on GPIO pin 4 of cx24110 */        return 0;}staticint cx24110_init (struct dvb_i2c_bus *i2c){/* fixme (low): error handling */        int i;        	dprintk("%s: init chip\n", __FUNCTION__);        for(i=0;i<sizeof(cx24110_regdata)/sizeof(cx24110_regdata[0]);i++) {           cx24110_writereg(i2c,cx24110_regdata[i].reg,cx24110_regdata[i].data);        };	return 0;}staticint cx24110_set_inversion (struct dvb_i2c_bus *i2c, fe_spectral_inversion_t inversion){/* fixme (low): error handling */	switch (inversion) {	case INVERSION_OFF:                cx24110_writereg(i2c,0x37,cx24110_readreg(i2c,0x37)|0x1);                /* AcqSpectrInvDis on. No idea why someone should want this */                cx24110_writereg(i2c,0x5,cx24110_readreg(i2c,0x5)&0xf7);                /* Initial value 0 at start of acq */                cx24110_writereg(i2c,0x22,cx24110_readreg(i2c,0x22)&0xef);                /* current value 0 */                /* The cx24110 manual tells us this reg is read-only.                   But what the heck... set it ayways */                break;	case INVERSION_ON:                cx24110_writereg(i2c,0x37,cx24110_readreg(i2c,0x37)|0x1);                /* AcqSpectrInvDis on. No idea why someone should want this */                cx24110_writereg(i2c,0x5,cx24110_readreg(i2c,0x5)|0x08);                /* Initial value 1 at start of acq */                cx24110_writereg(i2c,0x22,cx24110_readreg(i2c,0x22)|0x10);                /* current value 1 */                break;	case INVERSION_AUTO:                cx24110_writereg(i2c,0x37,cx24110_readreg(i2c,0x37)&0xfe);                /* AcqSpectrInvDis off. Leave initial & current states as is */                break;	default:		return -EINVAL;	}	return 0;}staticint cx24110_set_fec (struct dvb_i2c_bus *i2c, fe_code_rate_t fec){/* fixme (low): error handling */        static const int rate[]={-1,1,2,3,5,7,-1};        static const int g1[]={-1,0x01,0x02,0x05,0x15,0x45,-1};        static const int g2[]={-1,0x01,0x03,0x06,0x1a,0x7a,-1};        /* Well, the AutoAcq engine of the cx24106 and 24110 automatically           searches all enabled viterbi rates, and can handle non-standard           rates as well. */                        if (fec>FEC_AUTO)                 fec=FEC_AUTO;        if(fec==FEC_AUTO) { /* (re-)establish AutoAcq behaviour */           cx24110_writereg(i2c,0x37,cx24110_readreg(i2c,0x37)&0xdf);           /* clear AcqVitDis bit */           cx24110_writereg(i2c,0x18,0xae);           /* allow all DVB standard code rates */           cx24110_writereg(i2c,0x05,(cx24110_readreg(i2c,0x05)&0xf0)|0x3);           /* set nominal Viterbi rate 3/4 */           cx24110_writereg(i2c,0x22,(cx24110_readreg(i2c,0x22)&0xf0)|0x3);           /* set current Viterbi rate 3/4 */           cx24110_writereg(i2c,0x1a,0x05); cx24110_writereg(i2c,0x1b,0x06);           /* set the puncture registers for code rate 3/4 */           return 0;        } else {           cx24110_writereg(i2c,0x37,cx24110_readreg(i2c,0x37)|0x20);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品一区二区www| 欧美性xxxxxx少妇| 国产精品国产a| 精品久久一区二区三区| jizzjizzjizz欧美| 日本va欧美va欧美va精品| 亚洲第一福利一区| 中文字幕成人av| 日韩美女视频19| 中文字幕亚洲视频| 一区二区三区日韩欧美| 亚洲第一成人在线| 亚洲视频每日更新| 精品久久99ma| 亚洲国产激情av| 欧美一区二区三区四区久久 | 欧美人伦禁忌dvd放荡欲情| 韩国女主播成人在线观看| 国产mv日韩mv欧美| 久久国产综合精品| 亚洲一区二区三区在线| 日韩精品色哟哟| 国产一区二区在线免费观看| 亚洲一区在线播放| 亚洲天堂2014| 蜜桃一区二区三区在线观看| 国产精品一区2区| 一本一道波多野结衣一区二区| 欧美性xxxxxx少妇| 欧美自拍丝袜亚洲| 日韩欧美国产综合一区| 在线不卡一区二区| 欧美视频完全免费看| 精品国内片67194| 亚洲精品va在线观看| 亚洲欧美成aⅴ人在线观看| 国产日韩亚洲欧美综合| 成人欧美一区二区三区白人| 中文字幕+乱码+中文字幕一区| 亚洲综合区在线| 一区二区在线观看免费视频播放| 国产精品一区在线观看你懂的| 色婷婷一区二区| 91在线视频在线| 精品少妇一区二区三区免费观看| 国产精品久久午夜| 自拍偷自拍亚洲精品播放| 亚洲图片另类小说| 久久精品国产99国产| 欧美在线三级电影| 中文字幕第一页久久| 日本成人在线看| 奇米影视7777精品一区二区| 99视频超级精品| 日本韩国一区二区三区| 中文字幕巨乱亚洲| 亚洲欧美偷拍三级| 五月天亚洲精品| 在线视频国内一区二区| 欧美色综合久久| 亚洲欧美另类综合偷拍| 国产99久久久国产精品潘金网站| 日韩一区二区高清| 欧美国产日韩在线观看| 国产精品一区二区无线| 欧美一级欧美一级在线播放| 亚洲第一福利视频在线| 欧美日韩一卡二卡| 一级中文字幕一区二区| 久久精品久久99精品久久| 91精品免费在线观看| 亚洲一卡二卡三卡四卡五卡| 91亚洲国产成人精品一区二三| 国产精品美女一区二区在线观看| 国产精品一品二品| 欧美日韩一区二区欧美激情| 偷拍自拍另类欧美| 欧美精品日日鲁夜夜添| 麻豆国产精品官网| 91在线视频观看| 一级精品视频在线观看宜春院 | 成人免费高清视频| 国产日韩三级在线| 日本亚洲电影天堂| av中文一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲bdsm女犯bdsm网站| 国产精品自拍一区| 欧美色中文字幕| 成人免费一区二区三区视频| 91在线观看污| 亚洲国产一区视频| 欧美一区二区三区的| 亚洲欧美激情一区二区| 在线中文字幕一区| 国产精品色哟哟| 色婷婷亚洲婷婷| 国产精品久久久一区麻豆最新章节| 99精品视频在线观看| 亚洲一区影音先锋| 97久久精品人人做人人爽50路| 欧美成人午夜电影| 午夜欧美大尺度福利影院在线看 | 麻豆91精品视频| 久久无码av三级| 色成人在线视频| 亚洲日本免费电影| 欧美另类变人与禽xxxxx| 夜夜嗨av一区二区三区中文字幕 | 91福利视频在线| 国产精品精品国产色婷婷| 色婷婷av一区二区三区软件| 国产精品毛片a∨一区二区三区 | 精品乱人伦一区二区三区| 午夜久久久久久久久久一区二区| 久久精品亚洲精品国产欧美kt∨| 色哟哟精品一区| 久草在线在线精品观看| 亚洲国产成人高清精品| 久久综合色之久久综合| 欧美私人免费视频| 亚洲成人免费视频| 91精品午夜视频| 92国产精品观看| 亚洲国产日产av| 精品视频在线视频| 丁香亚洲综合激情啪啪综合| 日韩成人伦理电影在线观看| 亚洲天堂2014| 欧美精品v国产精品v日韩精品| 狠狠久久亚洲欧美| 午夜视频一区二区| 日韩欧美123| 国产一区二区精品久久| 亚洲6080在线| 欧美va在线播放| 国产99久久久国产精品免费看 | 成人国产电影网| 亚洲另类在线一区| 91麻豆精品国产自产在线观看一区| 日本不卡高清视频| 亚洲第一会所有码转帖| 亚洲一线二线三线视频| 一区二区三区四区在线免费观看 | 亚洲激情自拍偷拍| 自拍偷拍欧美精品| 国产精品不卡在线| 911精品国产一区二区在线| 91色porny蝌蚪| 91伊人久久大香线蕉| 无码av免费一区二区三区试看 | wwwwxxxxx欧美| 精品国产一区二区在线观看| 精品国产91久久久久久久妲己| 欧美福利电影网| 国产盗摄女厕一区二区三区| 亚洲人成小说网站色在线| 在线综合+亚洲+欧美中文字幕| 欧美二区乱c少妇| 欧美哺乳videos| 国产日本一区二区| 国产精品久久夜| 亚洲伊人伊色伊影伊综合网| 国产欧美精品一区| 亚洲人123区| 亚洲gay无套男同| 久久99九九99精品| 国产99一区视频免费| 六月丁香婷婷色狠狠久久| 亚洲男女一区二区三区| 精品sm捆绑视频| 欧美在线观看18| 日韩一区二区在线观看视频| 日本伦理一区二区| 国产sm精品调教视频网站| av电影一区二区| 欧美日韩一级黄| 欧美视频自拍偷拍| 北条麻妃国产九九精品视频| 欧美亚洲综合色| 日韩三级视频在线观看| 中文一区在线播放| 欧美经典一区二区三区| 精品国产伦一区二区三区观看方式| 久久久久久免费| 精品蜜桃在线看| 亚洲乱码国产乱码精品精小说 | 亚洲男人电影天堂| 另类小说综合欧美亚洲| kk眼镜猥琐国模调教系列一区二区| 欧美三级在线播放| 色噜噜夜夜夜综合网| 成人国产精品免费观看| 成人高清免费观看| voyeur盗摄精品| 日韩欧美卡一卡二| 夜夜嗨av一区二区三区中文字幕 | 老司机午夜精品| 另类的小说在线视频另类成人小视频在线 | thepron国产精品|