|
@@ -341,6 +341,22 @@ next_desc:
|
|
|
usb_driver_release_interface(driver, info->data);
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
+
|
|
|
+ /* Some devices don't initialise properly. In particular
|
|
|
+ * the packet filter is not reset. There are devices that
|
|
|
+ * don't do reset all the way. So the packet filter should
|
|
|
+ * be set to a sane initial value.
|
|
|
+ */
|
|
|
+ usb_control_msg(dev->udev,
|
|
|
+ usb_sndctrlpipe(dev->udev, 0),
|
|
|
+ USB_CDC_SET_ETHERNET_PACKET_FILTER,
|
|
|
+ USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
|
|
+ USB_CDC_PACKET_TYPE_ALL_MULTICAST | USB_CDC_PACKET_TYPE_DIRECTED | USB_CDC_PACKET_TYPE_BROADCAST,
|
|
|
+ intf->cur_altsetting->desc.bInterfaceNumber,
|
|
|
+ NULL,
|
|
|
+ 0,
|
|
|
+ USB_CTRL_SET_TIMEOUT
|
|
|
+ );
|
|
|
return 0;
|
|
|
|
|
|
bad_desc:
|