aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class/cdc-wdm.c
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.com>2016-07-14 09:41:33 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-07-18 11:46:57 -0400
commit7fae7bfb9a58ae66a29a6017abb7f62d2eb971e2 (patch)
treefd29749502aff17b7ab24ef4e93afaec866a2871 /drivers/usb/class/cdc-wdm.c
parent6dd3587f515ec4b1b8bcaaeb628ed1921eeed2ea (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.c30
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 }
906next_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)