mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 23:24:05 +08:00
cdc-phonet: use common parser
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>
This commit is contained in:
parent
8492ed45aa
commit
7b6ee48d3f
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user