Oliver Neukum <oneukum@xxxxxxxx> writes: > Now that the common parser resides in USB core, it can > be used for CDC-WDM. > > Signed-off-by: Oliver Neukum <ONeukum@xxxxxxxx> > --- > drivers/usb/class/cdc-wdm.c | 29 +++++------------------------ > 1 file changed, 5 insertions(+), 24 deletions(-) > > diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c > index 61ea879..81188fa 100644 > --- a/drivers/usb/class/cdc-wdm.c > +++ b/drivers/usb/class/cdc-wdm.c > @@ -876,37 +876,18 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id) > struct usb_host_interface *iface; > struct usb_endpoint_descriptor *ep; > struct usb_cdc_dmm_desc *dmhd; > + struct usb_cdc_parsed_header hdr; > u8 *buffer = intf->altsetting->extra; > int buflen = intf->altsetting->extralen; > u16 maxcom = WDM_DEFAULT_BUFSIZE; > > if (!buffer) > goto err; > - while (buflen > 2) { > - if (buffer[1] != USB_DT_CS_INTERFACE) { > - dev_err(&intf->dev, "skipping garbage\n"); > - goto next_desc; > - } > > - switch (buffer[2]) { > - case USB_CDC_HEADER_TYPE: > - break; > - case USB_CDC_DMM_TYPE: > - dmhd = (struct usb_cdc_dmm_desc *)buffer; > - maxcom = le16_to_cpu(dmhd->wMaxCommand); > - dev_dbg(&intf->dev, > - "Finding maximum buffer length: %d", maxcom); > - break; > - default: > - dev_err(&intf->dev, > - "Ignoring extra header, type %d, length %d\n", > - buffer[2], buffer[0]); > - break; > - } > -next_desc: > - buflen -= buffer[0]; > - buffer += buffer[0]; > - } > + cdc_parse_cdc_header(&hdr, intf, buffer, buflen); > + dmhd = hdr.usb_cdc_dmm_desc; > + if (dmhd) > + maxcom = le16_to_cpu(dmhd->wMaxCommand); The only pupose of the dmhd variable is parsing the descriptor. This is pretty pointless after this change. Just drop it and do if (hdr.usb_cdc_dmm_desc) maxcom = le16_to_cpu(hdr.usb_cdc_dmm_desc->wMaxCommand); Bjørn -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html