[EXPERIMENTAL PATCH] TVGo DVB-T02Q from genius

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2006-10-25 at 17:20 +0200, Felipe A. Ortega García wrote:
> Hi
>
> I have the same dvb-t adapter, and I've opened it to see the PCB.
> There are 3 main chips:
>
> Zarlink ZL10353
> Uli M9206 A1
> MT2060f

Attached is a patch that you may use as a starting point to develop a
more correct patch for this device.  Please bear in mind that I do _not_
expect this patch to work properly with your device, although it is
possible that it might -- it would be a big surprise.  Some things to
keep in mind:

This patch uses the experimental m920x driver, currently working on the
Megasky 580... I do not know much info about this TVGo device, but I
took some guesses, and left all unknowns set up the same way as the
megasky configuration... It is highly probable that these settings will
need to be changed.  For instance:

Does the TVGo device use a firmware?  If so, then you must capture that
firmware and alter the configuration to make it load the correct
firmware file.

What i2c address is used by the mt2060 tuner?  I guessed 0x60.

Did I configure the mt2060 config options correctly?  (probably not) ...
How about the zl10353? (again, probably not)

Are the endpoints configured properly?  (check in usbview)

There isn't much that I can do to help besides this... You will probably
have to change a lot around in this patch in order to make it work --
please send in revised versions of this patch if you make any progress.

The attached patch should apply cleanly against the megasky repository:

http://linuxtv.org/hg/~mkrufky/megasky

Once we have a patch that is confirmed to work properly, I can merge it
into the experimental repository... but until then, happy hacking!

Cheers,

Michael Krufky

 linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h |    1 
 linux/drivers/media/dvb/dvb-usb/m920x.c       |   75 +++++++++++++++++++++++++-
 2 files changed, 75 insertions(+), 1 deletion(-)

--- megasky.orig/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+++ megasky/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
@@ -116,6 +116,7 @@
 #define USB_PID_MSI_MEGASKY580_55801			0x5581
 #define USB_PID_KYE_DVB_T_COLD				0x701e
 #define USB_PID_KYE_DVB_T_WARM				0x701f
+#define USB_PID_GENIUS_TVGO_DVB_T02Q			0x702b
 #define USB_PID_PCTV_200E				0x020e
 #define USB_PID_PCTV_400E				0x020f
 #define USB_PID_LITEON_DVB_T_COLD			0xf000
--- megasky.orig/linux/drivers/media/dvb/dvb-usb/m920x.c
+++ megasky/linux/drivers/media/dvb/dvb-usb/m920x.c
@@ -13,7 +13,9 @@
 
 #include "mt352.h"
 #include "mt352_priv.h"
+#include "zl10353.h"
 #include "qt1010.h"
+#include "mt2060.h"
 
 /* debug */
 static int dvb_usb_m920x_debug;
@@ -243,6 +245,22 @@
 	.demod_init = megasky_mt352_demod_init,
 };
 
+static struct zl10353_config tvgo_t02q_zl10353_config = {
+	.demod_address = 0x1e,
+	.no_tuner = 1,
+	.parallel_ts = 1,
+};
+
+static struct mt2060_config tvgo_t02q_mt2060_config = {
+	.i2c_address = 0x60,
+};
+
+static int mt2060_tuner_attach(struct dvb_usb_adapter *adap)
+{
+	return dvb_attach(mt2060_attach,adap->fe, &adap->dev->i2c_adap,
+			  &tvgo_t02q_mt2060_config,0) == NULL ? -ENODEV : 0;
+}
+
 static int megasky_frontend_attach(struct dvb_usb_adapter *adap)
 {
 	deb_rc("megasky_frontend_attach!\n");
@@ -252,6 +270,16 @@
 	return -EIO;
 }
 
+static int tvgo_t02q_frontend_attach(struct dvb_usb_adapter *adap)
+{
+	deb_rc("tvgo_t02q_frontend_attach!\n");
+
+	if ((adap->fe = dvb_attach(zl10353_attach, &tvgo_t02q_zl10353_config,
+				   &adap->dev->i2c_adap)) != NULL)
+		return 0;
+	return -EIO;
+}
+
 static int m9206_set_filter(struct dvb_usb_adapter *adap, int type, int idx, int pid)
 {
 	int ret = 0;
@@ -392,6 +420,7 @@
 
 /* DVB USB Driver stuff */
 static struct dvb_usb_device_properties megasky_properties;
+static struct dvb_usb_device_properties tvgo_t02q_properties;
 
 static int m920x_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
@@ -399,7 +428,8 @@
 	struct usb_host_interface *alt;
 	int ret;
 
-	if ((ret = dvb_usb_device_init(intf, &megasky_properties, THIS_MODULE, &d)) == 0) {
+	if ((ret = dvb_usb_device_init(intf, &megasky_properties, THIS_MODULE, &d)) == 0 ||
+	    (ret = dvb_usb_device_init(intf, &tvgo_t02q_properties, THIS_MODULE, &d)) == 0) {
 		deb_rc("probed!\n");
 
 		alt = usb_altnum_to_altsetting(intf, 1);
@@ -422,6 +452,7 @@
 
 static struct usb_device_id m920x_table [] = {
 		{ USB_DEVICE(USB_VID_MSI, USB_PID_MSI_MEGASKY580) },
+		{ USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T02Q) },
 		{ }		/* Terminating entry */
 };
 MODULE_DEVICE_TABLE (usb, m920x_table);
@@ -473,6 +504,48 @@
 	}
 };
 
+static struct dvb_usb_device_properties tvgo_t02q_properties = {
+	.caps = DVB_USB_IS_AN_I2C_ADAPTER | DVB_USB_ADAP_HAS_PID_FILTER |
+		DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
+
+	.usb_ctrl = DEVICE_SPECIFIC,
+	.firmware = "dvb-usb-megasky-02.fw",
+	.download_firmware = m9206_firmware_download,
+
+	.size_of_priv     = sizeof(struct m9206_state),
+
+	.identify_state   = megasky_identify_state,
+	.num_adapters = 1,
+	.adapter = {{
+		.pid_filter_count = 8,
+		.pid_filter       = m9206_pid_filter,
+		.pid_filter_ctrl  = m9206_pid_filter_ctrl,
+
+		.frontend_attach  = tvgo_t02q_frontend_attach,
+		.tuner_attach     = mt2060_tuner_attach,
+
+		.stream = {
+			.type = USB_BULK,
+			.count = 8,
+			.endpoint = 0x81,
+			.u = {
+				.bulk = {
+					.buffersize = 512,
+				}
+			}
+		},
+	}},
+	.i2c_algo         = &m9206_i2c_algo,
+
+	.num_device_descs = 1,
+	.devices = {
+		{   "Genius TVGo DVB-T02Q",
+			{ &m920x_table[1], NULL },
+			{ NULL },
+		},
+	}
+};
+
 static struct usb_driver m920x_driver = {
 #if LINUX_VERSION_CODE <=  KERNEL_VERSION(2,6,15)
 	.owner		= THIS_MODULE,
_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux