diff options
author | Oliver Neukum <oneukum@suse.com> | 2016-07-14 09:41:33 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-07-18 11:46:57 -0400 |
commit | 7fae7bfb9a58ae66a29a6017abb7f62d2eb971e2 (patch) | |
tree | fd29749502aff17b7ab24ef4e93afaec866a2871 /drivers/usb/class/cdc-wdm.c | |
parent | 6dd3587f515ec4b1b8bcaaeb628ed1921eeed2ea (diff) |
cdc-wdm: use the common CDC parser
Now that the common parser resides in USB core, it can
be used for CDC-WDM.
Signed-off-by: Oliver Neukum <ONeukum@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/class/cdc-wdm.c')
-rw-r--r-- | drivers/usb/class/cdc-wdm.c | 30 |
1 files changed, 5 insertions, 25 deletions
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index 61ea87917433..337948c42110 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c | |||
@@ -875,38 +875,18 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
875 | int rv = -EINVAL; | 875 | int rv = -EINVAL; |
876 | struct usb_host_interface *iface; | 876 | struct usb_host_interface *iface; |
877 | struct usb_endpoint_descriptor *ep; | 877 | struct usb_endpoint_descriptor *ep; |
878 | struct usb_cdc_dmm_desc *dmhd; | 878 | struct usb_cdc_parsed_header hdr; |
879 | u8 *buffer = intf->altsetting->extra; | 879 | u8 *buffer = intf->altsetting->extra; |
880 | int buflen = intf->altsetting->extralen; | 880 | int buflen = intf->altsetting->extralen; |
881 | u16 maxcom = WDM_DEFAULT_BUFSIZE; | 881 | u16 maxcom = WDM_DEFAULT_BUFSIZE; |
882 | 882 | ||
883 | if (!buffer) | 883 | if (!buffer) |
884 | goto err; | 884 | goto err; |
885 | while (buflen > 2) { | ||
886 | if (buffer[1] != USB_DT_CS_INTERFACE) { | ||
887 | dev_err(&intf->dev, "skipping garbage\n"); | ||
888 | goto next_desc; | ||
889 | } | ||
890 | 885 | ||
891 | switch (buffer[2]) { | 886 | cdc_parse_cdc_header(&hdr, intf, buffer, buflen); |
892 | case USB_CDC_HEADER_TYPE: | 887 | |
893 | break; | 888 | if (hdr.usb_cdc_dmm_desc) |
894 | case USB_CDC_DMM_TYPE: | 889 | maxcom = le16_to_cpu(hdr.usb_cdc_dmm_desc->wMaxCommand); |
895 | dmhd = (struct usb_cdc_dmm_desc *)buffer; | ||
896 | maxcom = le16_to_cpu(dmhd->wMaxCommand); | ||
897 | dev_dbg(&intf->dev, | ||
898 | "Finding maximum buffer length: %d", maxcom); | ||
899 | break; | ||
900 | default: | ||
901 | dev_err(&intf->dev, | ||
902 | "Ignoring extra header, type %d, length %d\n", | ||
903 | buffer[2], buffer[0]); | ||
904 | break; | ||
905 | } | ||
906 | next_desc: | ||
907 | buflen -= buffer[0]; | ||
908 | buffer += buffer[0]; | ||
909 | } | ||
910 | 890 | ||
911 | iface = intf->cur_altsetting; | 891 | iface = intf->cur_altsetting; |
912 | if (iface->desc.bNumEndpoints != 1) | 892 | if (iface->desc.bNumEndpoints != 1) |