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

📄 dib0700_devices.c

📁 trident tm5600的linux驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	if (desc->idVendor  == cpu_to_le16(USB_VID_PINNACLE) &&	    desc->idProduct == cpu_to_le16(USB_PID_PINNACLE_EXPRESSCARD_320CX))	dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0);	else	dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1);	msleep(20);	dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1);	dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1);	dib0700_set_gpio(adap->dev, GPIO7, GPIO_OUT, 1);	dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0);	msleep(10);	dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);	msleep(20);	dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);	msleep(10);	dib7000p_i2c_enumeration(&adap->dev->i2c_adap, 1, 18,		&stk7700ph_dib7700_xc3028_config);	adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,		&stk7700ph_dib7700_xc3028_config);	return adap->fe == NULL ? -ENODEV : 0;}static int stk7700ph_tuner_attach(struct dvb_usb_adapter *adap){	struct i2c_adapter *tun_i2c;	tun_i2c = dib7000p_get_i2c_master(adap->fe,		DIBX000_I2C_INTERFACE_TUNER, 1);	stk7700ph_xc3028_config.i2c_adap = tun_i2c;	/* FIXME: generalize & move to common area */	adap->fe->callback = stk7700ph_xc3028_callback;	return dvb_attach(xc2028_attach, adap->fe, &stk7700ph_xc3028_config)		== NULL ? -ENODEV : 0;}#define DEFAULT_RC_INTERVAL 150static u8 rc_request[] = { REQUEST_POLL_RC, 0 };/* Number of keypresses to ignore before start repeating */#define RC_REPEAT_DELAY 2static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state){	u8 key[4];	int i;	struct dvb_usb_rc_key *keymap = d->props.rc_key_map;	struct dib0700_state *st = d->priv;	*event = 0;	*state = REMOTE_NO_KEY_PRESSED;	i=dib0700_ctrl_rd(d,rc_request,2,key,4);	if (i<=0) {		err("RC Query Failed");		return -1;	}	/* losing half of KEY_0 events from Philipps rc5 remotes.. */	if (key[0]==0 && key[1]==0 && key[2]==0 && key[3]==0) return 0;	/* info("%d: %2X %2X %2X %2X",dvb_usb_dib0700_ir_proto,(int)key[3-2],(int)key[3-3],(int)key[3-1],(int)key[3]);  */	dib0700_rc_setup(d); /* reset ir sensor data to prevent false events */	switch (dvb_usb_dib0700_ir_proto) {	case 0: {		/* NEC protocol sends repeat code as 0 0 0 FF */		if ((key[3-2] == 0x00) && (key[3-3] == 0x00) &&		    (key[3] == 0xFF)) {			st->rc_counter++;			if (st->rc_counter > RC_REPEAT_DELAY) {				*event = d->last_event;				*state = REMOTE_KEY_PRESSED;				st->rc_counter = RC_REPEAT_DELAY;			}			return 0;		}		for (i=0;i<d->props.rc_key_map_size; i++) {			if (keymap[i].custom == key[3-2] && keymap[i].data == key[3-3]) {				st->rc_counter = 0;				*event = keymap[i].event;				*state = REMOTE_KEY_PRESSED;				d->last_event = keymap[i].event;				return 0;			}		}		break;	}	default: {		/* RC-5 protocol changes toggle bit on new keypress */		for (i = 0; i < d->props.rc_key_map_size; i++) {			if (keymap[i].custom == key[3-2] && keymap[i].data == key[3-3]) {				if (d->last_event == keymap[i].event &&					key[3-1] == st->rc_toggle) {					st->rc_counter++;					/* prevents unwanted double hits */					if (st->rc_counter > RC_REPEAT_DELAY) {						*event = d->last_event;						*state = REMOTE_KEY_PRESSED;						st->rc_counter = RC_REPEAT_DELAY;					}					return 0;				}				st->rc_counter = 0;				*event = keymap[i].event;				*state = REMOTE_KEY_PRESSED;				st->rc_toggle = key[3-1];				d->last_event = keymap[i].event;				return 0;			}		}		break;	}	}	err("Unknown remote controller key: %2X %2X %2X %2X", (int) key[3-2], (int) key[3-3], (int) key[3-1], (int) key[3]);	d->last_event = 0;	return 0;}static struct dvb_usb_rc_key dib0700_rc_keys[] = {	/* Key codes for the tiny Pinnacle remote*/	{ 0x07, 0x00, KEY_MUTE },	{ 0x07, 0x01, KEY_MENU }, // Pinnacle logo	{ 0x07, 0x39, KEY_POWER },	{ 0x07, 0x03, KEY_VOLUMEUP },	{ 0x07, 0x09, KEY_VOLUMEDOWN },	{ 0x07, 0x06, KEY_CHANNELUP },	{ 0x07, 0x0c, KEY_CHANNELDOWN },	{ 0x07, 0x0f, KEY_1 },	{ 0x07, 0x15, KEY_2 },	{ 0x07, 0x10, KEY_3 },	{ 0x07, 0x18, KEY_4 },	{ 0x07, 0x1b, KEY_5 },	{ 0x07, 0x1e, KEY_6 },	{ 0x07, 0x11, KEY_7 },	{ 0x07, 0x21, KEY_8 },	{ 0x07, 0x12, KEY_9 },	{ 0x07, 0x27, KEY_0 },	{ 0x07, 0x24, KEY_SCREEN }, // 'Square' key	{ 0x07, 0x2a, KEY_TEXT },   // 'T' key	{ 0x07, 0x2d, KEY_REWIND },	{ 0x07, 0x30, KEY_PLAY },	{ 0x07, 0x33, KEY_FASTFORWARD },	{ 0x07, 0x36, KEY_RECORD },	{ 0x07, 0x3c, KEY_STOP },	{ 0x07, 0x3f, KEY_CANCEL }, // '?' key	/* Key codes for the Terratec Cinergy DT XS Diversity, similar to cinergyT2.c */	{ 0xeb, 0x01, KEY_POWER },	{ 0xeb, 0x02, KEY_1 },	{ 0xeb, 0x03, KEY_2 },	{ 0xeb, 0x04, KEY_3 },	{ 0xeb, 0x05, KEY_4 },	{ 0xeb, 0x06, KEY_5 },	{ 0xeb, 0x07, KEY_6 },	{ 0xeb, 0x08, KEY_7 },	{ 0xeb, 0x09, KEY_8 },	{ 0xeb, 0x0a, KEY_9 },	{ 0xeb, 0x0b, KEY_VIDEO },	{ 0xeb, 0x0c, KEY_0 },	{ 0xeb, 0x0d, KEY_REFRESH },	{ 0xeb, 0x0f, KEY_EPG },	{ 0xeb, 0x10, KEY_UP },	{ 0xeb, 0x11, KEY_LEFT },	{ 0xeb, 0x12, KEY_OK },	{ 0xeb, 0x13, KEY_RIGHT },	{ 0xeb, 0x14, KEY_DOWN },	{ 0xeb, 0x16, KEY_INFO },	{ 0xeb, 0x17, KEY_RED },	{ 0xeb, 0x18, KEY_GREEN },	{ 0xeb, 0x19, KEY_YELLOW },	{ 0xeb, 0x1a, KEY_BLUE },	{ 0xeb, 0x1b, KEY_CHANNELUP },	{ 0xeb, 0x1c, KEY_VOLUMEUP },	{ 0xeb, 0x1d, KEY_MUTE },	{ 0xeb, 0x1e, KEY_VOLUMEDOWN },	{ 0xeb, 0x1f, KEY_CHANNELDOWN },	{ 0xeb, 0x40, KEY_PAUSE },	{ 0xeb, 0x41, KEY_HOME },	{ 0xeb, 0x42, KEY_MENU }, /* DVD Menu */	{ 0xeb, 0x43, KEY_SUBTITLE },	{ 0xeb, 0x44, KEY_TEXT }, /* Teletext */	{ 0xeb, 0x45, KEY_DELETE },	{ 0xeb, 0x46, KEY_TV },	{ 0xeb, 0x47, KEY_DVD },	{ 0xeb, 0x48, KEY_STOP },	{ 0xeb, 0x49, KEY_VIDEO },	{ 0xeb, 0x4a, KEY_AUDIO }, /* Music */	{ 0xeb, 0x4b, KEY_SCREEN }, /* Pic */	{ 0xeb, 0x4c, KEY_PLAY },	{ 0xeb, 0x4d, KEY_BACK },	{ 0xeb, 0x4e, KEY_REWIND },	{ 0xeb, 0x4f, KEY_FASTFORWARD },	{ 0xeb, 0x54, KEY_PREVIOUS },	{ 0xeb, 0x58, KEY_RECORD },	{ 0xeb, 0x5c, KEY_NEXT },	/* Key codes for the Haupauge WinTV Nova-TD, copied from nova-t-usb2.c (Nova-T USB2) */	{ 0x1e, 0x00, KEY_0 },	{ 0x1e, 0x01, KEY_1 },	{ 0x1e, 0x02, KEY_2 },	{ 0x1e, 0x03, KEY_3 },	{ 0x1e, 0x04, KEY_4 },	{ 0x1e, 0x05, KEY_5 },	{ 0x1e, 0x06, KEY_6 },	{ 0x1e, 0x07, KEY_7 },	{ 0x1e, 0x08, KEY_8 },	{ 0x1e, 0x09, KEY_9 },	{ 0x1e, 0x0a, KEY_KPASTERISK },	{ 0x1e, 0x0b, KEY_RED },	{ 0x1e, 0x0c, KEY_RADIO },	{ 0x1e, 0x0d, KEY_MENU },	{ 0x1e, 0x0e, KEY_GRAVE }, /* # */	{ 0x1e, 0x0f, KEY_MUTE },	{ 0x1e, 0x10, KEY_VOLUMEUP },	{ 0x1e, 0x11, KEY_VOLUMEDOWN },	{ 0x1e, 0x12, KEY_CHANNEL },	{ 0x1e, 0x14, KEY_UP },	{ 0x1e, 0x15, KEY_DOWN },	{ 0x1e, 0x16, KEY_LEFT },	{ 0x1e, 0x17, KEY_RIGHT },	{ 0x1e, 0x18, KEY_VIDEO },	{ 0x1e, 0x19, KEY_AUDIO },	{ 0x1e, 0x1a, KEY_MEDIA },	{ 0x1e, 0x1b, KEY_EPG },	{ 0x1e, 0x1c, KEY_TV },	{ 0x1e, 0x1e, KEY_NEXT },	{ 0x1e, 0x1f, KEY_BACK },	{ 0x1e, 0x20, KEY_CHANNELUP },	{ 0x1e, 0x21, KEY_CHANNELDOWN },	{ 0x1e, 0x24, KEY_LAST }, /* Skip backwards */	{ 0x1e, 0x25, KEY_OK },	{ 0x1e, 0x29, KEY_BLUE},	{ 0x1e, 0x2e, KEY_GREEN },	{ 0x1e, 0x30, KEY_PAUSE },	{ 0x1e, 0x32, KEY_REWIND },	{ 0x1e, 0x34, KEY_FASTFORWARD },	{ 0x1e, 0x35, KEY_PLAY },	{ 0x1e, 0x36, KEY_STOP },	{ 0x1e, 0x37, KEY_RECORD },	{ 0x1e, 0x38, KEY_YELLOW },	{ 0x1e, 0x3b, KEY_GOTO },	{ 0x1e, 0x3d, KEY_POWER },	/* Key codes for the Leadtek Winfast DTV Dongle */	{ 0x00, 0x42, KEY_POWER },	{ 0x07, 0x7c, KEY_TUNER },	{ 0x0f, 0x4e, KEY_PRINT }, /* PREVIEW */	{ 0x08, 0x40, KEY_SCREEN }, /* full screen toggle*/	{ 0x0f, 0x71, KEY_DOT }, /* frequency */	{ 0x07, 0x43, KEY_0 },	{ 0x0c, 0x41, KEY_1 },	{ 0x04, 0x43, KEY_2 },	{ 0x0b, 0x7f, KEY_3 },	{ 0x0e, 0x41, KEY_4 },	{ 0x06, 0x43, KEY_5 },	{ 0x09, 0x7f, KEY_6 },	{ 0x0d, 0x7e, KEY_7 },	{ 0x05, 0x7c, KEY_8 },	{ 0x0a, 0x40, KEY_9 },	{ 0x0e, 0x4e, KEY_CLEAR },	{ 0x04, 0x7c, KEY_CHANNEL }, /* show channel number */	{ 0x0f, 0x41, KEY_LAST }, /* recall */	{ 0x03, 0x42, KEY_MUTE },	{ 0x06, 0x4c, KEY_RESERVED }, /* PIP button*/	{ 0x01, 0x72, KEY_SHUFFLE }, /* SNAPSHOT */	{ 0x0c, 0x4e, KEY_PLAYPAUSE }, /* TIMESHIFT */	{ 0x0b, 0x70, KEY_RECORD },	{ 0x03, 0x7d, KEY_VOLUMEUP },	{ 0x01, 0x7d, KEY_VOLUMEDOWN },	{ 0x02, 0x42, KEY_CHANNELUP },	{ 0x00, 0x7d, KEY_CHANNELDOWN },	/* Key codes for Nova-TD "credit card" remote control. */	{ 0x1d, 0x00, KEY_0 },	{ 0x1d, 0x01, KEY_1 },	{ 0x1d, 0x02, KEY_2 },	{ 0x1d, 0x03, KEY_3 },	{ 0x1d, 0x04, KEY_4 },	{ 0x1d, 0x05, KEY_5 },	{ 0x1d, 0x06, KEY_6 },	{ 0x1d, 0x07, KEY_7 },	{ 0x1d, 0x08, KEY_8 },	{ 0x1d, 0x09, KEY_9 },	{ 0x1d, 0x0a, KEY_TEXT },	{ 0x1d, 0x0d, KEY_MENU },	{ 0x1d, 0x0f, KEY_MUTE },	{ 0x1d, 0x10, KEY_VOLUMEUP },	{ 0x1d, 0x11, KEY_VOLUMEDOWN },	{ 0x1d, 0x12, KEY_CHANNEL },	{ 0x1d, 0x14, KEY_UP },	{ 0x1d, 0x15, KEY_DOWN },	{ 0x1d, 0x16, KEY_LEFT },	{ 0x1d, 0x17, KEY_RIGHT },	{ 0x1d, 0x1c, KEY_TV },	{ 0x1d, 0x1e, KEY_NEXT },	{ 0x1d, 0x1f, KEY_BACK },	{ 0x1d, 0x20, KEY_CHANNELUP },	{ 0x1d, 0x21, KEY_CHANNELDOWN },	{ 0x1d, 0x24, KEY_LAST },	{ 0x1d, 0x25, KEY_OK },	{ 0x1d, 0x30, KEY_PAUSE },	{ 0x1d, 0x32, KEY_REWIND },	{ 0x1d, 0x34, KEY_FASTFORWARD },	{ 0x1d, 0x35, KEY_PLAY },	{ 0x1d, 0x36, KEY_STOP },	{ 0x1d, 0x37, KEY_RECORD },	{ 0x1d, 0x3b, KEY_GOTO },	{ 0x1d, 0x3d, KEY_POWER },};/* STK7700P: Hauppauge Nova-T Stick, AVerMedia Volar */static struct dibx000_agc_config stk7700p_7000m_mt2060_agc_config = {	BAND_UHF | BAND_VHF,       // band_caps	/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=5, 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) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), // setup	712,  // inv_gain	41,  // time_stabiliz	0,  // alpha_level	118,  // thlock	0,     // wbd_inv	4095,  // wbd_ref	0,     // wbd_sel	0,     // wbd_alpha	42598,  // agc1_max	17694,  // agc1_min	45875,  // agc2_max	2621,  // agc2_min	0,  // agc1_pt1	76,  // agc1_pt2	139,  // agc1_pt3	52,  // agc1_slope1	59,  // agc1_slope2	107,  // agc2_pt1	172,  // agc2_pt2	57,  // agc2_slope1	70,  // agc2_slope2	21,  // alpha_mant	25,  // alpha_exp	28,  // beta_mant	48,  // beta_exp	1,  // perform_agc_softsplit	{  0,     // split_min	   107,   // split_max	   51800, // global_split_min	   24700  // global_split_max	},};static struct dibx000_agc_config stk7700p_7000p_mt2060_agc_config = {	BAND_UHF | BAND_VHF,	/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=5, 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) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), // setup	712, // inv_gain	41,  // time_stabiliz	0,   // alpha_level	118, // thlock	0,    // wbd_inv	4095, // wbd_ref	0,    // wbd_sel	0,    // wbd_alpha	42598, // agc1_max	16384, // agc1_min	42598, // agc2_max	    0, // agc2_min	  0,   // agc1_pt1	137,   // agc1_pt2	255,   // agc1_pt3	  0,   // agc1_slope1	255,   // agc1_slope2	0,     // agc2_pt1	0,     // agc2_pt2	 0,    // agc2_slope1	41,    // agc2_slope2	15, // alpha_mant	25, // alpha_exp	28, // beta_mant	48, // beta_exp

⌨️ 快捷键说明

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