summaryrefslogtreecommitdiff
path: root/drivers/net/usb/cdc_ncm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb/cdc_ncm.c')
-rw-r--r--drivers/net/usb/cdc_ncm.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index f94711c..9197b2c 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -344,23 +344,6 @@ static const struct ethtool_ops cdc_ncm_ethtool_ops = {
.nway_reset = usbnet_nway_reset,
};
-/* return first slave interface if an IAD matches the given master */
-static struct usb_interface *get_iad_slave(struct usb_device *udev,
- struct usb_interface *master) {
- int i;
- struct usb_interface_assoc_descriptor *iad;
- u8 mnum = master->cur_altsetting->desc.bInterfaceNumber;
-
- for (i = 0; i < USB_MAXIADS; i++) {
- iad = udev->actconfig->intf_assoc[i];
- if (!iad)
- break;
- if (iad->bFirstInterface == mnum && iad->bInterfaceCount == 2)
- return usb_ifnum_to_if(udev, mnum + 1);
- }
- return NULL;
-}
-
int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting)
{
struct cdc_ncm_ctx *ctx;
@@ -453,13 +436,10 @@ advance:
}
/* some buggy devices have an IAD but no CDC Union */
- if (!ctx->union_desc) {
- dev_dbg(&intf->dev, "missing CDC Union descriptor\n");
- ctx->data = get_iad_slave(dev->udev, intf);
- if (ctx->data) {
- ctx->control = intf;
- dev_dbg(&intf->dev, "got slave from IAD\n");
- }
+ if (!ctx->union_desc && intf->intf_assoc && intf->intf_assoc->bInterfaceCount == 2) {
+ ctx->control = intf;
+ ctx->data = usb_ifnum_to_if(dev->udev, intf->cur_altsetting->desc.bInterfaceNumber + 1);
+ dev_dbg(&intf->dev, "CDC Union missing - got slave from IAD\n");
}
/* check if we got everything */