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

📄 cx23885-cards.c

📁 trident tm5600的linux驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
		/* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM,			Dual channel ATSC and MPEG2 HW Encoder */	case 78521:		/* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM,			Dual channel ATSC and MPEG2 HW Encoder */	case 78531:		/* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, No FM,			Dual channel ATSC and MPEG2 HW Encoder */	case 78631:		/* WinTV-HVR1800 (PCIe, OEM, No IR, No FM,			Dual channel ATSC and MPEG2 HW Encoder */	case 79001:		/* WinTV-HVR1250 (PCIe, Retail, IR, full height,			ATSC and Basic analog */	case 79101:		/* WinTV-HVR1250 (PCIe, Retail, IR, half height,			ATSC and Basic analog */	case 79561:		/* WinTV-HVR1250 (PCIe, OEM, No IR, half height,			ATSC and Basic analog */	case 79571:		/* WinTV-HVR1250 (PCIe, OEM, No IR, full height,		 ATSC and Basic analog */	case 79671:		/* WinTV-HVR1250 (PCIe, OEM, No IR, half height,			ATSC and Basic analog */	case 80019:		/* WinTV-HVR1400 (Express Card, Retail, IR,		 * DVB-T and Basic analog */	case 81509:		/* WinTV-HVR1700 (PCIe, OEM, No IR, half height)		 * DVB-T and MPEG2 HW Encoder */	case 81519:		/* WinTV-HVR1700 (PCIe, OEM, No IR, full height)		 * DVB-T and MPEG2 HW Encoder */		break;	default:		printk(KERN_WARNING "%s: warning: unknown hauppauge model #%d\n",			dev->name, tv.model);		break;	}	printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n",			dev->name, tv.model);}int cx23885_tuner_callback(void *priv, int component, int command, int arg){	struct cx23885_tsport *port = priv;	struct cx23885_dev *dev = port->dev;	u32 bitmask = 0;	if (command == XC2028_RESET_CLK)		return 0;	if (command != 0) {		printk(KERN_ERR "%s(): Unknown command 0x%x.\n",			__func__, command);		return -EINVAL;	}	switch (dev->board) {	case CX23885_BOARD_HAUPPAUGE_HVR1400:	case CX23885_BOARD_HAUPPAUGE_HVR1500:	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:	case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:		/* Tuner Reset Command */		bitmask = 0x04;		break;	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:		/* Two identical tuners on two different i2c buses,		 * we need to reset the correct gpio. */		if (port->nr == 0)			bitmask = 0x01;		else if (port->nr == 1)			bitmask = 0x04;		break;	}	if (bitmask) {		/* Drive the tuner into reset and back out */		cx_clear(GP0_IO, bitmask);		mdelay(200);		cx_set(GP0_IO, bitmask);	}	return 0;}void cx23885_gpio_setup(struct cx23885_dev *dev){	switch (dev->board) {	case CX23885_BOARD_HAUPPAUGE_HVR1250:		/* GPIO-0 cx24227 demodulator reset */		cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */		break;	case CX23885_BOARD_HAUPPAUGE_HVR1500:		/* GPIO-0 cx24227 demodulator */		/* GPIO-2 xc3028 tuner */		/* Put the parts into reset */		cx_set(GP0_IO, 0x00050000);		cx_clear(GP0_IO, 0x00000005);		msleep(5);		/* Bring the parts out of reset */		cx_set(GP0_IO, 0x00050005);		break;	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:		/* GPIO-0 cx24227 demodulator reset */		/* GPIO-2 xc5000 tuner reset */		cx_set(GP0_IO, 0x00050005); /* Bring the part out of reset */		break;	case CX23885_BOARD_HAUPPAUGE_HVR1800:		/* GPIO-0 656_CLK */		/* GPIO-1 656_D0 */		/* GPIO-2 8295A Reset */		/* GPIO-3-10 cx23417 data0-7 */		/* GPIO-11-14 cx23417 addr0-3 */		/* GPIO-15-18 cx23417 READY, CS, RD, WR */		/* GPIO-19 IR_RX */		/* CX23417 GPIO's */		/* EIO15 Zilog Reset */		/* EIO14 S5H1409/CX24227 Reset */		/* Force the TDA8295A into reset and back */		cx_set(GP0_IO, 0x00040004);		mdelay(20);		cx_clear(GP0_IO, 0x00000004);		mdelay(20);		cx_set(GP0_IO, 0x00040004);		mdelay(20);		break;	case CX23885_BOARD_HAUPPAUGE_HVR1200:		/* GPIO-0 tda10048 demodulator reset */		/* GPIO-2 tda18271 tuner reset */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x00050000);		mdelay(20);		cx_clear(GP0_IO, 0x00000005);		mdelay(20);		cx_set(GP0_IO, 0x00050005);		break;	case CX23885_BOARD_HAUPPAUGE_HVR1700:		/* GPIO-0 TDA10048 demodulator reset */		/* GPIO-2 TDA8295A Reset */		/* GPIO-3-10 cx23417 data0-7 */		/* GPIO-11-14 cx23417 addr0-3 */		/* GPIO-15-18 cx23417 READY, CS, RD, WR */		/* The following GPIO's are on the interna AVCore (cx25840) */		/* GPIO-19 IR_RX */		/* GPIO-20 IR_TX 416/DVBT Select */		/* GPIO-21 IIS DAT */		/* GPIO-22 IIS WCLK */		/* GPIO-23 IIS BCLK */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x00050000);		mdelay(20);		cx_clear(GP0_IO, 0x00000005);		mdelay(20);		cx_set(GP0_IO, 0x00050005);		break;	case CX23885_BOARD_HAUPPAUGE_HVR1400:		/* GPIO-0  Dibcom7000p demodulator reset */		/* GPIO-2  xc3028L tuner reset */		/* GPIO-13 LED */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x00050000);		mdelay(20);		cx_clear(GP0_IO, 0x00000005);		mdelay(20);		cx_set(GP0_IO, 0x00050005);		break;	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:		/* GPIO-0 xc5000 tuner reset i2c bus 0 */		/* GPIO-1 s5h1409 demod reset i2c bus 0 */		/* GPIO-2 xc5000 tuner reset i2c bus 1 */		/* GPIO-3 s5h1409 demod reset i2c bus 0 */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x000f0000);		mdelay(20);		cx_clear(GP0_IO, 0x0000000f);		mdelay(20);		cx_set(GP0_IO, 0x000f000f);		break;	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:		/* GPIO-0 portb xc3028 reset */		/* GPIO-1 portb zl10353 reset */		/* GPIO-2 portc xc3028 reset */		/* GPIO-3 portc zl10353 reset */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x000f0000);		mdelay(20);		cx_clear(GP0_IO, 0x0000000f);		mdelay(20);		cx_set(GP0_IO, 0x000f000f);		break;	case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:		/* GPIO-2  xc3028 tuner reset */		/* The following GPIO's are on the internal AVCore (cx25840) */		/* GPIO-?  zl10353 demod reset */		/* Put the parts into reset and back */		cx_set(GP0_IO, 0x00040000);		mdelay(20);		cx_clear(GP0_IO, 0x00000004);		mdelay(20);		cx_set(GP0_IO, 0x00040004);		break;	}}int cx23885_ir_init(struct cx23885_dev *dev){	switch (dev->board) {	case CX23885_BOARD_HAUPPAUGE_HVR1250:	case CX23885_BOARD_HAUPPAUGE_HVR1500:	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:	case CX23885_BOARD_HAUPPAUGE_HVR1800:	case CX23885_BOARD_HAUPPAUGE_HVR1200:	case CX23885_BOARD_HAUPPAUGE_HVR1400:		/* FIXME: Implement me */		break;	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:		request_module("ir-kbd-i2c");		break;	}	return 0;}void cx23885_card_setup(struct cx23885_dev *dev){	struct cx23885_tsport *ts1 = &dev->ts1;	struct cx23885_tsport *ts2 = &dev->ts2;	static u8 eeprom[256];	if (dev->i2c_bus[0].i2c_rc == 0) {		dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;		tveeprom_read(&dev->i2c_bus[0].i2c_client,			      eeprom, sizeof(eeprom));	}	switch (dev->board) {	case CX23885_BOARD_HAUPPAUGE_HVR1250:	case CX23885_BOARD_HAUPPAUGE_HVR1500:	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:	case CX23885_BOARD_HAUPPAUGE_HVR1400:		if (dev->i2c_bus[0].i2c_rc == 0)			hauppauge_eeprom(dev, eeprom+0x80);		break;	case CX23885_BOARD_HAUPPAUGE_HVR1800:	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:	case CX23885_BOARD_HAUPPAUGE_HVR1200:	case CX23885_BOARD_HAUPPAUGE_HVR1700:		if (dev->i2c_bus[0].i2c_rc == 0)			hauppauge_eeprom(dev, eeprom+0xc0);		break;	}	switch (dev->board) {	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;		/* break omitted intentionally */	case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP:		ts1->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */		ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */		ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;		break;	case CX23885_BOARD_HAUPPAUGE_HVR1800:		/* Defaults for VID B - Analog encoder */		/* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */		ts1->gen_ctrl_val    = 0x10e;		ts1->ts_clk_en_val   = 0x1; /* Enable TS_CLK */		ts1->src_sel_val     = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;		/* APB_TSVALERR_POL (active low)*/		ts1->vld_misc_val    = 0x2000;		ts1->hw_sop_ctrl_val = (0x47 << 16 | 188 << 4 | 0xc);		/* Defaults for VID C */		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;		break;	case CX23885_BOARD_HAUPPAUGE_HVR1250:	case CX23885_BOARD_HAUPPAUGE_HVR1500:	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:	case CX23885_BOARD_HAUPPAUGE_HVR1200:	case CX23885_BOARD_HAUPPAUGE_HVR1700:	case CX23885_BOARD_HAUPPAUGE_HVR1400:	case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:	default:		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;	}	/* Certain boards support analog, or require the avcore to be	 * loaded, ensure this happens.	 */	switch (dev->board) {	case CX23885_BOARD_HAUPPAUGE_HVR1800:	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:	case CX23885_BOARD_HAUPPAUGE_HVR1700:	case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:		request_module("cx25840");		break;	}}/* ------------------------------------------------------------------ */

⌨️ 快捷键说明

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