⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cx23885-dvb.c

📁 trident tm5600的linux驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Driver for the Conexant CX23885 PCIe bridge * *  Copyright (c) 2006 Steven Toth <stoth@linuxtv.org> * *  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. */#include <linux/module.h>#include <linux/init.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/kthread.h>#include <linux/file.h>#include <linux/suspend.h>#include "compat.h"#include "cx23885.h"#include <media/v4l2-common.h>#include "s5h1409.h"#include "s5h1411.h"#include "mt2131.h"#include "tda8290.h"#include "tda18271.h"#include "lgdt330x.h"#include "xc5000.h"#include "tda10048.h"#include "tuner-xc2028.h"#include "tuner-simple.h"#include "dib7000p.h"#include "dibx000_common.h"#include "zl10353.h"static unsigned int debug;#define dprintk(level, fmt, arg...)\	do { if (debug >= level)\		printk(KERN_DEBUG "%s/0: " fmt, dev->name, ## arg);\	} while (0)/* ------------------------------------------------------------------ */static unsigned int alt_tuner;module_param(alt_tuner, int, 0644);MODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration");DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);/* ------------------------------------------------------------------ */static int dvb_buf_setup(struct videobuf_queue *q,			 unsigned int *count, unsigned int *size){	struct cx23885_tsport *port = q->priv_data;	port->ts_packet_size  = 188 * 4;	port->ts_packet_count = 32;	*size  = port->ts_packet_size * port->ts_packet_count;	*count = 32;	return 0;}static int dvb_buf_prepare(struct videobuf_queue *q,			   struct videobuf_buffer *vb, enum v4l2_field field){	struct cx23885_tsport *port = q->priv_data;	return cx23885_buf_prepare(q, port, (struct cx23885_buffer *)vb, field);}static void dvb_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb){	struct cx23885_tsport *port = q->priv_data;	cx23885_buf_queue(port, (struct cx23885_buffer *)vb);}static void dvb_buf_release(struct videobuf_queue *q,			    struct videobuf_buffer *vb){	cx23885_free_buffer(q, (struct cx23885_buffer *)vb);}static struct videobuf_queue_ops dvb_qops = {	.buf_setup    = dvb_buf_setup,	.buf_prepare  = dvb_buf_prepare,	.buf_queue    = dvb_buf_queue,	.buf_release  = dvb_buf_release,};static struct s5h1409_config hauppauge_generic_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_ON,	.qam_if        = 44000,	.inversion     = S5H1409_INVERSION_OFF,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct tda10048_config hauppauge_hvr1200_config = {	.demod_address    = 0x10 >> 1,	.output_mode      = TDA10048_SERIAL_OUTPUT,	.fwbulkwritelen   = TDA10048_BULKWRITE_200,	.inversion        = TDA10048_INVERSION_ON};static struct s5h1409_config hauppauge_ezqam_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_OFF,	.qam_if        = 4000,	.inversion     = S5H1409_INVERSION_ON,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct s5h1409_config hauppauge_hvr1800lp_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_OFF,	.qam_if        = 44000,	.inversion     = S5H1409_INVERSION_OFF,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct s5h1409_config hauppauge_hvr1500_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_OFF,	.inversion     = S5H1409_INVERSION_OFF,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct mt2131_config hauppauge_generic_tunerconfig = {	0x61};static struct lgdt330x_config fusionhdtv_5_express = {	.demod_address = 0x0e,	.demod_chip = LGDT3303,	.serial_mpeg = 0x40,};static struct s5h1409_config hauppauge_hvr1500q_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_ON,	.qam_if        = 44000,	.inversion     = S5H1409_INVERSION_OFF,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct s5h1409_config dvico_s5h1409_config = {	.demod_address = 0x32 >> 1,	.output_mode   = S5H1409_SERIAL_OUTPUT,	.gpio          = S5H1409_GPIO_ON,	.qam_if        = 44000,	.inversion     = S5H1409_INVERSION_OFF,	.status_mode   = S5H1409_DEMODLOCKING,	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct s5h1411_config dvico_s5h1411_config = {	.output_mode   = S5H1411_SERIAL_OUTPUT,	.gpio          = S5H1411_GPIO_ON,	.qam_if        = S5H1411_IF_44000,	.vsb_if        = S5H1411_IF_44000,	.inversion     = S5H1411_INVERSION_OFF,	.status_mode   = S5H1411_DEMODLOCKING,	.mpeg_timing   = S5H1411_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,};static struct xc5000_config hauppauge_hvr1500q_tunerconfig = {	.i2c_address      = 0x61,	.if_khz           = 5380,};static struct xc5000_config dvico_xc5000_tunerconfig = {	.i2c_address      = 0x64,	.if_khz           = 5380,};static struct tda829x_config tda829x_no_probe = {	.probe_tuner = TDA829X_DONT_PROBE,};static struct tda18271_std_map hauppauge_tda18271_std_map = {	.atsc_6   = { .if_freq = 5380, .agc_mode = 3, .std = 3,		      .if_lvl = 6, .rfagc_top = 0x37 },	.qam_6    = { .if_freq = 4000, .agc_mode = 3, .std = 0,		      .if_lvl = 6, .rfagc_top = 0x37 },};static struct tda18271_config hauppauge_tda18271_config = {	.std_map = &hauppauge_tda18271_std_map,	.gate    = TDA18271_GATE_ANALOG,};static struct tda18271_config hauppauge_hvr1200_tuner_config = {	.gate    = TDA18271_GATE_ANALOG,};static struct dibx000_agc_config xc3028_agc_config = {	BAND_VHF | BAND_UHF,	/* band_caps */	/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=0,	 * P_agc_inv_pwm1=0, P_agc_inv_pwm2=0,	 * P_agc_inh_dc_rv_est=0, P_agc_time_est=3, P_agc_freeze=0,	 * P_agc_nb_est=2, P_agc_write=0	 */	(0 << 15) | (0 << 14) | (0 << 11) | (0 << 10) | (0 << 9) | (0 << 8) |		(3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), /* setup */	712,	/* inv_gain */	21,	/* time_stabiliz */	0,	/* alpha_level */	118,	/* thlock */	0,	/* wbd_inv */	2867,	/* wbd_ref */	0,	/* wbd_sel */	2,	/* wbd_alpha */	0,	/* agc1_max */	0,	/* agc1_min */	39718,	/* agc2_max */	9930,	/* agc2_min */	0,	/* agc1_pt1 */	0,	/* agc1_pt2 */	0,	/* agc1_pt3 */	0,	/* agc1_slope1 */	0,	/* agc1_slope2 */	0,	/* agc2_pt1 */	128,	/* agc2_pt2 */	29,	/* agc2_slope1 */	29,	/* agc2_slope2 */	17,	/* alpha_mant */	27,	/* alpha_exp */	23,	/* beta_mant */	51,	/* beta_exp */	1,	/* perform_agc_softsplit */};/* PLL Configuration for COFDM BW_MHz = 8.000000 * With external clock = 30.000000 */static struct dibx000_bandwidth_config xc3028_bw_config = {	60000,	/* internal */	30000,	/* sampling */	1,	/* pll_cfg: prediv */	8,	/* pll_cfg: ratio */	3,	/* pll_cfg: range */	1,	/* pll_cfg: reset */	0,	/* pll_cfg: bypass */	0,	/* misc: refdiv */	0,	/* misc: bypclk_div */	1,	/* misc: IO_CLK_en_core */	1,	/* misc: ADClkSrc */	0,	/* misc: modulo */	(3 << 14) | (1 << 12) | (524 << 0), /* sad_cfg: refsel, sel, freq_15k */	(1 << 25) | 5816102, /* ifreq = 5.200000 MHz */	20452225, /* timf */	30000000  /* xtal_hz */};static struct dib7000p_config hauppauge_hvr1400_dib7000_config = {	.output_mpeg2_in_188_bytes = 1,	.hostbus_diversity = 1,	.tuner_is_baseband = 0,	.update_lna  = NULL,	.agc_config_count = 1,	.agc = &xc3028_agc_config,	.bw  = &xc3028_bw_config,	.gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS,	.gpio_val = DIB7000P_GPIO_DEFAULT_VALUES,	.gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS,	.pwm_freq_div = 0,	.agc_control  = NULL,	.spur_protect = 0,	.output_mode = OUTMODE_MPEG2_SERIAL,};static struct zl10353_config dvico_fusionhdtv_xc3028 = {	.demod_address = 0x0f,	.if2           = 45600,	.no_tuner      = 1,};static int dvb_register(struct cx23885_tsport *port){	struct cx23885_dev *dev = port->dev;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -