Skip to content
  • Bjørn Mork's avatar
    net: qmi_wwan: set correct altsetting for Gobi 1K devices · b701f16d
    Bjørn Mork authored
    commit bd877e48 ("net: qmi_wwan: use a single bind function for
    all device types") made Gobi 1K devices fail probing.
    
    Using the number of endpoints in the default altsetting to decide
    whether the function use one or two interfaces is wrong.  Other
    altsettings may provide more endpoints.
    
    With Gobi 1K devices, USB interface #3's altsetting is 0 by default, but
    altsetting 0 only provides one interrupt endpoint and is not sufficent
    for QMI.  Altsetting 1 provides all 3 endpoints required for qmi_wwan
    and works with QMI. Gobi 1K layout for intf#3 is:
    
        Interface Descriptor:  255/255/255
          bInterfaceNumber        3
          bAlternateSetting       0
          Endpoint Descriptor:  Interrupt IN
        Interface Descriptor:  255/255/255
          bInterfaceNumber        3
          bAlternateSetting       1
          Endpoint Descriptor:  Interrupt IN
          Endpoint Descriptor:  Bulk IN
          Endpoint Descriptor:  Bulk OUT
    
    Prior to commit bd877e48, we would call usbnet_get_endpoints
    before giving up finding enough endpoints. Removing the early
    endpoint number test and the strict functional descriptor
    requirement allow qmi_wwan_bind to continue until
    usbnet_get_endpoints has made the final attempt to collect
    endpoints.  This restores the behaviour from before commit
    bd877e48
    
     without losing the added benefit of using a single bind
    function.
    
    The driver has always required a CDC Union functional descriptor
    for two-interface functions. Using the existence of this
    descriptor to detect two-interface functions is the logically
    correct method.
    
    Reported-by: default avatarDan Williams <dcbw@redhat.com>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Tested-by: default avatarDan Williams <dcbw@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b701f16d