diff options
Diffstat (limited to 'drivers/media/video/tm6000/tm6000-dvb.c')
-rw-r--r-- | drivers/media/video/tm6000/tm6000-dvb.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/media/video/tm6000/tm6000-dvb.c b/drivers/media/video/tm6000/tm6000-dvb.c index 5e6c129a4beb..e1f3f66e1e63 100644 --- a/drivers/media/video/tm6000/tm6000-dvb.c +++ b/drivers/media/video/tm6000/tm6000-dvb.c | |||
@@ -89,9 +89,19 @@ static void tm6000_urb_received(struct urb *urb) | |||
89 | int ret; | 89 | int ret; |
90 | struct tm6000_core *dev = urb->context; | 90 | struct tm6000_core *dev = urb->context; |
91 | 91 | ||
92 | if (urb->status != 0) | 92 | switch (urb->status) { |
93 | case 0: | ||
94 | case -ETIMEDOUT: | ||
95 | break; | ||
96 | case -ENOENT: | ||
97 | case -ECONNRESET: | ||
98 | case -ESHUTDOWN: | ||
99 | return; | ||
100 | default: | ||
93 | print_err_status(dev, 0, urb->status); | 101 | print_err_status(dev, 0, urb->status); |
94 | else if (urb->actual_length > 0) | 102 | } |
103 | |||
104 | if (urb->actual_length > 0) | ||
95 | dvb_dmx_swfilter(&dev->dvb->demux, urb->transfer_buffer, | 105 | dvb_dmx_swfilter(&dev->dvb->demux, urb->transfer_buffer, |
96 | urb->actual_length); | 106 | urb->actual_length); |
97 | 107 | ||
@@ -151,7 +161,7 @@ static int tm6000_start_stream(struct tm6000_core *dev) | |||
151 | printk(KERN_ERR "tm6000: pipe resetted\n"); | 161 | printk(KERN_ERR "tm6000: pipe resetted\n"); |
152 | 162 | ||
153 | /* mutex_lock(&tm6000_driver.open_close_mutex); */ | 163 | /* mutex_lock(&tm6000_driver.open_close_mutex); */ |
154 | ret = usb_submit_urb(dvb->bulk_urb, GFP_KERNEL); | 164 | ret = usb_submit_urb(dvb->bulk_urb, GFP_ATOMIC); |
155 | 165 | ||
156 | /* mutex_unlock(&tm6000_driver.open_close_mutex); */ | 166 | /* mutex_unlock(&tm6000_driver.open_close_mutex); */ |
157 | if (ret) { | 167 | if (ret) { |
@@ -396,6 +406,11 @@ static int dvb_init(struct tm6000_core *dev) | |||
396 | if (!dev->caps.has_dvb) | 406 | if (!dev->caps.has_dvb) |
397 | return 0; | 407 | return 0; |
398 | 408 | ||
409 | if (dev->udev->speed == USB_SPEED_FULL) { | ||
410 | printk(KERN_INFO "This USB2.0 device cannot be run on a USB1.1 port. (it lacks a hardware PID filter)\n"); | ||
411 | return 0; | ||
412 | } | ||
413 | |||
399 | dvb = kzalloc(sizeof(struct tm6000_dvb), GFP_KERNEL); | 414 | dvb = kzalloc(sizeof(struct tm6000_dvb), GFP_KERNEL); |
400 | if (!dvb) { | 415 | if (!dvb) { |
401 | printk(KERN_INFO "Cannot allocate memory\n"); | 416 | printk(KERN_INFO "Cannot allocate memory\n"); |