Przeglądaj źródła

[PATCH] USB: usbnet driver fixes

Updates to the usbnet driver:

 - Remove a warning when built with Zaurus support but not CDC Ethernet;
   just moves an #ifdef to cover more code

 - Two tweaks to the pseudo-MDLM support:
    * correctly handle _either_ of the two GUIDs
    * ignore a padding bit that doesn't seem necessary

 - Remove ID for one Motorola phone that uses the MDLM stuff.

It also updates the Kconfig helptext to make it clearer that the "Zaurus"
configuration option supports an increasing (sigh) family of nonstandard
peripheral protocols.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
David Brownell 20 lat temu
rodzic
commit
80615f8153
2 zmienionych plików z 35 dodań i 32 usunięć
  1. 9 5
      drivers/usb/net/Kconfig
  2. 26 27
      drivers/usb/net/usbnet.c

+ 9 - 5
drivers/usb/net/Kconfig

@@ -219,17 +219,21 @@ config USB_EPSON2888
 	  by some sample firmware from Epson.
 	  by some sample firmware from Epson.
 
 
 config USB_ZAURUS
 config USB_ZAURUS
-	boolean "Sharp Zaurus (stock ROMs)"
+	boolean "Sharp Zaurus (stock ROMs) and compatible"
 	depends on USB_USBNET
 	depends on USB_USBNET
 	select CRC32
 	select CRC32
 	default y
 	default y
 	help
 	help
 	  Choose this option to support the usb networking links used by
 	  Choose this option to support the usb networking links used by
 	  Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500.
 	  Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500.
-
-	  If you install an alternate ROM image, you may no longer need
-	  to support this protocol.  Only the "eth-fd" driver really needs
-	  this non-conformant variant of CDC Ethernet protocol.
+	  This also supports some related device firmware, as used in some
+	  PDAs from Olympus and some cell phones from Motorola.
+
+	  If you install an alternate ROM image, such as the Linux 2.6 based
+	  versions of OpenZaurus, you should no longer need to support this
+	  protocol.  Only the "eth-fd" or "net_fd" drivers in these devices
+	  really need this non-conformant variant of CDC Ethernet (or in
+	  some cases CDC MDLM) protocol, not "g_ether".
 
 
 config USB_CDCETHER
 config USB_CDCETHER
 	boolean "CDC Ethernet support (smart devices such as cable modems)"
 	boolean "CDC Ethernet support (smart devices such as cable modems)"

+ 26 - 27
drivers/usb/net/usbnet.c

@@ -1517,6 +1517,26 @@ static void cdc_unbind (struct usbnet *dev, struct usb_interface *intf)
 	}
 	}
 }
 }
 
 
+#endif	/* NEED_GENERIC_CDC */
+
+
+#ifdef	CONFIG_USB_CDCETHER
+#define	HAVE_HARDWARE
+
+/*-------------------------------------------------------------------------
+ *
+ * Communications Device Class, Ethernet Control model
+ *
+ * Takes two interfaces.  The DATA interface is inactive till an altsetting
+ * is selected.  Configuration data includes class descriptors.
+ *
+ * This should interop with whatever the 2.4 "CDCEther.c" driver
+ * (by Brad Hards) talked with.
+ *
+ *-------------------------------------------------------------------------*/
+
+#include <linux/ctype.h>
+
 
 
 static void dumpspeed (struct usbnet *dev, __le32 *speeds)
 static void dumpspeed (struct usbnet *dev, __le32 *speeds)
 {
 {
@@ -1567,26 +1587,6 @@ static void cdc_status (struct usbnet *dev, struct urb *urb)
 	}
 	}
 }
 }
 
 
-#endif	/* NEED_GENERIC_CDC */
-
-
-#ifdef	CONFIG_USB_CDCETHER
-#define	HAVE_HARDWARE
-
-/*-------------------------------------------------------------------------
- *
- * Communications Device Class, Ethernet Control model
- * 
- * Takes two interfaces.  The DATA interface is inactive till an altsetting
- * is selected.  Configuration data includes class descriptors.
- *
- * This should interop with whatever the 2.4 "CDCEther.c" driver
- * (by Brad Hards) talked with.
- *
- *-------------------------------------------------------------------------*/
-
-#include <linux/ctype.h>
-
 static u8 nibble (unsigned char c)
 static u8 nibble (unsigned char c)
 {
 {
 	if (likely (isdigit (c)))
 	if (likely (isdigit (c)))
@@ -2765,7 +2765,7 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf)
 			}
 			}
 			/* expect bcdVersion 1.0, ignore */
 			/* expect bcdVersion 1.0, ignore */
 			if (memcmp(&desc->bGUID, blan_guid, 16)
 			if (memcmp(&desc->bGUID, blan_guid, 16)
-				    || memcmp(&desc->bGUID, blan_guid, 16) ) {
+				    && memcmp(&desc->bGUID, blan_guid, 16) ) {
 				/* hey, this one might _really_ be MDLM! */
 				/* hey, this one might _really_ be MDLM! */
 				dev_dbg (&intf->dev, "MDLM guid\n");
 				dev_dbg (&intf->dev, "MDLM guid\n");
 				goto bad_desc;
 				goto bad_desc;
@@ -2797,11 +2797,13 @@ static int blan_mdlm_bind (struct usbnet *dev, struct usb_interface *intf)
 			 *  - bPad (ignored, for PADAFTER -- BLAN-only)
 			 *  - bPad (ignored, for PADAFTER -- BLAN-only)
 			 * bits are:
 			 * bits are:
 			 *  - 0x01 -- Zaurus framing (add CRC)
 			 *  - 0x01 -- Zaurus framing (add CRC)
-			 *  - 0x02 -- PADBEFORE
-			 *  - 0x04 -- PADAFTER
+			 *  - 0x02 -- PADBEFORE (CRC includes some padding)
+			 *  - 0x04 -- PADAFTER (some padding after CRC)
 			 *  - 0x08 -- "fermat" packet mangling (for hw bugs)
 			 *  - 0x08 -- "fermat" packet mangling (for hw bugs)
+			 * the PADBEFORE appears not to matter; we interop
+			 * with devices that use it and those that don't.
 			 */
 			 */
-			if (detail->bDetailData[1] != 0x01) {
+			if ((detail->bDetailData[1] & ~02) != 0x01) {
 				/* bmDataCapabilites == 0 would be fine too,
 				/* bmDataCapabilites == 0 would be fine too,
 				 * but framing is minidriver-coupled for now.
 				 * but framing is minidriver-coupled for now.
 				 */
 				 */
@@ -4070,9 +4072,6 @@ static const struct usb_device_id	products [] = {
 }, {
 }, {
 	USB_DEVICE (0x8086, 0x07d3),	// "blob" bootloader
 	USB_DEVICE (0x8086, 0x07d3),	// "blob" bootloader
 	.driver_info =	(unsigned long) &blob_info,
 	.driver_info =	(unsigned long) &blob_info,
-}, {
-	USB_DEVICE (0x22b8, 0x600c),	// USBNET Motorola E680
-	.driver_info =	(unsigned long) &linuxdev_info,
 }, {
 }, {
 	// Linux Ethernet/RNDIS gadget on pxa210/25x/26x
 	// Linux Ethernet/RNDIS gadget on pxa210/25x/26x
 	// e.g. Gumstix, current OpenZaurus, ...
 	// e.g. Gumstix, current OpenZaurus, ...