diff mbox

em28xx: ignore isoc DVB USB endpoints with wMaxPacketSize = 0 bytes for all alt settings

Message ID 1364414861-7233-1-git-send-email-fschaefer.oss@googlemail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Frank Schäfer March 27, 2013, 8:07 p.m. UTC
Some devices without DVB support (such as the "Terratec Grabby" and
"Easycap DC-60") provide isochronous DVB USB endpoints with wMaxPacketSize set
to 0 bytes for all alt settings.

Ignore these endpoints and avoid registering a DVB device node and loading the
DVB driver extension.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Cc: stable@kernel.org
---
 drivers/media/usb/em28xx/em28xx-cards.c |    9 ++++++++-
 1 Datei geändert, 8 Zeilen hinzugefügt(+), 1 Zeile entfernt(-)

Comments

Timo Teräs March 28, 2013, 6:12 a.m. UTC | #1
On Wed, 27 Mar 2013 21:07:41 +0100
Frank Schäfer <fschaefer.oss@googlemail.com> wrote:

> Some devices without DVB support (such as the "Terratec Grabby" and
> "Easycap DC-60") provide isochronous DVB USB endpoints with
> wMaxPacketSize set to 0 bytes for all alt settings.
> 
> Ignore these endpoints and avoid registering a DVB device node and
> loading the DVB driver extension.
> 
> Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
> Cc: stable@kernel.org

Tested-by: Timo Teräs <timo.teras@iki.fi>

Fixes the false DVB detection on my "Terratec Grabby".
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index 54e0362..94536ee 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -3357,14 +3357,15 @@  static int em28xx_usb_probe(struct usb_interface *interface,
 						dev->analog_ep_bulk =
 							    e->bEndpointAddress;
 					} else {
-						has_dvb = true;
 						if (usb_endpoint_xfer_isoc(e)) {
 							dev->dvb_ep_isoc = e->bEndpointAddress;
 							if (size > dev->dvb_max_pkt_size_isoc) {
+								has_dvb = true; /* see NOTE (~) */
 								dev->dvb_max_pkt_size_isoc = size;
 								dev->dvb_alt_isoc = i;
 							}
 						} else {
+							has_dvb = true;
 							dev->dvb_ep_bulk = e->bEndpointAddress;
 						}
 					}
@@ -3391,6 +3392,12 @@  static int em28xx_usb_probe(struct usb_interface *interface,
 			 * so far. But there might be devices for which this
 			 * logic is not sufficient...
 			 */
+			/* 
+			 * NOTE (~): some manufacturers (e.g. Terratec) disable
+			 * endpoints by setting wMaxPacketSize to 0 bytes for
+			 * all alt settings. So far, we've seen this for 
+			 * DVB isoc endpoints only.
+			 */
 		}
 	}