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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tea5767.c

?? LINUX 2.6.17.4的源碼
?? C
字號(hào):
/* * For Philips TEA5767 FM Chip used on some TV Cards like Prolink Pixelview * I2C address is allways 0xC0. * * * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br) * This code is placed under the terms of the GNU General Public License * * tea5767 autodetection thanks to Torsten Seeboth and Atsushi Nakagawa * from their contributions on DScaler. */#include <linux/i2c.h>#include <linux/videodev.h>#include <linux/delay.h>#include <media/tuner.h>#define PREFIX "TEA5767 "/* from tuner-core.c */extern int tuner_debug;/*****************************************************************************//****************************** * Write mode register values * ******************************//* First register */#define TEA5767_MUTE		0x80	/* Mutes output */#define TEA5767_SEARCH		0x40	/* Activates station search *//* Bits 0-5 for divider MSB *//* Second register *//* Bits 0-7 for divider LSB *//* Third register *//* Station search from botton to up */#define TEA5767_SEARCH_UP	0x80/* Searches with ADC output = 10 */#define TEA5767_SRCH_HIGH_LVL	0x60/* Searches with ADC output = 10 */#define TEA5767_SRCH_MID_LVL	0x40/* Searches with ADC output = 5 */#define TEA5767_SRCH_LOW_LVL	0x20/* if on, div=4*(Frf+Fif)/Fref otherwise, div=4*(Frf-Fif)/Freq) */#define TEA5767_HIGH_LO_INJECT	0x10/* Disable stereo */#define TEA5767_MONO		0x08/* Disable right channel and turns to mono */#define TEA5767_MUTE_RIGHT	0x04/* Disable left channel and turns to mono */#define TEA5767_MUTE_LEFT	0x02#define TEA5767_PORT1_HIGH	0x01/* Fourth register */#define TEA5767_PORT2_HIGH	0x80/* Chips stops working. Only I2C bus remains on */#define TEA5767_STDBY		0x40/* Japan freq (76-108 MHz. If disabled, 87.5-108 MHz */#define TEA5767_JAPAN_BAND	0x20/* Unselected means 32.768 KHz freq as reference. Otherwise Xtal at 13 MHz */#define TEA5767_XTAL_32768	0x10/* Cuts weak signals */#define TEA5767_SOFT_MUTE	0x08/* Activates high cut control */#define TEA5767_HIGH_CUT_CTRL	0x04/* Activates stereo noise control */#define TEA5767_ST_NOISE_CTL	0x02/* If activate PORT 1 indicates SEARCH or else it is used as PORT1 */#define TEA5767_SRCH_IND	0x01/* Fifth register *//* By activating, it will use Xtal at 13 MHz as reference for divider */#define TEA5767_PLLREF_ENABLE	0x80/* By activating, deemphasis=50, or else, deemphasis of 50us */#define TEA5767_DEEMPH_75	0X40/***************************** * Read mode register values * *****************************//* First register */#define TEA5767_READY_FLAG_MASK	0x80#define TEA5767_BAND_LIMIT_MASK	0X40/* Bits 0-5 for divider MSB after search or preset *//* Second register *//* Bits 0-7 for divider LSB after search or preset *//* Third register */#define TEA5767_STEREO_MASK	0x80#define TEA5767_IF_CNTR_MASK	0x7f/* Fourth register */#define TEA5767_ADC_LEVEL_MASK	0xf0/* should be 0 */#define TEA5767_CHIP_ID_MASK	0x0f/* Fifth register *//* Reserved for future extensions */#define TEA5767_RESERVED_MASK	0xffenum tea5767_xtal_freq {	TEA5767_LOW_LO_32768    = 0,	TEA5767_HIGH_LO_32768   = 1,	TEA5767_LOW_LO_13MHz    = 2,	TEA5767_HIGH_LO_13MHz   = 3,};/*****************************************************************************/static void set_tv_freq(struct i2c_client *c, unsigned int freq){	struct tuner *t = i2c_get_clientdata(c);	tuner_warn("This tuner doesn't support TV freq.\n");}static void tea5767_status_dump(unsigned char *buffer){	unsigned int div, frq;	if (TEA5767_READY_FLAG_MASK & buffer[0])		printk(PREFIX "Ready Flag ON\n");	else		printk(PREFIX "Ready Flag OFF\n");	if (TEA5767_BAND_LIMIT_MASK & buffer[0])		printk(PREFIX "Tuner at band limit\n");	else		printk(PREFIX "Tuner not at band limit\n");	div = ((buffer[0] & 0x3f) << 8) | buffer[1];	switch (TEA5767_HIGH_LO_32768) {	case TEA5767_HIGH_LO_13MHz:		frq = (div * 50000 - 700000 - 225000) / 4;	/* Freq in KHz */		break;	case TEA5767_LOW_LO_13MHz:		frq = (div * 50000 + 700000 + 225000) / 4;	/* Freq in KHz */		break;	case TEA5767_LOW_LO_32768:		frq = (div * 32768 + 700000 + 225000) / 4;	/* Freq in KHz */		break;	case TEA5767_HIGH_LO_32768:	default:		frq = (div * 32768 - 700000 - 225000) / 4;	/* Freq in KHz */		break;	}	buffer[0] = (div >> 8) & 0x3f;	buffer[1] = div & 0xff;	printk(PREFIX "Frequency %d.%03d KHz (divider = 0x%04x)\n",	       frq / 1000, frq % 1000, div);	if (TEA5767_STEREO_MASK & buffer[2])		printk(PREFIX "Stereo\n");	else		printk(PREFIX "Mono\n");	printk(PREFIX "IF Counter = %d\n", buffer[2] & TEA5767_IF_CNTR_MASK);	printk(PREFIX "ADC Level = %d\n",	       (buffer[3] & TEA5767_ADC_LEVEL_MASK) >> 4);	printk(PREFIX "Chip ID = %d\n", (buffer[3] & TEA5767_CHIP_ID_MASK));	printk(PREFIX "Reserved = 0x%02x\n",	       (buffer[4] & TEA5767_RESERVED_MASK));}/* Freq should be specifyed at 62.5 Hz */static void set_radio_freq(struct i2c_client *c, unsigned int frq){	struct tuner *t = i2c_get_clientdata(c);	unsigned char buffer[5];	unsigned div;	int rc;	tuner_dbg (PREFIX "radio freq = %d.%03d MHz\n", frq/16000,(frq/16)%1000);	/* Rounds freq to next decimal value - for 62.5 KHz step */	/* frq = 20*(frq/16)+radio_frq[frq%16]; */	buffer[2] = TEA5767_PORT1_HIGH;	buffer[3] = TEA5767_PORT2_HIGH | TEA5767_HIGH_CUT_CTRL |		    TEA5767_ST_NOISE_CTL | TEA5767_JAPAN_BAND;	buffer[4] = 0;	if (t->audmode == V4L2_TUNER_MODE_MONO) {		tuner_dbg("TEA5767 set to mono\n");		buffer[2] |= TEA5767_MONO;	} else {		tuner_dbg("TEA5767 set to stereo\n");	}	/* Should be replaced */	switch (TEA5767_HIGH_LO_32768) {	case TEA5767_HIGH_LO_13MHz:		tuner_dbg ("TEA5767 radio HIGH LO inject xtal @ 13 MHz\n");		buffer[2] |= TEA5767_HIGH_LO_INJECT;		buffer[4] |= TEA5767_PLLREF_ENABLE;		div = (frq * (4000 / 16) + 700000 + 225000 + 25000) / 50000;		break;	case TEA5767_LOW_LO_13MHz:		tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 13 MHz\n");		buffer[4] |= TEA5767_PLLREF_ENABLE;		div = (frq * (4000 / 16) - 700000 - 225000 + 25000) / 50000;		break;	case TEA5767_LOW_LO_32768:		tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 32,768 MHz\n");		buffer[3] |= TEA5767_XTAL_32768;		/* const 700=4000*175 Khz - to adjust freq to right value */		div = ((frq * (4000 / 16) - 700000 - 225000) + 16384) >> 15;		break;	case TEA5767_HIGH_LO_32768:	default:		tuner_dbg ("TEA5767 radio HIGH LO inject xtal @ 32,768 MHz\n");		buffer[2] |= TEA5767_HIGH_LO_INJECT;		buffer[3] |= TEA5767_XTAL_32768;		div = ((frq * (4000 / 16) + 700000 + 225000) + 16384) >> 15;		break;	}	buffer[0] = (div >> 8) & 0x3f;	buffer[1] = div & 0xff;	if (5 != (rc = i2c_master_send(c, buffer, 5)))		tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);	if (tuner_debug) {		if (5 != (rc = i2c_master_recv(c, buffer, 5)))			tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);		else			tea5767_status_dump(buffer);	}}static int tea5767_signal(struct i2c_client *c){	unsigned char buffer[5];	int rc;	struct tuner *t = i2c_get_clientdata(c);	memset(buffer, 0, sizeof(buffer));	if (5 != (rc = i2c_master_recv(c, buffer, 5)))		tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);	return ((buffer[3] & TEA5767_ADC_LEVEL_MASK) << 8);}static int tea5767_stereo(struct i2c_client *c){	unsigned char buffer[5];	int rc;	struct tuner *t = i2c_get_clientdata(c);	memset(buffer, 0, sizeof(buffer));	if (5 != (rc = i2c_master_recv(c, buffer, 5)))		tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);	rc = buffer[2] & TEA5767_STEREO_MASK;	tuner_dbg("TEA5767 radio ST GET = %02x\n", rc);	return ((buffer[2] & TEA5767_STEREO_MASK) ? V4L2_TUNER_SUB_STEREO : 0);}static void tea5767_standby(struct i2c_client *c){	unsigned char buffer[5];	struct tuner *t = i2c_get_clientdata(c);	unsigned div, rc;	div = (87500 * 4 + 700 + 225 + 25) / 50; /* Set frequency to 87.5 MHz */	buffer[0] = (div >> 8) & 0x3f;	buffer[1] = div & 0xff;	buffer[2] = TEA5767_PORT1_HIGH;	buffer[3] = TEA5767_PORT2_HIGH | TEA5767_HIGH_CUT_CTRL |		    TEA5767_ST_NOISE_CTL | TEA5767_JAPAN_BAND | TEA5767_STDBY;	buffer[4] = 0;	if (5 != (rc = i2c_master_send(c, buffer, 5)))		tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);}int tea5767_autodetection(struct i2c_client *c){	unsigned char buffer[7] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };	int rc;	struct tuner *t = i2c_get_clientdata(c);	if ((rc = i2c_master_recv(c, buffer, 7))< 5) {		tuner_warn("It is not a TEA5767. Received %i bytes.\n", rc);		return EINVAL;	}	/* If all bytes are the same then it's a TV tuner and not a tea5767 */	if (buffer[0] == buffer[1] && buffer[0] == buffer[2] &&	    buffer[0] == buffer[3] && buffer[0] == buffer[4]) {		tuner_warn("All bytes are equal. It is not a TEA5767\n");		return EINVAL;	}	/*  Status bytes:	 *  Byte 4: bit 3:1 : CI (Chip Identification) == 0	 *          bit 0   : internally set to 0	 *  Byte 5: bit 7:0 : == 0	 */	if (((buffer[3] & 0x0f) != 0x00) || (buffer[4] != 0x00)) {		tuner_warn("Chip ID is not zero. It is not a TEA5767\n");		return EINVAL;	}	/* It seems that tea5767 returns 0xff after the 5th byte */	if ((buffer[5] != 0xff) || (buffer[6] != 0xff)) {		tuner_warn("Returned more than 5 bytes. It is not a TEA5767\n");		return EINVAL;	}	tuner_warn("TEA5767 detected.\n");	return 0;}int tea5767_tuner_init(struct i2c_client *c){	struct tuner *t = i2c_get_clientdata(c);	tuner_info("type set to %d (%s)\n", t->type, "Philips TEA5767HN FM Radio");	strlcpy(c->name, "tea5767", sizeof(c->name));	t->set_tv_freq = set_tv_freq;	t->set_radio_freq = set_radio_freq;	t->has_signal = tea5767_signal;	t->is_stereo = tea5767_stereo;	t->standby = tea5767_standby;	return (0);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区精品| 欧美一区二区三区啪啪| 婷婷久久综合九色综合伊人色| 欧美mv和日韩mv的网站| 色婷婷激情久久| 国产呦萝稀缺另类资源| 亚洲在线视频网站| 国产精品麻豆一区二区| 日韩欧美不卡一区| 欧美精品色一区二区三区| av欧美精品.com| 国产麻豆视频一区二区| 亚洲777理论| 亚洲欧美日韩久久精品| 欧美激情一区二区三区四区| 欧美一区二区三区视频在线| 91理论电影在线观看| 国产精品影视天天线| 麻豆精品国产91久久久久久| 一区二区三区精品视频| 亚洲天堂av老司机| 欧美激情综合五月色丁香小说| 日韩欧美在线123| 欧美日本乱大交xxxxx| 色婷婷国产精品| www.视频一区| 成人污污视频在线观看| 国内偷窥港台综合视频在线播放| 午夜激情一区二区三区| 亚洲一区av在线| 一区二区免费在线| 一区二区三区电影在线播| 亚洲男同性恋视频| 亚洲激情欧美激情| 一区二区在线免费观看| 亚洲欧美激情小说另类| 最新日韩在线视频| 另类欧美日韩国产在线| 肉色丝袜一区二区| 午夜精品aaa| 蜜臀av性久久久久av蜜臀妖精| 日本欧美一区二区三区| 免费在线一区观看| 久久电影网电视剧免费观看| 蜜桃av一区二区| 黄色日韩三级电影| 国产91精品一区二区麻豆网站| 成人性生交大片免费| 成人毛片老司机大片| 色综合天天性综合| 91国产福利在线| 欧美日韩国产首页| 欧美xxxxx牲另类人与| 久久一区二区视频| 国产精品久99| 亚洲一区免费在线观看| 日韩**一区毛片| 国产在线精品一区在线观看麻豆| 国产伦理精品不卡| 99久久国产免费看| 欧美日韩在线播放三区| 日韩欧美一级二级| 中文字幕二三区不卡| 亚洲另类春色校园小说| 日本一区中文字幕| 国产精品羞羞答答xxdd| 99久久久久久| 7777精品伊人久久久大香线蕉| 精品国产成人系列| 国产精品成人免费精品自在线观看 | 精品国产麻豆免费人成网站| 久久久欧美精品sm网站| 亚洲日本韩国一区| 日本成人超碰在线观看| 粉嫩在线一区二区三区视频| 91高清在线观看| 精品福利一二区| 亚洲人午夜精品天堂一二香蕉| 日韩一区精品视频| 国产成人精品三级麻豆| 欧美性猛交一区二区三区精品| 精品欧美一区二区在线观看| 成人免费在线播放视频| 日本网站在线观看一区二区三区| 成人免费高清在线| 欧美久久久久久久久久| 国产精品麻豆99久久久久久| 婷婷激情综合网| av成人老司机| 日韩免费电影网站| 亚洲免费伊人电影| 国产毛片一区二区| 欧美日韩小视频| 国产精品女主播av| 久久er精品视频| 欧美三区免费完整视频在线观看| 久久精品欧美日韩精品| 图片区日韩欧美亚洲| a级精品国产片在线观看| 精品国内二区三区| eeuss鲁一区二区三区| 日韩视频免费观看高清完整版在线观看| 欧美韩日一区二区三区四区| 免费观看一级特黄欧美大片| 色婷婷综合久久久中文一区二区 | 国产精品人妖ts系列视频| 日韩国产欧美一区二区三区| 一本到高清视频免费精品| 国产亚洲一二三区| 久久精品国产成人一区二区三区 | 丰满白嫩尤物一区二区| 日韩欧美一卡二卡| 婷婷久久综合九色综合绿巨人| 99久久久无码国产精品| 国产午夜亚洲精品理论片色戒 | 日韩欧美色电影| 亚洲综合色区另类av| av电影一区二区| 国产色综合久久| 国产乱码精品一区二区三| 日韩一级黄色大片| 日精品一区二区| 在线观看亚洲精品| 亚洲欧美另类综合偷拍| 成人性视频免费网站| 国产日韩欧美不卡| 国产一区二区免费在线| 日韩欧美一区二区不卡| 青青青爽久久午夜综合久久午夜| 欧美老人xxxx18| 五月激情丁香一区二区三区| 欧洲精品在线观看| 亚洲狠狠爱一区二区三区| 色哟哟在线观看一区二区三区| 国产精品成人网| 色综合中文字幕| 亚洲日本成人在线观看| 91丨porny丨户外露出| 最新国产成人在线观看| 一本久道久久综合中文字幕 | 日本午夜一本久久久综合| 欧美一区二视频| 秋霞午夜鲁丝一区二区老狼| 91麻豆精品国产91久久久资源速度| 日韩在线观看一区二区| 日韩一区二区三区免费看| 麻豆国产精品官网| 久久综合九色综合97婷婷| 国产黄人亚洲片| 国产精品视频麻豆| 91丝袜国产在线播放| 亚洲美女免费在线| 欧美美女一区二区三区| 免费成人在线视频观看| 精品粉嫩超白一线天av| 成人永久免费视频| 日本一区二区三区dvd视频在线| 波多野结衣一区二区三区 | 国产成人av自拍| 18欧美亚洲精品| 国产精品不卡在线观看| 91一区一区三区| 五月天激情综合| 久久综合久色欧美综合狠狠| 成人一道本在线| 一区二区三区免费看视频| 欧美一区二区久久| 国产成人综合视频| 夜夜嗨av一区二区三区中文字幕| 欧美日韩高清一区二区三区| 精品一区二区精品| 亚洲视频狠狠干| 欧美一区二区三区在| 处破女av一区二区| 天天色天天操综合| 国产亚洲精品精华液| 在线观看精品一区| 国产麻豆精品一区二区| 亚洲女爱视频在线| 欧美大胆人体bbbb| 色综合天天综合网国产成人综合天 | 亚洲欧洲色图综合| 色婷婷久久久综合中文字幕| 亚洲第一福利一区| 国产视频视频一区| 精品视频1区2区| 成人免费视频一区| 日本aⅴ免费视频一区二区三区| 国产精品色一区二区三区| 在线成人高清不卡| 99精品黄色片免费大全| 久久精品国产99国产| 夜夜精品视频一区二区| 欧美韩日一区二区三区| 91精品在线免费| 色诱视频网站一区| 国产成人高清在线| 精品一区中文字幕| 亚洲超丰满肉感bbw| 自拍偷自拍亚洲精品播放|