Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3847b22ab59a9110c9e7433ac75751070047280e
Commit:     3847b22ab59a9110c9e7433ac75751070047280e
Parent:     55bbe5ea203373c07c10a9d1d5088dd013345027
Author:     Aapo Tahkola <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 18:21:47 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Wed Jul 18 14:23:43 2007 -0300

    V4L/DVB (5694): M920x: fix for Dposh devices
    
    Make sure devices manufactured by Dposh are not affected by previous hw
    pid filtering changes
    
    Doing so might crash it.
    
    Signed-off-by: Aapo Tahkola <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/dvb/dvb-usb/m920x.c |   38 +++++++++++++++++++++---------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/m920x.c 
b/drivers/media/dvb/dvb-usb/m920x.c
index 350cdc9..1156b7d 100644
--- a/drivers/media/dvb/dvb-usb/m920x.c
+++ b/drivers/media/dvb/dvb-usb/m920x.c
@@ -59,7 +59,7 @@ static inline int m920x_write(struct usb_device *udev, u8 
request,
 
 static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq)
 {
-       int ret = 0, i, epi;
+       int ret = 0, i, epi, flags = 0;
        int adap_enabled[M9206_MAX_ADAPTERS] = { 0 };
 
        /* Remote controller init. */
@@ -79,26 +79,32 @@ static int m920x_init(struct dvb_usb_device *d, struct 
m920x_inits *rc_seq)
                deb("Initialising remote control success\n");
        }
 
-       for (i = 0; i < d->props.num_adapters; i++) {
-               epi = d->adapter[i].props.stream.endpoint - 0x81;
+       for (i = 0; i < d->props.num_adapters; i++)
+               flags |= d->adapter[i].props.caps;
 
-               if (epi < 0 || epi >= M9206_MAX_ADAPTERS) {
-                       printk(KERN_INFO "m920x: Unexpected adapter 
endpoint!\n");
-                       return -EINVAL;
-               }
+       /* Some devices(Dposh) might crash if we attempt touch at all. */
+       if (flags & DVB_USB_ADAP_HAS_PID_FILTER) {
+               for (i = 0; i < d->props.num_adapters; i++) {
+                       epi = d->adapter[i].props.stream.endpoint - 0x81;
 
-               adap_enabled[epi] = 1;
-       }
+                       if (epi < 0 || epi >= M9206_MAX_ADAPTERS) {
+                               printk(KERN_INFO "m920x: Unexpected adapter 
endpoint!\n");
+                               return -EINVAL;
+                       }
 
-       for (i = 0; i < M9206_MAX_ADAPTERS; i++) {
-               if (adap_enabled[i])
-                       continue;
+                       adap_enabled[epi] = 1;
+               }
 
-               if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x0)) != 0)
-                       return ret;
+               for (i = 0; i < M9206_MAX_ADAPTERS; i++) {
+                       if (adap_enabled[i])
+                               continue;
 
-               if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x02f5)) != 0)
-                       return ret;
+                       if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x0)) != 0)
+                               return ret;
+
+                       if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x02f5)) != 
0)
+                               return ret;
+               }
        }
 
        return ret;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to