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; }
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; }
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; }