To make things easier, I've rolled up the changes to m920x.c into a
patch (attached). It fixes the problem where the second tuner can tune,
but not receive stream data on the second adapter/channel of the dual
tuner units.
This patch was generated against the ~mkrufky/m920x tree. It was
successfully tested on kernel 2.6.17 (single processor), and 2.6.21
(SMP) with MythTV and mplayer (two simultaneous channels/transponders
with both HDTV and SDTV).
Cheers,
Jeremy
--- m920x.c.orig 2007-05-09 06:43:05.000000000 +1000
+++ m920x.c 2007-05-09 06:59:45.000000000 +1000
@@ -577,8 +577,11 @@
struct dvb_usb_device *d;
struct usb_host_interface *alt;
int ret;
+
struct m920x_inits *rc_init_seq = NULL;
+
int bInterfaceNumber = intf->cur_altsetting->desc.bInterfaceNumber;
+ struct usb_device *udev = interface_to_usbdev(intf);
deb("Probing for m920x device at interface %d\n", bInterfaceNumber);
@@ -621,24 +624,30 @@
* tvwalkertwin_properties already configured both
* tuners, so there is nothing for us to do here
*/
-
- return -ENODEV;
+
+ /* But, the alternate interface for the second endpoint
+ * still needs to be configured. So fall through to the
+ * 'found' label and add the alternate interface.
+ */
}
found:
alt = usb_altnum_to_altsetting(intf, 1);
- if (alt == NULL) {
+ if (!alt) {
deb("No alt found!\n");
return -ENODEV;
}
- ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber,
+ /* Set the alternate interface (udev is initialized/defined above) */
+ ret = usb_set_interface(udev, alt->desc.bInterfaceNumber,
alt->desc.bAlternateSetting);
if (ret < 0)
return ret;
- if ((ret = m920x_init(d, rc_init_seq)) != 0)
- return ret;
+ /* Initialize the remote control, but only once per adapter */
+ if (rc_init_seq) {
+ ret = m920x_init(d, rc_init_seq)) != 0 );
+ }
return ret;
}
_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb