[PATCH] m920x.c fix for Lifeview TV Walker Twin (USB2) second tuner

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

 



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

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

  Powered by Linux