summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/em28xx
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-05-27 22:23:37 -0400
committerDevin Heitmueller <dheitmueller@kernellabs.com>2009-05-27 22:23:37 -0400
commit0ee8ab67793906ca35ec917d37e53f82a68ef59e (patch)
treea4d521c53241aed3de16449e5fe9f8bba0f8e6ec /linux/drivers/media/video/em28xx
parent2ba29f04ef6c89b77c469257ed249a94c52b8871 (diff)
downloadmediapointer-dvb-s2-0ee8ab67793906ca35ec917d37e53f82a68ef59e.tar.gz
mediapointer-dvb-s2-0ee8ab67793906ca35ec917d37e53f82a68ef59e.tar.bz2
em28xx: Don't let device work unless connected to a high speed USB port
From: Devin Heitmueller <dheitmueller@kernellabs.com> The em28xx basically just doesn't work at 12 Mbps. The isoc pipe needs nearly 200 Mbps for analog support, so users would see garbage video, and on the DVB/ATSC side scanning is likely to work but if the user tried to tune it would certainly appear to have failed. It's better to fail explicity up front and tell the user to plug into a USB 2.0 port, than to let the driver load and the user have weird problems with tuning and garbage video. Priority: normal Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Diffstat (limited to 'linux/drivers/media/video/em28xx')
-rw-r--r--linux/drivers/media/video/em28xx/em28xx-cards.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/linux/drivers/media/video/em28xx/em28xx-cards.c b/linux/drivers/media/video/em28xx/em28xx-cards.c
index 384aead65..9c092f842 100644
--- a/linux/drivers/media/video/em28xx/em28xx-cards.c
+++ b/linux/drivers/media/video/em28xx/em28xx-cards.c
@@ -2482,6 +2482,20 @@ static int em28xx_usb_probe(struct usb_interface *interface,
ifnum,
interface->altsetting->desc.bInterfaceNumber);
+ /*
+ * Make sure we have 480 Mbps of bandwidth, otherwise things like
+ * video stream wouldn't likely work, since 12 Mbps is generally
+ * not enough even for most Digital TV streams.
+ */
+ if (udev->speed != USB_SPEED_HIGH) {
+ printk(DRIVER_NAME ": Device initialization failed.\n");
+ printk(DRIVER_NAME ": Device must be connected to a high-speed"
+ " USB 2.0 port.\n");
+ em28xx_devused &= ~(1<<nr);
+ retval = -ENODEV;
+ goto err;
+ }
+
if (nr >= EM28XX_MAXBOARDS) {
printk(DRIVER_NAME ": Supports only %i em28xx boards.\n",
EM28XX_MAXBOARDS);