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

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

?? tuner.c

?? 這是一個市場上常見電視卡的驅動程序源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	buf[2]=0x86; // LOGC
	buf[3]=0x0f; //reserved
	buf[4]=0x1f;
	buf[5]=(lo2n-1) | (lo2a<<5);
 	if(rfin >400*1000*1000)
                buf[6]=0xe4;
        else
                buf[6]=0xf4; // set PKEN per rev 1.2 
	buf[7]=8+xogc;
	buf[8]=0xc3; //reserved
	buf[9]=0x4e; //reserved
	buf[10]=0xec; //reserved
	buf[11]=(lo2num&0xff);
	buf[12]=(lo2num>>8) |0x80; // Lo2RST

	return 0;
}

static int mt2032_check_lo_lock(struct i2c_client *c)
{
	int try,lock=0;
	unsigned char buf[2];
	for(try=0;try<10;try++) {
		buf[0]=0x0e;
		i2c_master_send(c,buf,1);
		i2c_master_recv(c,buf,1);
		dprintk("mt2032 Reg.E=0x%02x\n",buf[0]);
		lock=buf[0] &0x06;
		
		if (lock==6)
			break;
		
		dprintk("mt2032: pll wait 1ms for lock (0x%2x)\n",buf[0]);
		udelay(1000);
	}
        return lock;
}

static int mt2032_optimize_vco(struct i2c_client *c,int sel,int lock)
{
	unsigned char buf[2];
	int tad1;

	buf[0]=0x0f;
	i2c_master_send(c,buf,1);
	i2c_master_recv(c,buf,1);
	dprintk("mt2032 Reg.F=0x%02x\n",buf[0]);
	tad1=buf[0]&0x07;

	if(tad1 ==0) return lock;
	if(tad1 ==1) return lock;

	if(tad1==2) {
		if(sel==0) 
			return lock;
		else sel--;
	}
	else {
		if(sel<4)
			sel++;
		else
			return lock;
	}

	dprintk("mt2032 optimize_vco: sel=%d\n",sel);

	buf[0]=0x0f;
	buf[1]=sel;
        i2c_master_send(c,buf,2);
	lock=mt2032_check_lo_lock(c);
	return lock;
}


static void mt2032_set_if_freq(struct i2c_client *c, unsigned int rfin,
			       unsigned int if1, unsigned int if2,
			       unsigned int from, unsigned int to)
{
	unsigned char buf[21];
	int lint_try,ret,sel,lock=0;
	struct tuner *t = i2c_get_clientdata(c);

	dprintk("mt2032_set_if_freq rfin=%d if1=%d if2=%d from=%d to=%d\n",rfin,if1,if2,from,to);

        buf[0]=0;
        ret=i2c_master_send(c,buf,1);
        i2c_master_recv(c,buf,21);

	buf[0]=0;
	ret=mt2032_compute_freq(rfin,if1,if2,from,to,&buf[1],&sel,t->xogc);
	if (ret<0)
		return;

        // send only the relevant registers per Rev. 1.2
        buf[0]=0;
        ret=i2c_master_send(c,buf,4);
        buf[5]=5;
        ret=i2c_master_send(c,buf+5,4);
        buf[11]=11;
        ret=i2c_master_send(c,buf+11,3);
        if(ret!=3)
                printk("mt2032_set_if_freq failed with %d\n",ret);

	// wait for PLLs to lock (per manual), retry LINT if not.
	for(lint_try=0; lint_try<2; lint_try++) {
		lock=mt2032_check_lo_lock(c);
		
		if(optimize_vco)
			lock=mt2032_optimize_vco(c,sel,lock);
		if(lock==6) break;
		
		printk("mt2032: re-init PLLs by LINT\n"); 
		buf[0]=7; 
		buf[1]=0x80 +8+t->xogc; // set LINT to re-init PLLs
		i2c_master_send(c,buf,2);
		mdelay(10);
		buf[1]=8+t->xogc;
		i2c_master_send(c,buf,2);
        }

	if (lock!=6)
		printk("MT2032 Fatal Error: PLLs didn't lock.\n");

	buf[0]=2;
	buf[1]=0x20; // LOGC for optimal phase noise
	ret=i2c_master_send(c,buf,2);
	if (ret!=2)
		printk("mt2032_set_if_freq2 failed with %d\n",ret);
}


