Пример #1
0
static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
{
	struct dvb_usb_device *d = adap_to_d(adap);
	struct lme2510_state *st = d->priv;
	int ret = 0;

	st->i2c_talk_onoff = 1;
	switch (le16_to_cpu(d->udev->descriptor.idProduct)) {
	case 0x1122:
	case 0x1120:
		st->i2c_gate = 4;
		adap->fe[0] = dvb_attach(tda10086_attach,
			&tda10086_config, &d->i2c_adap);
		if (adap->fe[0]) {
			info("TUN Found Frontend TDA10086");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 4;
			st->i2c_tuner_addr = 0x60;
			st->tuner_config = TUNER_LG;
			if (st->dvb_usb_lme2510_firmware != TUNER_LG) {
				st->dvb_usb_lme2510_firmware = TUNER_LG;
				ret = lme_firmware_switch(d, 1) ? 0 : -ENODEV;
			}
			break;
		}

		st->i2c_gate = 4;
		adap->fe[0] = dvb_attach(stv0299_attach,
				&sharp_z0194_config, &d->i2c_adap);
		if (adap->fe[0]) {
			info("FE Found Stv0299");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0x60;
			st->tuner_config = TUNER_S0194;
			if (st->dvb_usb_lme2510_firmware != TUNER_S0194) {
				st->dvb_usb_lme2510_firmware = TUNER_S0194;
				ret = lme_firmware_switch(d, 1) ? 0 : -ENODEV;
			}
			break;
		}

		st->i2c_gate = 5;
		adap->fe[0] = dvb_attach(stv0288_attach, &lme_config,
			&d->i2c_adap);

		if (adap->fe[0]) {
			info("FE Found Stv0288");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0x60;
			st->tuner_config = TUNER_S7395;
			if (st->dvb_usb_lme2510_firmware != TUNER_S7395) {
				st->dvb_usb_lme2510_firmware = TUNER_S7395;
				ret = lme_firmware_switch(d, 1) ? 0 : -ENODEV;
			}
			break;
		}
		/* fall through */
	case 0x22f0:
		st->i2c_gate = 5;
		adap->fe[0] = dvb_attach(m88rs2000_attach,
			&m88rs2000_config, &d->i2c_adap);

		if (adap->fe[0]) {
			info("FE Found M88RS2000");
			dvb_attach(ts2020_attach, adap->fe[0], &ts2020_config,
					&d->i2c_adap);
			st->i2c_tuner_gate_w = 5;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0x60;
			st->tuner_config = TUNER_RS2000;
			st->fe_set_voltage =
				adap->fe[0]->ops.set_voltage;
		}
		break;
	}

	if (adap->fe[0] == NULL) {
		info("DM04/QQBOX Not Powered up or not Supported");
		return -ENODEV;
	}

	if (ret) {
		if (adap->fe[0]) {
			dvb_frontend_detach(adap->fe[0]);
			adap->fe[0] = NULL;
		}
		d->rc_map = NULL;
		return -ENODEV;
	}

	st->fe_read_status = adap->fe[0]->ops.read_status;
	st->fe_read_signal_strength = adap->fe[0]->ops.read_signal_strength;
	st->fe_read_snr = adap->fe[0]->ops.read_snr;
	st->fe_read_ber = adap->fe[0]->ops.read_ber;
	st->fe_read_ucblocks = adap->fe[0]->ops.read_ucblocks;

	adap->fe[0]->ops.read_status = dm04_read_status;
	adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;
	adap->fe[0]->ops.read_snr = dm04_read_snr;
	adap->fe[0]->ops.read_ber = dm04_read_ber;
	adap->fe[0]->ops.read_ucblocks = dm04_read_ucblocks;
	adap->fe[0]->ops.set_voltage = dm04_lme2510_set_voltage;

	ret = lme_name(adap);
	return ret;
}
Пример #2
0
static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
{
	struct lme2510_state *st = adap->dev->priv;

	int ret = 0;

	st->i2c_talk_onoff = 1;
	switch (le16_to_cpu(adap->dev->udev->descriptor.idProduct)) {
	case 0x1122:
	case 0x1120:
		st->i2c_gate = 4;
		adap->fe_adap[0].fe = dvb_attach(tda10086_attach,
			&tda10086_config, &adap->dev->i2c_adap);
		if (adap->fe_adap[0].fe) {
			info("TUN Found Frontend TDA10086");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 4;
			st->i2c_tuner_addr = 0xc0;
			st->tuner_config = TUNER_LG;
			if (dvb_usb_lme2510_firmware != TUNER_LG) {
				dvb_usb_lme2510_firmware = TUNER_LG;
				ret = lme_firmware_switch(adap->dev->udev, 1);
			}
			break;
		}

		st->i2c_gate = 4;
		adap->fe_adap[0].fe = dvb_attach(stv0299_attach,
				&sharp_z0194_config, &adap->dev->i2c_adap);
		if (adap->fe_adap[0].fe) {
			info("FE Found Stv0299");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0xc0;
			st->tuner_config = TUNER_S0194;
			if (dvb_usb_lme2510_firmware != TUNER_S0194) {
				dvb_usb_lme2510_firmware = TUNER_S0194;
				ret = lme_firmware_switch(adap->dev->udev, 1);
			}
			break;
		}

		st->i2c_gate = 5;
		adap->fe_adap[0].fe = dvb_attach(stv0288_attach, &lme_config,
			&adap->dev->i2c_adap);

		if (adap->fe_adap[0].fe) {
			info("FE Found Stv0288");
			st->i2c_tuner_gate_w = 4;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0xc0;
			st->tuner_config = TUNER_S7395;
			if (dvb_usb_lme2510_firmware != TUNER_S7395) {
				dvb_usb_lme2510_firmware = TUNER_S7395;
				ret = lme_firmware_switch(adap->dev->udev, 1);
			}
			break;
		}
	case 0x22f0:
		st->i2c_gate = 5;
		adap->fe_adap[0].fe = dvb_attach(m88rs2000_attach,
			&m88rs2000_config, &adap->dev->i2c_adap);

		if (adap->fe_adap[0].fe) {
			info("FE Found M88RS2000");
			st->i2c_tuner_gate_w = 5;
			st->i2c_tuner_gate_r = 5;
			st->i2c_tuner_addr = 0xc0;
			st->tuner_config = TUNER_RS2000;
			adap->fe_adap[0].fe->ops.read_signal_strength =
				dm04_rs2000_read_signal_strength;
			adap->fe_adap[0].fe->ops.read_snr =
				dm04_rs2000_read_snr;
		}
		break;
	}

	if (adap->fe_adap[0].fe == NULL) {
			info("DM04/QQBOX Not Powered up or not Supported");
			return -ENODEV;
	}

	if (ret) {
		if (adap->fe_adap[0].fe) {
			dvb_frontend_detach(adap->fe_adap[0].fe);
			adap->fe_adap[0].fe = NULL;
		}
		adap->dev->props.rc.core.rc_codes = NULL;
		return -ENODEV;
	}

	adap->fe_adap[0].fe->ops.set_voltage = dm04_lme2510_set_voltage;
	ret = lme_name(adap);
	return ret;
}
Пример #3
0
static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
{
	struct lme2510_state *st = adap->dev->priv;

	int ret = 0;

	st->i2c_talk_onoff = 1;

	st->i2c_gate = 4;
	adap->fe = dvb_attach(tda10086_attach, &tda10086_config,
		&adap->dev->i2c_adap);

	if (adap->fe) {
		info("TUN Found Frontend TDA10086");
		st->i2c_tuner_gate_w = 4;
		st->i2c_tuner_gate_r = 4;
		st->i2c_tuner_addr = 0xc0;
		st->tuner_config = TUNER_LG;
		if (dvb_usb_lme2510_firmware != TUNER_LG) {
			dvb_usb_lme2510_firmware = TUNER_LG;
			ret = lme_firmware_switch(adap->dev->udev, 1);
		}
		goto end;
	}

	st->i2c_gate = 4;
	adap->fe = dvb_attach(stv0299_attach, &sharp_z0194_config,
			&adap->dev->i2c_adap);
	if (adap->fe) {
		info("FE Found Stv0299");
		st->i2c_tuner_gate_w = 4;
		st->i2c_tuner_gate_r = 5;
		st->i2c_tuner_addr = 0xc0;
		st->tuner_config = TUNER_S0194;
		if (dvb_usb_lme2510_firmware != TUNER_S0194) {
			dvb_usb_lme2510_firmware = TUNER_S0194;
			ret = lme_firmware_switch(adap->dev->udev, 1);
		}
		goto end;
	}

	st->i2c_gate = 5;
	adap->fe = dvb_attach(stv0288_attach, &lme_config,
			&adap->dev->i2c_adap);
	if (adap->fe) {
		info("FE Found Stv0288");
		st->i2c_tuner_gate_w = 4;
		st->i2c_tuner_gate_r = 5;
		st->i2c_tuner_addr = 0xc0;
		st->tuner_config = TUNER_S7395;
		if (dvb_usb_lme2510_firmware != TUNER_S7395) {
			dvb_usb_lme2510_firmware = TUNER_S7395;
			ret = lme_firmware_switch(adap->dev->udev, 1);
		}
	} else {
		info("DM04 Not Supported");
		return -ENODEV;
	}


end:	if (ret) {
		if (adap->fe) {
			dvb_frontend_detach(adap->fe);
			adap->fe = NULL;
		}
		adap->dev->props.rc.core.rc_codes = NULL;
		return -ENODEV;
	}

	adap->fe->ops.set_voltage = dm04_lme2510_set_voltage;
	ret = lme_name(adap);
	return ret;
}