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

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

?? cx24110.c

?? linux內核源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
	while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;	/* send another 8 bytes */	cx24110_writereg(state,0x72,buf[1]);	while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;	/* and the topmost 5 bits of this byte */	cx24110_writereg(state,0x72,buf[2]);	while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;	/* now strobe the enable line once */	cx24110_writereg(state,0x6d,0x32);	cx24110_writereg(state,0x6d,0x30);	return 0;}static int cx24110_initfe(struct dvb_frontend* fe){	struct cx24110_state *state = fe->demodulator_priv;/* fixme (low): error handling */	int i;	dprintk("%s: init chip\n", __FUNCTION__);	for(i = 0; i < ARRAY_SIZE(cx24110_regdata); i++) {		cx24110_writereg(state, cx24110_regdata[i].reg, cx24110_regdata[i].data);	};	return 0;}static int cx24110_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage){	struct cx24110_state *state = fe->demodulator_priv;	switch (voltage) {	case SEC_VOLTAGE_13:		return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&0x3b)|0xc0);	case SEC_VOLTAGE_18:		return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&0x3b)|0x40);	default:		return -EINVAL;	};}static int cx24110_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t burst){	int rv, bit;	struct cx24110_state *state = fe->demodulator_priv;	unsigned long timeout;	if (burst == SEC_MINI_A)		bit = 0x00;	else if (burst == SEC_MINI_B)		bit = 0x08;	else		return -EINVAL;	rv = cx24110_readreg(state, 0x77);	if (!(rv & 0x04))		cx24110_writereg(state, 0x77, rv | 0x04);	rv = cx24110_readreg(state, 0x76);	cx24110_writereg(state, 0x76, ((rv & 0x90) | 0x40 | bit));	timeout = jiffies + msecs_to_jiffies(100);	while (!time_after(jiffies, timeout) && !(cx24110_readreg(state, 0x76) & 0x40))		; /* wait for LNB ready */	return 0;}static int cx24110_send_diseqc_msg(struct dvb_frontend* fe,				   struct dvb_diseqc_master_cmd *cmd){	int i, rv;	struct cx24110_state *state = fe->demodulator_priv;	unsigned long timeout;	if (cmd->msg_len < 3 || cmd->msg_len > 6)		return -EINVAL;  /* not implemented */	for (i = 0; i < cmd->msg_len; i++)		cx24110_writereg(state, 0x79 + i, cmd->msg[i]);	rv = cx24110_readreg(state, 0x77);	if (rv & 0x04) {		cx24110_writereg(state, 0x77, rv & ~0x04);		msleep(30); /* reportedly fixes switching problems */	}	rv = cx24110_readreg(state, 0x76);	cx24110_writereg(state, 0x76, ((rv & 0x90) | 0x40) | ((cmd->msg_len-3) & 3));	timeout = jiffies + msecs_to_jiffies(100);	while (!time_after(jiffies, timeout) && !(cx24110_readreg(state, 0x76) & 0x40))		; /* wait for LNB ready */	return 0;}static int cx24110_read_status(struct dvb_frontend* fe, fe_status_t* status){	struct cx24110_state *state = fe->demodulator_priv;	int sync = cx24110_readreg (state, 0x55);	*status = 0;	if (sync & 0x10)		*status |= FE_HAS_SIGNAL;	if (sync & 0x08)		*status |= FE_HAS_CARRIER;	sync = cx24110_readreg (state, 0x08);	if (sync & 0x40)		*status |= FE_HAS_VITERBI;	if (sync & 0x20)		*status |= FE_HAS_SYNC;	if ((sync & 0x60) == 0x60)		*status |= FE_HAS_LOCK;	return 0;}static int cx24110_read_ber(struct dvb_frontend* fe, u32* ber){	struct cx24110_state *state = fe->demodulator_priv;	/* fixme (maybe): value range is 16 bit. Scale? */	if(cx24110_readreg(state,0x24)&0x10) {		/* the Viterbi error counter has finished one counting window */		cx24110_writereg(state,0x24,0x04); /* select the ber reg */		state->lastber=cx24110_readreg(state,0x25)|			(cx24110_readreg(state,0x26)<<8);		cx24110_writereg(state,0x24,0x04); /* start new count window */		cx24110_writereg(state,0x24,0x14);	}	*ber = state->lastber;	return 0;}static int cx24110_read_signal_strength(struct dvb_frontend* fe, u16* signal_strength){	struct cx24110_state *state = fe->demodulator_priv;/* 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 (state, 0x27)+128;	*signal_strength = (signal << 8) | signal;	return 0;}static int cx24110_read_snr(struct dvb_frontend* fe, u16* snr){	struct cx24110_state *state = fe->demodulator_priv;	/* no provision in hardware. Can be computed from the Es/N0 estimator, but I don't know how. */	if(cx24110_readreg(state,0x6a)&0x80) {		/* the Es/N0 error counter has finished one counting window */		state->lastesn0=cx24110_readreg(state,0x69)|			(cx24110_readreg(state,0x68)<<8);		cx24110_writereg(state,0x6a,0x84); /* start new count window */	}	*snr = state->lastesn0;	return 0;}static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks){	struct cx24110_state *state = fe->demodulator_priv;	u32 lastbyer;	if(cx24110_readreg(state,0x10)&0x40) {		/* the RS error counter has finished one counting window */		cx24110_writereg(state,0x10,0x60); /* select the byer reg */		lastbyer=cx24110_readreg(state,0x12)|			(cx24110_readreg(state,0x13)<<8)|			(cx24110_readreg(state,0x14)<<16);		cx24110_writereg(state,0x10,0x70); /* select the bler reg */		state->lastbler=cx24110_readreg(state,0x12)|			(cx24110_readreg(state,0x13)<<8)|			(cx24110_readreg(state,0x14)<<16);		cx24110_writereg(state,0x10,0x20); /* start new count window */	}	*ucblocks = state->lastbler;	return 0;}static int cx24110_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p){	struct cx24110_state *state = fe->demodulator_priv;	if (fe->ops.tuner_ops.set_params) {		fe->ops.tuner_ops.set_params(fe, p);		if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);	}	cx24110_set_inversion (state, p->inversion);	cx24110_set_fec (state, p->u.qpsk.fec_inner);	cx24110_set_symbolrate (state, p->u.qpsk.symbol_rate);	cx24110_writereg(state,0x04,0x05); /* start aquisition */	return 0;}static int cx24110_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p){	struct cx24110_state *state = fe->demodulator_priv;	s32 afc; unsigned sclk;/* cannot read back tuner settings (freq). Need to have some private storage */	sclk = cx24110_readreg (state, 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 (state, 0x44)&0x1f)+	      ((sclk*cx24110_readreg (state, 0x45))>>8)+	      ((sclk*cx24110_readreg (state, 0x46))>>16);	p->frequency += afc;	p->inversion = (cx24110_readreg (state, 0x22) & 0x10) ?				INVERSION_ON : INVERSION_OFF;	p->u.qpsk.fec_inner = cx24110_get_fec (state);	return 0;}static int cx24110_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone){	struct cx24110_state *state = fe->demodulator_priv;	return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&~0x10)|(((tone==SEC_TONE_ON))?0x10:0));}static void cx24110_release(struct dvb_frontend* fe){	struct cx24110_state* state = fe->demodulator_priv;	kfree(state);}static struct dvb_frontend_ops cx24110_ops;struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,				    struct i2c_adapter* i2c){	struct cx24110_state* state = NULL;	int ret;	/* allocate memory for the internal state */	state = kmalloc(sizeof(struct cx24110_state), GFP_KERNEL);	if (state == NULL) goto error;	/* setup the state */	state->config = config;	state->i2c = i2c;	state->lastber = 0;	state->lastbler = 0;	state->lastesn0 = 0;	/* check if the demod is there */	ret = cx24110_readreg(state, 0x00);	if ((ret != 0x5a) && (ret != 0x69)) goto error;	/* create dvb_frontend */	memcpy(&state->frontend.ops, &cx24110_ops, sizeof(struct dvb_frontend_ops));	state->frontend.demodulator_priv = state;	return &state->frontend;error:	kfree(state);	return NULL;}static struct dvb_frontend_ops cx24110_ops = {	.info = {		.name = "Conexant CX24110 DVB-S",		.type = FE_QPSK,		.frequency_min = 950000,		.frequency_max = 2150000,		.frequency_stepsize = 1011,  /* kHz for QPSK frontends */		.frequency_tolerance = 29500,		.symbol_rate_min = 1000000,		.symbol_rate_max = 45000000,		.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_RECOVER	},	.release = cx24110_release,	.init = cx24110_initfe,	.write = _cx24110_pll_write,	.set_frontend = cx24110_set_frontend,	.get_frontend = cx24110_get_frontend,	.read_status = cx24110_read_status,	.read_ber = cx24110_read_ber,	.read_signal_strength = cx24110_read_signal_strength,	.read_snr = cx24110_read_snr,	.read_ucblocks = cx24110_read_ucblocks,	.diseqc_send_master_cmd = cx24110_send_diseqc_msg,	.set_tone = cx24110_set_tone,	.set_voltage = cx24110_set_voltage,	.diseqc_send_burst = cx24110_diseqc_send_burst,};module_param(debug, int, 0644);MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");MODULE_DESCRIPTION("Conexant CX24110 DVB-S Demodulator driver");MODULE_AUTHOR("Peter Hettkamp");MODULE_LICENSE("GPL");EXPORT_SYMBOL(cx24110_attach);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久| 成人综合婷婷国产精品久久蜜臀| 色婷婷av一区| 日本系列欧美系列| 26uuu精品一区二区| 99re成人精品视频| 亚洲高清在线精品| 精品精品欲导航| 成人免费毛片片v| 亚洲成人资源网| 精品久久人人做人人爰| 色综合久久综合| 蜜臀av性久久久久av蜜臀妖精| 国产日韩一级二级三级| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩欧美第一区| 欧美日韩国产三级| 99久久免费视频.com| 精油按摩中文字幕久久| 亚洲五月六月丁香激情| 国产清纯美女被跳蛋高潮一区二区久久w| 色偷偷一区二区三区| 国产美女视频91| 日韩vs国产vs欧美| 亚洲第一二三四区| 国产精品天干天干在观线| 日韩一区二区三区在线观看| 色婷婷狠狠综合| 成人小视频在线| 成熟亚洲日本毛茸茸凸凹| 精品中文字幕一区二区小辣椒| 亚洲高清免费观看| 三级久久三级久久久| 亚洲午夜三级在线| 三级一区在线视频先锋| 日韩福利视频网| 另类小说欧美激情| 国产原创一区二区三区| 国产91在线观看| 91在线精品一区二区三区| 懂色av中文一区二区三区| 成人免费高清在线| 欧美性受极品xxxx喷水| 在线播放亚洲一区| 欧美成人三级电影在线| 国产亚洲成年网址在线观看| 日本一区二区三区在线不卡| 国产精品久久久久久久久快鸭| 亚洲欧洲制服丝袜| 日产精品久久久久久久性色| 国产成人精品免费在线| 91福利视频久久久久| 日韩三级在线观看| 一区二区免费看| 国产剧情一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 久久―日本道色综合久久| 亚洲线精品一区二区三区八戒| 精品一区二区在线播放| 91国产福利在线| 国产欧美一区二区精品久导航 | 欧美成人欧美edvon| 中文字幕第一区二区| 日韩av中文在线观看| 色综合天天综合网天天狠天天| 日韩视频123| 男人操女人的视频在线观看欧美| 成人午夜在线视频| 国产日韩欧美麻豆| 国产在线精品不卡| 久久夜色精品国产噜噜av| 无码av免费一区二区三区试看 | 欧美一区二区三区免费在线看 | 亚洲午夜精品一区二区三区他趣| 成人高清视频在线观看| 国产日韩精品一区二区三区| 国产一区二区三区免费看| 日韩小视频在线观看专区| 亚洲一二三级电影| 欧美视频一区二区三区| 午夜久久久久久| 日韩三级在线观看| 国产丶欧美丶日本不卡视频| 国产欧美一区二区精品性| 丁香一区二区三区| 亚洲国产精品久久艾草纯爱| 欧美日韩三级视频| 免费成人在线影院| 中文字幕色av一区二区三区| 色婷婷综合久久| 激情综合亚洲精品| 亚洲人成电影网站色mp4| 91麻豆精品国产无毒不卡在线观看 | 粉嫩aⅴ一区二区三区四区| 亚洲丝袜另类动漫二区| 91精品国产福利| 91亚洲精品久久久蜜桃| 日韩电影在线一区二区三区| 国产精品久久免费看| 欧美精品一级二级| 成人h精品动漫一区二区三区| 日韩不卡在线观看日韩不卡视频| 久久美女高清视频| 欧美夫妻性生活| 一本一本久久a久久精品综合麻豆| 美女视频免费一区| 亚洲国产美女搞黄色| 亚洲欧美电影一区二区| 久久精品在线观看| 久久精品男人天堂av| 日韩欧美一区二区在线视频| 在线观看91视频| 色婷婷久久久久swag精品| 国产成人99久久亚洲综合精品| 日韩成人一级片| 精品夜夜嗨av一区二区三区| 奇米影视一区二区三区小说| 日韩va亚洲va欧美va久久| 日韩和欧美的一区| 免费黄网站欧美| 精品一区二区三区免费视频| 韩国中文字幕2020精品| 国产黄色91视频| 色一情一伦一子一伦一区| 欧美三级视频在线| 精品美女被调教视频大全网站| 精品播放一区二区| 日韩毛片视频在线看| 一区二区三区不卡视频| 美日韩一区二区| 国产成人精品一区二| 欧日韩精品视频| xnxx国产精品| 亚洲国产精品视频| 国产中文字幕精品| 色999日韩国产欧美一区二区| 欧美猛男超大videosgay| 久久久欧美精品sm网站| 亚洲午夜精品在线| 成人福利视频网站| 日韩视频在线你懂得| 亚洲老妇xxxxxx| 国产精品一色哟哟哟| 欧美日韩一区二区在线观看视频 | 久久综合九色欧美综合狠狠| 中文字幕在线观看一区| 久久精品国产亚洲一区二区三区| 99精品视频在线观看免费| 精品福利av导航| 日韩1区2区3区| 欧美丝袜第三区| 亚洲精品国久久99热| 99re热视频这里只精品| 国产精品久久99| 成人app在线观看| 成人免费在线播放视频| 国产v日产∨综合v精品视频| wwwwxxxxx欧美| 国产伦理精品不卡| 国产日韩欧美高清| 成人av资源在线| 一区二区在线观看视频| 91啪九色porn原创视频在线观看| 成人免费一区二区三区视频| 99久久精品久久久久久清纯| 中文字幕在线观看不卡视频| 91香蕉国产在线观看软件| 亚洲尤物在线视频观看| 欧美日韩一区二区电影| 久久av中文字幕片| 国产精品私人影院| 欧美日韩国产色站一区二区三区| 肉肉av福利一精品导航| 久久日韩粉嫩一区二区三区| 99久久er热在这里只有精品66| 亚洲精品免费播放| 欧美xxxx在线观看| 在线一区二区三区四区五区| 免费看日韩精品| 亚洲免费观看高清完整版在线观看熊| 日本精品一级二级| 国产一区二区成人久久免费影院| 国产精品不卡在线| 亚洲精品一区在线观看| 91久久久免费一区二区| 极品销魂美女一区二区三区| 一区二区三区精品在线观看| 精品国产乱码久久久久久久| 欧美视频在线一区二区三区| 成人一区在线观看| 韩国v欧美v亚洲v日本v| 天堂资源在线中文精品| 亚洲欧美一区二区三区极速播放| 日韩精品一区在线| 91麻豆精品国产自产在线| 欧美日韩国产区一| 日韩欧美一级在线播放| 欧美日韩aaaaa| 欧美一级在线免费| 日韩三级中文字幕|