|
@@ -1344,6 +1344,18 @@ static int qmi_wwan_probe(struct usb_interface *intf,
|
|
|
id->driver_info = (unsigned long)&qmi_wwan_info;
|
|
|
}
|
|
|
|
|
|
+ /* There are devices where the same interface number can be
|
|
|
+ * configured as different functions. We should only bind to
|
|
|
+ * vendor specific functions when matching on interface number
|
|
|
+ */
|
|
|
+ if (id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER &&
|
|
|
+ desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) {
|
|
|
+ dev_dbg(&intf->dev,
|
|
|
+ "Rejecting interface number match for class %02x\n",
|
|
|
+ desc->bInterfaceClass);
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+
|
|
|
/* Quectel EC20 quirk where we've QMI on interface 4 instead of 0 */
|
|
|
if (quectel_ec20_detected(intf) && desc->bInterfaceNumber == 0) {
|
|
|
dev_dbg(&intf->dev, "Quectel EC20 quirk, skipping interface 0\n");
|