(oops - cut and paste problem with last patch fixed in this one.) 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 07:01: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); + } return ret; }
_______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb