|
@@ -17,6 +17,8 @@
|
|
#include "xc5000.h"
|
|
#include "xc5000.h"
|
|
#include "s5h1411.h"
|
|
#include "s5h1411.h"
|
|
#include "dib0070.h"
|
|
#include "dib0070.h"
|
|
|
|
+#include "lgdt3305.h"
|
|
|
|
+#include "mxl5007t.h"
|
|
|
|
|
|
static int force_lna_activation;
|
|
static int force_lna_activation;
|
|
module_param(force_lna_activation, int, 0644);
|
|
module_param(force_lna_activation, int, 0644);
|
|
@@ -1370,6 +1372,72 @@ static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
|
|
== NULL ? -ENODEV : 0;
|
|
== NULL ? -ENODEV : 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static struct lgdt3305_config hcw_lgdt3305_config = {
|
|
|
|
+ .i2c_addr = 0x0e,
|
|
|
|
+ .mpeg_mode = LGDT3305_MPEG_PARALLEL,
|
|
|
|
+ .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE,
|
|
|
|
+ .tpvalid_polarity = LGDT3305_TP_VALID_LOW,
|
|
|
|
+ .deny_i2c_rptr = 0,
|
|
|
|
+ .spectral_inversion = 1,
|
|
|
|
+ .qam_if_khz = 6000,
|
|
|
|
+ .vsb_if_khz = 6000,
|
|
|
|
+ .usref_8vsb = 0x0500,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct mxl5007t_config hcw_mxl5007t_config = {
|
|
|
|
+ .xtal_freq_hz = MxL_XTAL_25_MHZ,
|
|
|
|
+ .if_freq_hz = MxL_IF_6_MHZ,
|
|
|
|
+ .invert_if = 1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* TIGER-ATSC map:
|
|
|
|
+ GPIO0 - LNA_CTR (H: LNA power enabled, L: LNA power disabled)
|
|
|
|
+ GPIO1 - ANT_SEL (H: VPA, L: MCX)
|
|
|
|
+ GPIO4 - SCL2
|
|
|
|
+ GPIO6 - EN_TUNER
|
|
|
|
+ GPIO7 - SDA2
|
|
|
|
+ GPIO10 - DEM_RST
|
|
|
|
+
|
|
|
|
+ MXL is behind LG's i2c repeater. LG is on SCL2/SDA2 gpios on the DIB
|
|
|
|
+ */
|
|
|
|
+static int lgdt3305_frontend_attach(struct dvb_usb_adapter *adap)
|
|
|
|
+{
|
|
|
|
+ struct dib0700_state *st = adap->dev->priv;
|
|
|
|
+
|
|
|
|
+ /* Make use of the new i2c functions from FW 1.20 */
|
|
|
|
+ st->fw_use_new_i2c_api = 1;
|
|
|
|
+
|
|
|
|
+ st->disable_streaming_master_mode = 1;
|
|
|
|
+
|
|
|
|
+ /* fe power enable */
|
|
|
|
+ dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0);
|
|
|
|
+ msleep(30);
|
|
|
|
+ dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1);
|
|
|
|
+ msleep(30);
|
|
|
|
+
|
|
|
|
+ /* demod reset */
|
|
|
|
+ dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
|
|
|
|
+ msleep(30);
|
|
|
|
+ dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0);
|
|
|
|
+ msleep(30);
|
|
|
|
+ dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
|
|
|
|
+ msleep(30);
|
|
|
|
+
|
|
|
|
+ adap->fe = dvb_attach(lgdt3305_attach,
|
|
|
|
+ &hcw_lgdt3305_config,
|
|
|
|
+ &adap->dev->i2c_adap);
|
|
|
|
+
|
|
|
|
+ return adap->fe == NULL ? -ENODEV : 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int mxl5007t_tuner_attach(struct dvb_usb_adapter *adap)
|
|
|
|
+{
|
|
|
|
+ return dvb_attach(mxl5007t_attach, adap->fe,
|
|
|
|
+ &adap->dev->i2c_adap, 0x60,
|
|
|
|
+ &hcw_mxl5007t_config) == NULL ? -ENODEV : 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
/* DVB-USB and USB stuff follows */
|
|
/* DVB-USB and USB stuff follows */
|
|
struct usb_device_id dib0700_usb_id_table[] = {
|
|
struct usb_device_id dib0700_usb_id_table[] = {
|
|
/* 0 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700P) },
|
|
/* 0 */ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK7700P) },
|
|
@@ -1421,6 +1489,8 @@ struct usb_device_id dib0700_usb_id_table[] = {
|
|
USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2) },
|
|
USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2) },
|
|
{ USB_DEVICE(USB_VID_SONY, USB_PID_SONY_PLAYTV) },
|
|
{ USB_DEVICE(USB_VID_SONY, USB_PID_SONY_PLAYTV) },
|
|
/* 45 */{ USB_DEVICE(USB_VID_YUAN, USB_PID_YUAN_PD378S) },
|
|
/* 45 */{ USB_DEVICE(USB_VID_YUAN, USB_PID_YUAN_PD378S) },
|
|
|
|
+ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_TIGER_ATSC) },
|
|
|
|
+ { USB_DEVICE(USB_VID_HAUPPAUGE, USB_PID_HAUPPAUGE_TIGER_ATSC_B210) },
|
|
{ 0 } /* Terminating entry */
|
|
{ 0 } /* Terminating entry */
|
|
};
|
|
};
|
|
MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
|
|
MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
|
|
@@ -1796,6 +1866,31 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
|
.rc_key_map = dib0700_rc_keys,
|
|
.rc_key_map = dib0700_rc_keys,
|
|
.rc_key_map_size = ARRAY_SIZE(dib0700_rc_keys),
|
|
.rc_key_map_size = ARRAY_SIZE(dib0700_rc_keys),
|
|
.rc_query = dib0700_rc_query
|
|
.rc_query = dib0700_rc_query
|
|
|
|
+ }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
|
|
|
|
+ .num_adapters = 1,
|
|
|
|
+ .adapter = {
|
|
|
|
+ {
|
|
|
|
+ .frontend_attach = lgdt3305_frontend_attach,
|
|
|
|
+ .tuner_attach = mxl5007t_tuner_attach,
|
|
|
|
+
|
|
|
|
+ DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
|
|
|
|
+
|
|
|
|
+ .size_of_priv = sizeof(struct
|
|
|
|
+ dib0700_adapter_state),
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ .num_device_descs = 2,
|
|
|
|
+ .devices = {
|
|
|
|
+ { "Hauppauge ATSC MiniCard (B200)",
|
|
|
|
+ { &dib0700_usb_id_table[46], NULL },
|
|
|
|
+ { NULL },
|
|
|
|
+ },
|
|
|
|
+ { "Hauppauge ATSC MiniCard (B210)",
|
|
|
|
+ { &dib0700_usb_id_table[47], NULL },
|
|
|
|
+ { NULL },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|