static void mt2032_set_tv_freq(struct i2c_client *c, unsigned int freq)
{
	struct tuner *t = i2c_get_clientdata(c);
	int if2,from,to;

	// signal bandwidth and picture carrier
	if (t->mode == VIDEO_MODE_NTSC) {
		from=40750*1000;
		to=46750*1000;
		if2=45750*1000; 
	} else {
		// Pal 
		from=32900*1000;
		to=39900*1000;
		if2=38900*1000;
	}

        mt2032_set_if_freq(c, freq*62500 /* freq*1000*1000/16 */,
			   1090*1000*1000, if2, from, to);
}

static void mt2032_set_radio_freq(struct i2c_client *c, unsigned int freq)
{
	struct tuner *t = i2c_get_clientdata(c);
	int if2 = t->radio_if2;

	// per Manual for FM tuning: first if center freq. 1085 MHz
        mt2032_set_if_freq(c, freq*62500 /* freq*1000*1000/16 */,
			   1085*1000*1000,if2,if2,if2);
}

// Initalization as described in "MT203x Programming Procedures", Rev 1.2, Feb.2001
static int mt2032_init(struct i2c_client *c)
{
	struct tuner *t = i2c_get_clientdata(c);
        unsigned char buf[21];
        int ret,xogc,xok=0;

	// Initialize Registers per spec.
        buf[1]=2; // Index to register 2
        buf[2]=0xff;
        buf[3]=0x0f;
        buf[4]=0x1f;
        ret=i2c_master_send(c,buf+1,4);

        buf[5]=6; // Index register 6
        buf[6]=0xe4;
        buf[7]=0x8f;
        buf[8]=0xc3;
        buf[9]=0x4e;
        buf[10]=0xec;
        ret=i2c_master_send(c,buf+5,6);

        buf[12]=13;  // Index register 13
        buf[13]=0x32;
        ret=i2c_master_send(c,buf+12,2);

        // Adjust XOGC (register 7), wait for XOK
        xogc=7;
        do {
		dprintk("mt2032: xogc = 0x%02x\n",xogc&0x07);
                mdelay(10);
                buf[0]=0x0e;
                i2c_master_send(c,buf,1);
                i2c_master_recv(c,buf,1);
                xok=buf[0]&0x01;
                dprintk("mt2032: xok = 0x%02x\n",xok);
                if (xok == 1) break;

                xogc--;
                dprintk("mt2032: xogc = 0x%02x\n",xogc&0x07);
                if (xogc == 3) {
                        xogc=4; // min. 4 per spec
                        break;
                }
                buf[0]=0x07;
                buf[1]=0x88 + xogc;
                ret=i2c_master_send(c,buf,2);
                if (ret!=2)
                        printk("mt2032_init failed with %d\n",ret);
        } while (xok != 1 );
	t->xogc=xogc;

	t->tv_freq    = mt2032_set_tv_freq;
	t->radio_freq = mt2032_set_radio_freq;
        return(1);
}

