cdc-phonet: use common parser
authorOliver Neukum <oneukum@suse.com>
Mon, 7 Sep 2015 14:05:42 +0000 (16:05 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Sep 2015 19:43:49 +0000 (12:43 -0700)
This moves cdc-phonet to the common parser for CDC users
to reduce code duplication.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/cdc-phonet.c

index 415ce8b882c615f08d7368cdfa7bec68bef01fa7..ff2270ead2e68b8a381ab42f6309d919f8b9ed12 100644 (file)
@@ -340,32 +340,13 @@ static int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *i
        u8 *data;
        int phonet = 0;
        int len, err;
+       struct usb_cdc_parsed_header hdr;
 
        data = intf->altsetting->extra;
        len = intf->altsetting->extralen;
-       while (len >= 3) {
-               u8 dlen = data[0];
-               if (dlen < 3)
-                       return -EINVAL;
-
-               /* bDescriptorType */
-               if (data[1] == USB_DT_CS_INTERFACE) {
-                       /* bDescriptorSubType */
-                       switch (data[2]) {
-                       case USB_CDC_UNION_TYPE:
-                               if (union_header || dlen < 5)
-                                       break;
-                               union_header =
-                                       (struct usb_cdc_union_desc *)data;
-                               break;
-                       case 0xAB:
-                               phonet = 1;
-                               break;
-                       }
-               }
-               data += dlen;
-               len -= dlen;
-       }
+       cdc_parse_cdc_header(&hdr, intf, data, len);
+       union_header = hdr.usb_cdc_union_desc;
+       phonet = hdr.phonet_magic_present;
 
        if (!union_header || !phonet)
                return -EINVAL;