aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2016-03-03 16:20:53 -0500
committerDavid S. Miller <davem@davemloft.net>2016-03-07 14:37:39 -0500
commit48906f62c96cc2cd35753e59310cb70eb08cc6a5 (patch)
tree1ca9a13fe0f189a30d7e8b2dc04f01764ef8702f
parent1666984c8625b3db19a9abc298931d35ab7bc64b (diff)
cdc_ncm: toggle altsetting to force reset before setup
Some devices will silently fail setup unless they are reset first. This is necessary even if the data interface is already in altsetting 0, which it will be when the device is probed for the first time. Briefly toggling the altsetting forces a function reset regardless of the initial state. This fixes a setup problem observed on a number of Huawei devices, appearing to operate in NTB-32 mode even if we explicitly set them to NTB-16 mode. Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/usb/cdc_ncm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index dc0212c3cc28..be927964375b 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -837,7 +837,11 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
837 837
838 iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber; 838 iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;
839 839
840 /* reset data interface */ 840 /* Reset data interface. Some devices will not reset properly
841 * unless they are configured first. Toggle the altsetting to
842 * force a reset
843 */
844 usb_set_interface(dev->udev, iface_no, data_altsetting);
841 temp = usb_set_interface(dev->udev, iface_no, 0); 845 temp = usb_set_interface(dev->udev, iface_no, 0);
842 if (temp) { 846 if (temp) {
843 dev_dbg(&intf->dev, "set interface failed\n"); 847 dev_dbg(&intf->dev, "set interface failed\n");