|
@@ -1544,9 +1544,9 @@ static int kvaser_usb_init_one(struct usb_interface *intf,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void kvaser_usb_get_endpoints(const struct usb_interface *intf,
|
|
|
- struct usb_endpoint_descriptor **in,
|
|
|
- struct usb_endpoint_descriptor **out)
|
|
|
+static int kvaser_usb_get_endpoints(const struct usb_interface *intf,
|
|
|
+ struct usb_endpoint_descriptor **in,
|
|
|
+ struct usb_endpoint_descriptor **out)
|
|
|
{
|
|
|
const struct usb_host_interface *iface_desc;
|
|
|
struct usb_endpoint_descriptor *endpoint;
|
|
@@ -1557,12 +1557,18 @@ static void kvaser_usb_get_endpoints(const struct usb_interface *intf,
|
|
|
for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
|
|
|
endpoint = &iface_desc->endpoint[i].desc;
|
|
|
|
|
|
- if (usb_endpoint_is_bulk_in(endpoint))
|
|
|
+ if (!*in && usb_endpoint_is_bulk_in(endpoint))
|
|
|
*in = endpoint;
|
|
|
|
|
|
- if (usb_endpoint_is_bulk_out(endpoint))
|
|
|
+ if (!*out && usb_endpoint_is_bulk_out(endpoint))
|
|
|
*out = endpoint;
|
|
|
+
|
|
|
+ /* use first bulk endpoint for in and out */
|
|
|
+ if (*in && *out)
|
|
|
+ return 0;
|
|
|
}
|
|
|
+
|
|
|
+ return -ENODEV;
|
|
|
}
|
|
|
|
|
|
static int kvaser_usb_probe(struct usb_interface *intf,
|
|
@@ -1576,8 +1582,8 @@ static int kvaser_usb_probe(struct usb_interface *intf,
|
|
|
if (!dev)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out);
|
|
|
- if (!dev->bulk_in || !dev->bulk_out) {
|
|
|
+ err = kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out);
|
|
|
+ if (err) {
|
|
|
dev_err(&intf->dev, "Cannot get usb endpoint(s)");
|
|
|
return err;
|
|
|
}
|