diff options
Diffstat (limited to 'drivers/net/can/usb/kvaser_usb.c')
-rw-r--r-- | drivers/net/can/usb/kvaser_usb.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c index 3b9546588240..4b2d5ed62b11 100644 --- a/drivers/net/can/usb/kvaser_usb.c +++ b/drivers/net/can/usb/kvaser_usb.c | |||
@@ -1544,9 +1544,9 @@ static int kvaser_usb_init_one(struct usb_interface *intf, | |||
1544 | return 0; | 1544 | return 0; |
1545 | } | 1545 | } |
1546 | 1546 | ||
1547 | static void kvaser_usb_get_endpoints(const struct usb_interface *intf, | 1547 | static int kvaser_usb_get_endpoints(const struct usb_interface *intf, |
1548 | struct usb_endpoint_descriptor **in, | 1548 | struct usb_endpoint_descriptor **in, |
1549 | struct usb_endpoint_descriptor **out) | 1549 | struct usb_endpoint_descriptor **out) |
1550 | { | 1550 | { |
1551 | const struct usb_host_interface *iface_desc; | 1551 | const struct usb_host_interface *iface_desc; |
1552 | struct usb_endpoint_descriptor *endpoint; | 1552 | struct usb_endpoint_descriptor *endpoint; |
@@ -1557,12 +1557,18 @@ static void kvaser_usb_get_endpoints(const struct usb_interface *intf, | |||
1557 | for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { | 1557 | for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { |
1558 | endpoint = &iface_desc->endpoint[i].desc; | 1558 | endpoint = &iface_desc->endpoint[i].desc; |
1559 | 1559 | ||
1560 | if (usb_endpoint_is_bulk_in(endpoint)) | 1560 | if (!*in && usb_endpoint_is_bulk_in(endpoint)) |
1561 | *in = endpoint; | 1561 | *in = endpoint; |
1562 | 1562 | ||
1563 | if (usb_endpoint_is_bulk_out(endpoint)) | 1563 | if (!*out && usb_endpoint_is_bulk_out(endpoint)) |
1564 | *out = endpoint; | 1564 | *out = endpoint; |
1565 | |||
1566 | /* use first bulk endpoint for in and out */ | ||
1567 | if (*in && *out) | ||
1568 | return 0; | ||
1565 | } | 1569 | } |
1570 | |||
1571 | return -ENODEV; | ||
1566 | } | 1572 | } |
1567 | 1573 | ||
1568 | static int kvaser_usb_probe(struct usb_interface *intf, | 1574 | static int kvaser_usb_probe(struct usb_interface *intf, |
@@ -1576,8 +1582,8 @@ static int kvaser_usb_probe(struct usb_interface *intf, | |||
1576 | if (!dev) | 1582 | if (!dev) |
1577 | return -ENOMEM; | 1583 | return -ENOMEM; |
1578 | 1584 | ||
1579 | kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out); | 1585 | err = kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out); |
1580 | if (!dev->bulk_in || !dev->bulk_out) { | 1586 | if (err) { |
1581 | dev_err(&intf->dev, "Cannot get usb endpoint(s)"); | 1587 | dev_err(&intf->dev, "Cannot get usb endpoint(s)"); |
1582 | return err; | 1588 | return err; |
1583 | } | 1589 | } |