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

📄 cx88-dvb.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		}		break;	case CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1:	case CX88_BOARD_CONEXANT_DVB_T1:	case CX88_BOARD_KWORLD_DVB_T_CX22702:	case CX88_BOARD_WINFAST_DTV1000:		dev->dvb.frontend = dvb_attach(cx22702_attach,					       &connexant_refboard_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60,				   &dev->core->i2c_adap,				   DVB_PLL_THOMSON_DTT7579);		}		break;	case CX88_BOARD_WINFAST_DTV2000H:	case CX88_BOARD_HAUPPAUGE_HVR1100:	case CX88_BOARD_HAUPPAUGE_HVR1100LP:	case CX88_BOARD_HAUPPAUGE_HVR1300:	case CX88_BOARD_HAUPPAUGE_HVR3000:		dev->dvb.frontend = dvb_attach(cx22702_attach,					       &hauppauge_hvr_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap, DVB_PLL_FMD1216ME);		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:		dev->dvb.frontend = dvb_attach(mt352_attach,					       &dvico_fusionhdtv,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60,				   NULL, DVB_PLL_THOMSON_DTT7579);			break;		}		/* ZL10353 replaces MT352 on later cards */		dev->dvb.frontend = dvb_attach(zl10353_attach,					       &dvico_fusionhdtv_plus_v1_1,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60,				   NULL, DVB_PLL_THOMSON_DTT7579);		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:		/* The tin box says DEE1601, but it seems to be DTT7579		 * compatible, with a slightly different MT352 AGC gain. */		dev->dvb.frontend = dvb_attach(mt352_attach,					       &dvico_fusionhdtv_dual,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   NULL, DVB_PLL_THOMSON_DTT7579);			break;		}		/* ZL10353 replaces MT352 on later cards */		dev->dvb.frontend = dvb_attach(zl10353_attach,					       &dvico_fusionhdtv_plus_v1_1,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   NULL, DVB_PLL_THOMSON_DTT7579);		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:		dev->dvb.frontend = dvb_attach(mt352_attach,					       &dvico_fusionhdtv,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   NULL, DVB_PLL_LG_Z201);		}		break;	case CX88_BOARD_KWORLD_DVB_T:	case CX88_BOARD_DNTV_LIVE_DVB_T:	case CX88_BOARD_ADSTECH_DVB_T_PCI:		dev->dvb.frontend = dvb_attach(mt352_attach,					       &dntv_live_dvbt_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   NULL, DVB_PLL_UNKNOWN_1);		}		break;	case CX88_BOARD_DNTV_LIVE_DVB_T_PRO:#if defined(CONFIG_VIDEO_CX88_VP3054) || (defined(CONFIG_VIDEO_CX88_VP3054_MODULE) && defined(MODULE))		/* MT352 is on a secondary I2C bus made from some GPIO lines */		dev->dvb.frontend = dvb_attach(mt352_attach, &dntv_live_dvbt_pro_config,					       &dev->vp3054->adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap, DVB_PLL_FMD1216ME);		}#else		printk(KERN_ERR "%s/2: built without vp3054 support\n", dev->core->name);#endif		break;	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:		dev->dvb.frontend = dvb_attach(zl10353_attach,					       &dvico_fusionhdtv_hybrid,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_THOMSON_FE6600);		}		break;	case CX88_BOARD_PCHDTV_HD3000:		dev->dvb.frontend = dvb_attach(or51132_attach, &pchdtv_hd3000,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_THOMSON_DTT761X);		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q:		dev->ts_gen_cntrl = 0x08;		{		/* Do a hardware reset of chip before using it. */		struct cx88_core *core = dev->core;		cx_clear(MO_GP0_IO, 1);		mdelay(100);		cx_set(MO_GP0_IO, 1);		mdelay(200);		/* Select RF connector callback */		fusionhdtv_3_gold.pll_rf_set = lgdt330x_pll_rf_set;		dev->dvb.frontend = dvb_attach(lgdt330x_attach,					       &fusionhdtv_3_gold,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_MICROTUNE_4042);		}		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T:		dev->ts_gen_cntrl = 0x08;		{		/* Do a hardware reset of chip before using it. */		struct cx88_core *core = dev->core;		cx_clear(MO_GP0_IO, 1);		mdelay(100);		cx_set(MO_GP0_IO, 9);		mdelay(200);		dev->dvb.frontend = dvb_attach(lgdt330x_attach,					       &fusionhdtv_3_gold,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_THOMSON_DTT761X);		}		}		break;	case CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD:		dev->ts_gen_cntrl = 0x08;		{		/* Do a hardware reset of chip before using it. */		struct cx88_core *core = dev->core;		cx_clear(MO_GP0_IO, 1);		mdelay(100);		cx_set(MO_GP0_IO, 1);		mdelay(200);		dev->dvb.frontend = dvb_attach(lgdt330x_attach,					       &fusionhdtv_5_gold,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_LG_TDVS_H06XF);		}		}		break;	case CX88_BOARD_PCHDTV_HD5500:		dev->ts_gen_cntrl = 0x08;		{		/* Do a hardware reset of chip before using it. */		struct cx88_core *core = dev->core;		cx_clear(MO_GP0_IO, 1);		mdelay(100);		cx_set(MO_GP0_IO, 1);		mdelay(200);		dev->dvb.frontend = dvb_attach(lgdt330x_attach,					       &pchdtv_hd5500,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   &dev->core->i2c_adap,				   DVB_PLL_LG_TDVS_H06XF);		}		}		break;	case CX88_BOARD_ATI_HDTVWONDER:		dev->dvb.frontend = dvb_attach(nxt200x_attach,					       &ati_hdtvwonder,					       &dev->core->i2c_adap);		if (dev->dvb.frontend != NULL) {			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,				   NULL, DVB_PLL_TUV1236D);		}		break;	case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:	case CX88_BOARD_HAUPPAUGE_NOVASE2_S1:		dev->dvb.frontend = dvb_attach(cx24123_attach,					       &hauppauge_novas_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend) {			dvb_attach(isl6421_attach, dev->dvb.frontend,				   &dev->core->i2c_adap, 0x08, 0x00, 0x00);		}		break;	case CX88_BOARD_KWORLD_DVBS_100:		dev->dvb.frontend = dvb_attach(cx24123_attach,					       &kworld_dvbs_100_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend) {			dev->core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage;			dev->dvb.frontend->ops.set_voltage = kworld_dvbs_100_set_voltage;		}		break;	case CX88_BOARD_GENIATECH_DVBS:		dev->dvb.frontend = dvb_attach(cx24123_attach,					       &geniatech_dvbs_config,					       &dev->core->i2c_adap);		if (dev->dvb.frontend) {			dev->core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage;			dev->dvb.frontend->ops.set_voltage = geniatech_dvbs_set_voltage;		}		break;	default:		printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n",		       dev->core->name);		break;	}	if (NULL == dev->dvb.frontend) {		printk(KERN_ERR "%s/2: frontend initialization failed\n", dev->core->name);		return -1;	}	/* Ensure all frontends negotiate bus access */	dev->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl;	/* Put the analog decoder in standby to keep it quiet */	cx88_call_i2c_clients (dev->core, TUNER_SET_STANDBY, NULL);	/* register everything */	return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev);}/* ----------------------------------------------------------- *//* CX8802 MPEG -> mini driver - We have been given the hardware */static int cx8802_dvb_advise_acquire(struct cx8802_driver *drv){	struct cx88_core *core = drv->core;	int err = 0;	dprintk( 1, "%s\n", __FUNCTION__);	switch (core->boardnr) {	case CX88_BOARD_HAUPPAUGE_HVR1300:		/* We arrive here with either the cx23416 or the cx22702		 * on the bus. Take the bus from the cx23416 and enable the		 * cx22702 demod		 */		cx_set(MO_GP0_IO,   0x00000080); /* cx22702 out of reset and enable */		cx_clear(MO_GP0_IO, 0x00000004);		udelay(1000);		break;	default:		err = -ENODEV;	}	return err;}/* CX8802 MPEG -> mini driver - We no longer have the hardware */static int cx8802_dvb_advise_release(struct cx8802_driver *drv){	struct cx88_core *core = drv->core;	int err = 0;	dprintk( 1, "%s\n", __FUNCTION__);	switch (core->boardnr) {	case CX88_BOARD_HAUPPAUGE_HVR1300:		/* Do Nothing, leave the cx22702 on the bus. */		break;	default:		err = -ENODEV;	}	return err;}static int cx8802_dvb_probe(struct cx8802_driver *drv){	struct cx88_core *core = drv->core;	struct cx8802_dev *dev = drv->core->dvbdev;	int err;	dprintk( 1, "%s\n", __FUNCTION__);	dprintk( 1, " ->being probed by Card=%d Name=%s, PCI %02x:%02x\n",		core->boardnr,		core->name,		core->pci_bus,		core->pci_slot);	err = -ENODEV;	if (!(core->board.mpeg & CX88_MPEG_DVB))		goto fail_core;	/* If vp3054 isn't enabled, a stub will just return 0 */	err = vp3054_i2c_probe(dev);	if (0 != err)		goto fail_core;	/* dvb stuff */	printk(KERN_INFO "%s/2: cx2388x based DVB/ATSC card\n", core->name);	videobuf_queue_pci_init(&dev->dvb.dvbq, &dvb_qops,			    dev->pci, &dev->slock,			    V4L2_BUF_TYPE_VIDEO_CAPTURE,			    V4L2_FIELD_TOP,			    sizeof(struct cx88_buffer),			    dev);	err = dvb_register(dev);	if (err != 0)		printk(KERN_ERR "%s/2: dvb_register failed (err = %d)\n",		       core->name, err); fail_core:	return err;}static int cx8802_dvb_remove(struct cx8802_driver *drv){	struct cx8802_dev *dev = drv->core->dvbdev;	/* dvb */	videobuf_dvb_unregister(&dev->dvb);	vp3054_i2c_remove(dev);	return 0;}static struct cx8802_driver cx8802_dvb_driver = {	.type_id        = CX88_MPEG_DVB,	.hw_access      = CX8802_DRVCTL_SHARED,	.probe          = cx8802_dvb_probe,	.remove         = cx8802_dvb_remove,	.advise_acquire = cx8802_dvb_advise_acquire,	.advise_release = cx8802_dvb_advise_release,};static int dvb_init(void){	printk(KERN_INFO "cx88/2: cx2388x dvb driver version %d.%d.%d loaded\n",	       (CX88_VERSION_CODE >> 16) & 0xff,	       (CX88_VERSION_CODE >>  8) & 0xff,	       CX88_VERSION_CODE & 0xff);#ifdef SNAPSHOT	printk(KERN_INFO "cx2388x: snapshot date %04d-%02d-%02d\n",	       SNAPSHOT/10000, (SNAPSHOT/100)%100, SNAPSHOT%100);#endif	return cx8802_register_driver(&cx8802_dvb_driver);}static void dvb_fini(void){	cx8802_unregister_driver(&cx8802_dvb_driver);}module_init(dvb_init);module_exit(dvb_fini);/* * Local variables: * c-basic-offset: 8 * compile-command: "make DVB=1" * End: */

⌨️ 快捷键说明

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