static void mt2050_set_if_freq(struct i2c_client *c,unsigned int freq, unsigned int if2)
{
	unsigned int if1=1218*1000*1000;
	unsigned int f_lo1,f_lo2,lo1,lo2,f_lo1_modulo,f_lo2_modulo,num1,num2,div1a,div1b,div2a,div2b;
	int ret;
	unsigned char buf[6];
	
	dprintk("mt2050_set_if_freq freq=%d\n",freq);
	
	f_lo1=freq+if1;
	f_lo1=(f_lo1/1000000)*1000000;
	
	f_lo2=f_lo1-freq-if2;
	f_lo2=(f_lo2/50000)*50000;
	
	lo1=f_lo1/4000000;
	lo2=f_lo2/4000000;
	
	f_lo1_modulo= f_lo1-(lo1*4000000);
	f_lo2_modulo= f_lo2-(lo2*4000000);
	
	num1=4*f_lo1_modulo/4000000;
	num2=4096*(f_lo2_modulo/1000)/4000;
	
	// todo spurchecks
	
	div1a=(lo1/12)-1;
	div1b=lo1-(div1a+1)*12;
	
	div2a=(lo2/8)-1;
	div2b=lo2-(div2a+1)*8;
	
	dprintk("lo1 lo2 = %d %d\n", lo1, lo2);
        dprintk("num1 num2 div1a div1b div2a div2b= %x %x %x %x %x %x\n",num1,num2,div1a,div1b,div2a,div2b);
	
	
	buf[0]=1;
	buf[1]= 4*div1b + num1;
	if(freq<275*1000*1000) buf[1] = buf[1]|0x80;
	
	buf[2]=div1a;
	buf[3]=32*div2b + num2/256;
	buf[4]=num2-(num2/256)*256;
	buf[5]=div2a;
	if(num2!=0) buf[5]=buf[5]|0x40;
	
	if(debug) {
		int i;
		printk("bufs is: ");
		for(i=0;i<6;i++)
			printk("%x ",buf[i]);
		printk("\n");
	}
	
	ret=i2c_master_send(c,buf,6);
        if (ret!=6)
                printk("mt2050_set_if_freq failed with %d\n",ret);
}

static void mt2050_set_tv_freq(struct i2c_client *c, unsigned int freq)
{
	struct tuner *t = i2c_get_clientdata(c);
	unsigned int if2;
	
	if (t->mode == VIDEO_MODE_NTSC) {
                if2=45750*1000;
        } else {
                // Pal
                if2=38900*1000;
        }
	mt2050_set_if_freq(c,freq*62500,if2);
}

static int mt2050_init(struct i2c_client *c)
{
	struct tuner *t = i2c_get_clientdata(c);
	unsigned char buf[1];
	int ret;
	
	buf[0]=6;
	buf[1]=0x10;
	ret=i2c_master_send(c,buf,2); //  power
	
	buf[0]=0x0f;
	buf[1]=0x0f;
	ret=i2c_master_send(c,buf,2); // m1lo
	
	buf[0]=0x0d;
	ret=i2c_master_send(c,buf,1);
	i2c_master_recv(c,buf,1);
	
	dprintk("mt2050: sro is %x\n",buf[0]);
	t->tv_freq = mt2050_set_tv_freq;
	return 0;
}

static int microtune_init(struct i2c_client *c)
{
	struct tuner *t = i2c_get_clientdata(c);
	char *name;
        unsigned char buf[21];
	int company_code;
	
        buf[0] = 0;
	t->tv_freq = NULL;
	t->radio_freq = NULL;
	name = "unknown";

        i2c_master_send(c,buf,1);
        i2c_master_recv(c,buf,21);
        if(debug) {
                int i;
                printk(KERN_DEBUG "tuner: MT2032 hexdump:\n");
                for(i=0;i<21;i++) {
                        printk(" %02x",buf[i]);
                        if(((i+1)%8)==0) printk(" ");
                        if(((i+1)%16)==0) printk("\n ");
                }
                printk("\n ");
        }
	company_code = buf[0x11] << 8 | buf[0x12];
        printk("tuner: microtune: companycode=%04x part=%02x rev=%02x\n",
	       company_code,buf[0x13],buf[0x14]);
        if (company_code != 0x4d54) {
		printk("tuner: microtune: unknown companycode\n");
		return 0;
	}

	if (buf[0x13] < ARRAY_SIZE(microtune_part) &&
	    NULL != microtune_part[buf[0x13]])
		name = microtune_part[buf[0x13]];
	switch (buf[0x13]) {
	case MT2032:
		mt2032_init(c);
		break;
	case MT2050:
		mt2050_init(c);
		break;
	default:
		printk("tuner: microtune %s found, not (yet?) supported, sorry :-/\n",
		       name);
                return 0;
        }
	printk("tuner: microtune %s found, OK\n",name);
	return 0;
}

/* ---------------------------------------------------------------------- */

static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
{
	struct tuner *t = i2c_get_clientdata(c);
	u8 config;
	u16 div;
	struct tunertype *tun;
        unsigned char buffer[4];
	int rc;

	tun=&tuners[t->type];
	if (freq < tun->thresh1) 
		config = tun->VHF_L;
	else if (freq < tun->thresh2) 
		config = tun->VHF_H;
	else
		config = tun->UHF;


	/* tv norm specific stuff for multi-norm tuners */
	switch (t->type) {
	case TUNER_PHILIPS_SECAM: // FI1216MF
		/* 0x01 -> ??? no change ??? */
		/* 0x02 -> PAL BDGHI / SECAM L */
		/* 0x04 -> ??? PAL others / SECAM others ??? */
		config &= ~0x02;
		if (t->mode == VIDEO_MODE_SECAM)
			config |= 0x02;
		break;

	case TUNER_TEMIC_4046FM5:
		config &= ~0x0f;
		switch (pal[0]) {
		case 'i':
		case 'I':
			config |= TEMIC_SET_PAL_I;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区三| 色诱亚洲精品久久久久久| 成人av电影在线观看| 91精品国产综合久久久蜜臀图片| 26uuu精品一区二区三区四区在线| 亚洲最色的网站| 风间由美中文字幕在线看视频国产欧美| 欧美日韩国产免费| 亚洲免费av高清| 丰满亚洲少妇av| 欧美精品一区二区高清在线观看| 亚洲综合网站在线观看| 99精品国产91久久久久久| ww久久中文字幕| 久99久精品视频免费观看| 欧美理论在线播放| 天天操天天综合网| 欧美色爱综合网| 夜夜揉揉日日人人青青一国产精品| 成人黄色软件下载| 国产精品国产三级国产| 国产精品影音先锋| 久久久久久久综合色一本| 精一区二区三区| 精品国产sm最大网站| 久久精品国产99国产精品| 日韩免费观看高清完整版| 奇米精品一区二区三区在线观看一| 欧美三级电影一区| 午夜精品久久久| 7777精品伊人久久久大香线蕉完整版 | 天天操天天综合网| 欧美在线免费播放| 日韩精品久久久久久| 欧美精品色综合| 男女男精品视频| 久久蜜桃香蕉精品一区二区三区| 国产精品99久久久| 自拍偷拍国产精品| 欧洲激情一区二区| 蜜臀久久99精品久久久久久9| 91精品午夜视频| 国产一区二三区| 国产日韩欧美精品综合| 99精品1区2区| 日韩中文字幕1| 久久先锋影音av鲁色资源网| 成人国产电影网| 亚洲成在线观看| 精品久久久久久久久久久久包黑料| 国产乱淫av一区二区三区| 国产欧美日韩在线看| 日本电影亚洲天堂一区| 日韩avvvv在线播放| 国产亚洲精品精华液| 91成人免费网站| 免费看精品久久片| 国产精品久久久久久久久晋中 | 丁香另类激情小说| 日本一区二区三级电影在线观看| 久久久久久久网| 欧美国产乱子伦| 久久激情五月婷婷| 亚洲444eee在线观看| 亚洲国产日韩a在线播放性色| 日日摸夜夜添夜夜添国产精品| 精品久久久久99| 国产suv精品一区二区6| 亚洲综合激情网| 欧美电影免费观看高清完整版在线| 国产成人免费av在线| 亚洲综合色婷婷| 国产夜色精品一区二区av| 欧美日韩午夜在线| 成人小视频免费观看| 日韩av中文在线观看| 国产精品久久久久四虎| 精品日韩av一区二区| 欧美日韩中字一区| 99久精品国产| 精品一区二区三区香蕉蜜桃| 亚洲电影视频在线| 最新日韩av在线| 26uuu亚洲综合色| 91精品国产91久久久久久一区二区| 99久久精品情趣| 国产a久久麻豆| 久久黄色级2电影| 天天影视涩香欲综合网| 亚洲欧美日韩人成在线播放| 久久亚洲二区三区| 欧美va亚洲va在线观看蝴蝶网| 欧美三级欧美一级| 色吊一区二区三区| 93久久精品日日躁夜夜躁欧美| 国产在线一区二区| 免费成人深夜小野草| 亚洲成人自拍网| 亚洲尤物在线视频观看| 国产精品的网站| 国产精品乱人伦中文| 久久精品视频在线看| 久久蜜桃av一区精品变态类天堂 | 一区二区在线观看免费| 国产亚洲精品aa| 91麻豆蜜桃一区二区三区| 豆国产96在线|亚洲| 奇米色777欧美一区二区| 亚洲国产综合人成综合网站| 亚洲美女在线国产| 自拍偷拍国产亚洲| 亚洲男帅同性gay1069| 国产精品进线69影院| ●精品国产综合乱码久久久久| 国产精品国模大尺度视频| 在线精品视频免费播放| 欧美日韩夫妻久久| 久久成人麻豆午夜电影| 国内外精品视频| 国内外精品视频| 国产成人精品一区二| 欧美日韩精品一区二区三区蜜桃 | 亚洲成人在线网站| 亚洲一二三区在线观看| 夜夜操天天操亚洲| 三级欧美在线一区| 精品一区二区在线看| 高清shemale亚洲人妖| 99久久久无码国产精品| 色哟哟精品一区| 欧美剧在线免费观看网站| 日韩欧美国产一区在线观看| 久久色在线视频| 中文字幕在线一区| 亚洲一线二线三线久久久| 日韩在线卡一卡二| 国产精品综合久久| 色综合久久久久网| 久久精品国产亚洲高清剧情介绍| 美女www一区二区| 亚洲人被黑人高潮完整版| 亚洲已满18点击进入久久| 看电视剧不卡顿的网站| 成人午夜在线播放| 欧美日韩免费观看一区三区| 欧美日韩国产综合久久 | 国产高清成人在线| 99re这里只有精品6| 欧美剧情片在线观看| 国产日韩精品一区二区三区 | 一本色道**综合亚洲精品蜜桃冫 | 久久99精品久久只有精品| 懂色av一区二区三区蜜臀| 国产精品自拍在线| 在线观看一区日韩| 5566中文字幕一区二区电影| 欧美成人video| 国产精品第一页第二页第三页| 国产mv日韩mv欧美| 欧美日韩国产成人在线免费| 国产女同互慰高潮91漫画| 亚洲成av人片| 96av麻豆蜜桃一区二区| 精品国产乱码91久久久久久网站| 亚洲欧美二区三区| 精品一区二区三区在线视频| 欧美日韩一级二级| 亚洲国产激情av| 男女激情视频一区| 欧美日韩一区精品| 亚洲欧美在线观看| 国产91精品一区二区麻豆亚洲| 欧美日韩精品一二三区| 亚洲欧美日韩小说| 国产a区久久久| 久久综合色8888| 美女网站在线免费欧美精品| 欧美日韩国产免费| 亚洲一二三四在线观看| jlzzjlzz国产精品久久| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲专区一二三| 日本一区中文字幕| 国产成人免费xxxxxxxx| 精品日韩在线观看| 蜜臀精品一区二区三区在线观看| 一本高清dvd不卡在线观看| 一区二区三区中文字幕| 国产日韩一级二级三级| 亚洲自拍都市欧美小说| 91玉足脚交白嫩脚丫在线播放| 久久九九影视网| 黑人巨大精品欧美一区| 日韩一级片在线播放| 免费观看日韩电影| 欧美一区二区三区不卡| 免费在线观看日韩欧美| 欧美大度的电影原声| 久久99国产精品尤物| 欧美r级电影在线观看|