|
@@ -513,6 +513,7 @@ static int af9035_read_config(struct dvb_usb_device *d)
|
|
|
case AF9033_TUNER_FC0011:
|
|
|
case AF9033_TUNER_MXL5007T:
|
|
|
case AF9033_TUNER_TDA18218:
|
|
|
+ case AF9033_TUNER_FC2580:
|
|
|
state->af9033_config[i].spec_inv = 1;
|
|
|
break;
|
|
|
default:
|
|
@@ -798,6 +799,11 @@ static struct tda18218_config af9035_tda18218_config = {
|
|
|
.i2c_wr_max = 21,
|
|
|
};
|
|
|
|
|
|
+static const struct fc2580_config af9035_fc2580_config = {
|
|
|
+ .i2c_addr = 0x56,
|
|
|
+ .clock = 16384000,
|
|
|
+};
|
|
|
+
|
|
|
static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
|
|
|
{
|
|
|
struct state *state = adap_to_priv(adap);
|
|
@@ -882,6 +888,25 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
|
|
|
fe = dvb_attach(tda18218_attach, adap->fe[0],
|
|
|
&d->i2c_adap, &af9035_tda18218_config);
|
|
|
break;
|
|
|
+ case AF9033_TUNER_FC2580:
|
|
|
+ /* Tuner enable using gpiot2_o, gpiot2_en and gpiot2_on */
|
|
|
+ ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
|
|
|
+ if (ret < 0)
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
|
|
|
+ if (ret < 0)
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
|
|
|
+ if (ret < 0)
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ usleep_range(10000, 50000);
|
|
|
+ /* attach tuner */
|
|
|
+ fe = dvb_attach(fc2580_attach, adap->fe[0],
|
|
|
+ &d->i2c_adap, &af9035_fc2580_config);
|
|
|
+ break;
|
|
|
default:
|
|
|
fe = NULL;
|
|
|
}
|
|
@@ -1106,6 +1131,8 @@ static const struct usb_device_id af9035_id_table[] = {
|
|
|
&af9035_props, "AVerMedia HD Volar (A867)", NULL) },
|
|
|
{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TWINSTAR,
|
|
|
&af9035_props, "AVerMedia Twinstar (A825)", NULL) },
|
|
|
+ { DVB_USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100MINI_PLUS,
|
|
|
+ &af9035_props, "Asus U3100Mini Plus", NULL) },
|
|
|
{ }
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(usb, af9035_id_table);
|