saa7134-cards.c

来自「底层驱动开发」· C语言 代码 · 共 2,693 行 · 第 1/5 页

C
2,693
字号
	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x153B,		.subdevice    = 0x1158,		.driver_data  = SAA7134_BOARD_CINERGY600_MK3,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x153b,		.subdevice    = 0x1162,		.driver_data  = SAA7134_BOARD_CINERGY400_CARDBUS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x5168,		.subdevice    = 0x0138,		.driver_data  = SAA7134_BOARD_FLYVIDEO3000,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x4e42,				/* "Typhoon PCI Capture TV Card" Art.No. 50673 */		.subdevice    = 0x0138,		.driver_data  = SAA7134_BOARD_FLYVIDEO3000,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x5168,		.subdevice    = 0x0138,		.driver_data  = SAA7134_BOARD_FLYVIDEO2000,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x5168,		.subdevice    = 0x0212, /* minipci, LR212 */		.driver_data  = SAA7134_BOARD_FLYTVPLATINUM_MINI,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x5168,	/* Animation Technologies (LifeView) */		.subdevice    = 0x0214, /* Standard PCI, LR214WF */		.driver_data  = SAA7134_BOARD_FLYTVPLATINUM_FM,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1489, /* KYE */		.subdevice    = 0x0214, /* Genius VideoWonder ProTV */		.driver_data  = SAA7134_BOARD_FLYTVPLATINUM_FM, /* is an LR214WF actually */	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x16be,		.subdevice    = 0x0003,		.driver_data  = SAA7134_BOARD_MD7134,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1048,		.subdevice    = 0x226b,		.driver_data  = SAA7134_BOARD_ELSA,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1048,		.subdevice    = 0x226b,		.driver_data  = SAA7134_BOARD_ELSA_500TV,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_VENDOR_ID_ASUSTEK,		.subdevice    = 0x4842,		.driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = PCI_VENDOR_ID_ASUSTEK,		.subdevice    = 0x4845,		.driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7135,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_VENDOR_ID_ASUSTEK,		.subdevice    = 0x4830,		.driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = PCI_VENDOR_ID_ASUSTEK,		.subdevice    = 0x4843,		.driver_data  = SAA7134_BOARD_ASUSTEK_TVFM7133,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_VENDOR_ID_ASUSTEK,		.subdevice    = 0x4840,		.driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_VENDOR_ID_PHILIPS,		.subdevice    = 0xfe01,		.driver_data  = SAA7134_BOARD_TVSTATION_RDS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1894,		.subdevice    = 0xfe01,		.driver_data  = SAA7134_BOARD_TVSTATION_RDS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1894,		.subdevice    = 0xa006,		.driver_data  = SAA7134_BOARD_TVSTATION_DVR,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1131,		.subdevice    = 0x7133,		.driver_data  = SAA7134_BOARD_VA1000POWER,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = PCI_VENDOR_ID_PHILIPS,		.subdevice    = 0x2001,		.driver_data  = SAA7134_BOARD_10MOONSTVMASTER,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x185b,		.subdevice    = 0xc100,		.driver_data  = SAA7134_BOARD_VIDEOMATE_TV,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x185b,		.subdevice    = 0xc100,		.driver_data  = SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = PCI_VENDOR_ID_MATROX,		.subdevice    = 0x48d0,		.driver_data  = SAA7134_BOARD_CRONOS_PLUS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0xa70b,		.driver_data  = SAA7134_BOARD_MD2819,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0x2115,		.driver_data  = SAA7134_BOARD_AVERMEDIA_STUDIO_305,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0x2108,		.driver_data  = SAA7134_BOARD_AVERMEDIA_305,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0x10ff,		.driver_data  = SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER,	},{		/* AVerMedia CardBus */		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0xd6ee,		.driver_data  = SAA7134_BOARD_AVERMEDIA_CARDBUS,	},{		/* TransGear 3000TV */		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0x050c,		.driver_data  = SAA7134_BOARD_TG3000TV,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x11bd,		.subdevice    = 0x002b,		.driver_data  = SAA7134_BOARD_PINNACLE_PCTV_STEREO,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x11bd,		.subdevice    = 0x002d,		.driver_data  = SAA7134_BOARD_PINNACLE_300I_DVBT_PAL,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1019,		.subdevice    = 0x4cb4,		.driver_data  = SAA7134_BOARD_ECS_TVP3XP,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1019,		.subdevice    = 0x4cb5,		.driver_data  = SAA7134_BOARD_ECS_TVP3XP_4CB5,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x12ab,		.subdevice    = 0x0800,		.driver_data  = SAA7134_BOARD_UPMOST_PURPLE_TV,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x153B,		.subdevice    = 0x1152,		.driver_data  = SAA7134_BOARD_CINERGY200,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = 0x185b,		.subdevice    = 0xc100,		.driver_data  = SAA7134_BOARD_VIDEOMATE_TV_PVR,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0x9715,		.driver_data  = SAA7134_BOARD_AVERMEDIA_STUDIO_307,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0xa70a,		.driver_data  = SAA7134_BOARD_AVERMEDIA_307,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x185b,		.subdevice    = 0xc200,		.driver_data  = SAA7134_BOARD_VIDEOMATE_GOLD_PLUS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1540,		.subdevice    = 0x9524,		.driver_data  = SAA7134_BOARD_PROVIDEO_PV952,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x5168,		.subdevice    = 0x0502,                /* Cardbus version */		.driver_data  = SAA7134_BOARD_FLYDVBTDUO,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x5168,		.subdevice    = 0x0306,                /* PCI version */		.driver_data  = SAA7134_BOARD_FLYDVBTDUO,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1461, /* Avermedia Technologies Inc */		.subdevice    = 0xf31f,		.driver_data  = SAA7134_BOARD_AVERMEDIA_GO_007_FM,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = PCI_VENDOR_ID_PHILIPS,		.subdevice    = 0x2004,		.driver_data  = SAA7134_BOARD_PHILIPS_TOUGH,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1421,		.subdevice    = 0x0350,		/* PCI version */		.driver_data  = SAA7134_BOARD_ADS_INSTANT_TV,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1421,		.subdevice    = 0x0370,		/* cardbus version */		.driver_data  = SAA7134_BOARD_ADS_INSTANT_TV,	},{     /* Typhoon DVB-T Duo Digital/Analog Cardbus */		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x4e42,		.subdevice    = 0x0502,		.driver_data  = SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = 0x1043,		.subdevice    = 0x0210,		/* mini pci NTSC version */		.driver_data  = SAA7134_BOARD_FLYTV_DIGIMATRIX,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = 0x1043,		.subdevice    = 0x0210,		/* mini pci PAL/SECAM version */		.driver_data  = SAA7134_BOARD_FLYTV_DIGIMATRIX,	},{		/* --- boards without eeprom + subsystem ID --- */		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_VENDOR_ID_PHILIPS,		.subdevice    = 0,		.driver_data  = SAA7134_BOARD_NOAUTO,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = PCI_VENDOR_ID_PHILIPS,		.subdevice    = 0,		.driver_data  = SAA7134_BOARD_NOAUTO,	},{		/* --- default catch --- */		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7130,		.subvendor    = PCI_ANY_ID,		.subdevice    = PCI_ANY_ID,		.driver_data  = SAA7134_BOARD_UNKNOWN,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,		.subvendor    = PCI_ANY_ID,		.subdevice    = PCI_ANY_ID,		.driver_data  = SAA7134_BOARD_UNKNOWN,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,		.subvendor    = PCI_ANY_ID,		.subdevice    = PCI_ANY_ID,		.driver_data  = SAA7134_BOARD_UNKNOWN,	},{		.vendor       = PCI_VENDOR_ID_PHILIPS,		.device       = PCI_DEVICE_ID_PHILIPS_SAA7135,		.subvendor    = PCI_ANY_ID,		.subdevice    = PCI_ANY_ID,		.driver_data  = SAA7134_BOARD_UNKNOWN,	},{		/* --- end of list --- */	}};MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);/* ----------------------------------------------------------- *//* flyvideo tweaks                                             */static void board_flyvideo(struct saa7134_dev *dev){	printk("%s: there are different flyvideo cards with different tuners\n"	       "%s: out there, you might have to use the tuner=<nr> insmod\n"	       "%s: option to override the default value.\n",	       dev->name, dev->name, dev->name);}/* ----------------------------------------------------------- */int saa7134_board_init1(struct saa7134_dev *dev){	/* Always print gpio, often manufacturers encode tuner type and other info. */	saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);	dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);	printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);	switch (dev->board) {	case SAA7134_BOARD_FLYVIDEO2000:	case SAA7134_BOARD_FLYVIDEO3000:		dev->has_remote = 1;		board_flyvideo(dev);		break;	case SAA7134_BOARD_FLYTVPLATINUM_FM:	case SAA7134_BOARD_CINERGY400:	case SAA7134_BOARD_CINERGY600:	case SAA7134_BOARD_CINERGY600_MK3:	case SAA7134_BOARD_ECS_TVP3XP:	case SAA7134_BOARD_ECS_TVP3XP_4CB5:	case SAA7134_BOARD_MD2819:	case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:	case SAA7134_BOARD_KWORLD_XPERT:	case SAA7134_BOARD_AVERMEDIA_STUDIO_305:	case SAA7134_BOARD_AVERMEDIA_305:	case SAA7134_BOARD_AVERMEDIA_STUDIO_307:	case SAA7134_BOARD_AVERMEDIA_307:	case SAA7134_BOARD_AVERMEDIA_GO_007_FM:/*      case SAA7134_BOARD_SABRENT_SBTTVFM:  */ /* not finished yet */	case SAA7134_BOARD_VIDEOMATE_TV_PVR:	case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII:	case SAA7134_BOARD_MANLI_MTV001:	case SAA7134_BOARD_MANLI_MTV002:	case SAA7134_BOARD_AVACSSMARTTV:		dev->has_remote = 1;		break;	case SAA7134_BOARD_MD5044:		printk("%s: seems there are two different versions of the MD5044\n"		"%s: (with the same ID) out there.  If sound doesn't work for\n"		"%s: you try the audio_clock_override=0x200000 insmod option.\n",		dev->name,dev->name,dev->name);		break;	case SAA7134_BOARD_CINERGY400_CARDBUS:		/* power-up tuner chip */		saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x00040000, 0x00040000);		saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00040000, 0x00000000);		msleep(1);		break;	case SAA7134_BOARD_FLYDVBTDUO:	case SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS:	/* turn the fan on Hac: static for the time being */		saa_writeb(SAA7134_GPIO_GPMODE3, 0x08);		saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x06);		break;	case SAA7134_BOARD_AVERMEDIA_CARDBUS:		/* power-up tuner chip */		saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0xffffffff, 0xffffffff);		saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff);		msleep(1);		break;	}	return 0;}/* stuff which needs working i2c */int saa7134_board_init2(struct saa7134_dev *dev){	unsigned char buf;	int board;	switch (dev->board) {	case SAA7134_BOARD_BMK_MPEX_NOTUNER:	case SAA7134_BOARD_BMK_MPEX_TUNER:		dev->i2c_client.addr = 0x60;		board = (i2c_master_recv(&dev->i2c_client,&buf,0) < 0)			? SAA7134_BOARD_BMK_MPEX_NOTUNER			: SAA7134_BOARD_BMK_MPEX_TUNER;		if (board == dev->board)			break;		dev->board = board;		printk("%s: board type fixup: %s\n", dev->name,		saa7134_boards[dev->board].name);		dev->tuner_type = saa7134_boards[dev->board].tuner_type;		if (TUNER_ABSENT != dev->tuner_type) {				struct tuner_setup tun_setup;				tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;				tun_setup.type = dev->tuner_type;				tun_setup.addr = ADDR_UNSET;				saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR, &tun_setup);		}		break;case SAA7134_BOARD_MD7134:		{		struct tuner_setup tun_setup;		u8 subaddr;		u8 data[3];		int ret, tuner_t;		struct i2c_msg msg[] = {{.addr=0x50, .flags=0, .buf=&subaddr, .len = 1},					{.addr=0x50, .flags=I2C_M_RD, .buf=data, .len = 3}};		subaddr= 0x14;		tuner_t = 0;		ret = i2c_transfer(&dev->i2c_adap, msg, 2);		if (ret != 2) {			printk(KERN_ERR "EEPROM read failure\n");		} else if ((data[0] != 0) && (data[0] != 0xff)) {			/* old config structure */			subaddr = data[0] + 2;			msg[1].len = 2;			i2c_transfer(&dev->i2c_adap, msg, 2);			tuner_t = (data[0] << 8) + data[1];			switch (tuner_t){			case 0x0103:				dev->tuner_type = TUNER_PHILIPS_PAL;				break;			case 0x010C:				dev->tuner_type = TUNER_PHILIPS_FM1216ME_MK3;				break;			default:				printk(KERN_ERR "%s Cant determine tuner type %x from EEPROM\n", dev->name, tuner_t);			}		} else if ((data[1] != 0) && (data[1] != 0xff)) {			/* new config structure */			subaddr = data[1] + 1;			msg[1].len = 1;			i2c_transfer(&dev->i2c_adap, msg, 2);			subaddr = data[0] + 1;			msg[1].len = 2;			i2c_transfer(&dev->i2c_adap, msg, 2);			tuner_t = (data[1] << 8) + data[0];			switch (tuner_t) {			case 0x0005:				dev->tuner_type = TUNER_PHILIPS_FM1216ME_MK3;				break;			case 0x001d:				dev->tuner_type = TUNER_PHILIPS_FMD1216ME_MK3;					printk(KERN_INFO "%s Board has DVB-T\n", dev->name);				break;			default:				printk(KERN_ERR "%s Cant determine tuner type %x from EEPROM\n", dev->name, tuner_t);			}		} else {			printk(KERN_ERR "%s unexpected config structure\n", dev->name);		}		printk(KERN_INFO "%s Tuner type is %d\n", dev->name, dev->tuner_type);		if (dev->tuner_type == TUNER_PHILIPS_FMD1216ME_MK3) {			dev->tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | TDA9887_PORT2_ACTIVE;			saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG, &dev->tda9887_conf);		}		tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;		tun_setup.type = dev->tuner_type;		tun_setup.addr = ADDR_UNSET;		saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR,&tun_setup);		}		break;	}	return 0;}/* ----------------------------------------------------------- *//* * Local variables: * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

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