mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 03:27:03 +02:00
Merge patch series "can: refactor USB endpoint lookups"
Johan Hovold <johan@kernel.org> says: Use the common USB helper for looking up bulk and interrupt endpoints instead of open coding. Link: https://patch.msgid.link/20260330101817.1664787-1-johan@kernel.org Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
commit
50b4927288
|
|
@ -1957,27 +1957,18 @@ static int kvaser_usb_leaf_get_berr_counter(const struct net_device *netdev,
|
|||
|
||||
static int kvaser_usb_leaf_setup_endpoints(struct kvaser_usb *dev)
|
||||
{
|
||||
const struct usb_host_interface *iface_desc;
|
||||
struct usb_endpoint_descriptor *endpoint;
|
||||
int i;
|
||||
struct usb_host_interface *iface_desc;
|
||||
int ret;
|
||||
|
||||
iface_desc = dev->intf->cur_altsetting;
|
||||
|
||||
for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
|
||||
endpoint = &iface_desc->endpoint[i].desc;
|
||||
/* use first bulk endpoint for in and out */
|
||||
ret = usb_find_common_endpoints(iface_desc, &dev->bulk_in, &dev->bulk_out,
|
||||
NULL, NULL);
|
||||
if (ret)
|
||||
return -ENODEV;
|
||||
|
||||
if (!dev->bulk_in && usb_endpoint_is_bulk_in(endpoint))
|
||||
dev->bulk_in = endpoint;
|
||||
|
||||
if (!dev->bulk_out && usb_endpoint_is_bulk_out(endpoint))
|
||||
dev->bulk_out = endpoint;
|
||||
|
||||
/* use first bulk endpoint for in and out */
|
||||
if (dev->bulk_in && dev->bulk_out)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops = {
|
||||
|
|
|
|||
|
|
@ -1302,13 +1302,12 @@ static int ucan_probe(struct usb_interface *intf,
|
|||
const struct usb_device_id *id)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
u32 protocol_version;
|
||||
struct usb_device *udev;
|
||||
struct net_device *netdev;
|
||||
struct usb_host_interface *iface_desc;
|
||||
struct ucan_priv *up;
|
||||
struct usb_endpoint_descriptor *ep;
|
||||
struct usb_endpoint_descriptor *ep_in, *ep_out;
|
||||
u16 in_ep_size;
|
||||
u16 out_ep_size;
|
||||
u8 in_ep_addr;
|
||||
|
|
@ -1343,37 +1342,20 @@ static int ucan_probe(struct usb_interface *intf,
|
|||
}
|
||||
|
||||
/* check interface endpoints */
|
||||
in_ep_addr = 0;
|
||||
out_ep_addr = 0;
|
||||
in_ep_size = 0;
|
||||
out_ep_size = 0;
|
||||
for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
|
||||
ep = &iface_desc->endpoint[i].desc;
|
||||
|
||||
if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) != 0) &&
|
||||
((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_BULK)) {
|
||||
/* In Endpoint */
|
||||
in_ep_addr = ep->bEndpointAddress;
|
||||
in_ep_addr &= USB_ENDPOINT_NUMBER_MASK;
|
||||
in_ep_size = le16_to_cpu(ep->wMaxPacketSize);
|
||||
} else if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) ==
|
||||
0) &&
|
||||
((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_BULK)) {
|
||||
/* Out Endpoint */
|
||||
out_ep_addr = ep->bEndpointAddress;
|
||||
out_ep_addr &= USB_ENDPOINT_NUMBER_MASK;
|
||||
out_ep_size = le16_to_cpu(ep->wMaxPacketSize);
|
||||
}
|
||||
}
|
||||
|
||||
/* check if interface is sane */
|
||||
if (!in_ep_addr || !out_ep_addr) {
|
||||
ret = usb_find_common_endpoints_reverse(iface_desc, &ep_in, &ep_out,
|
||||
NULL, NULL);
|
||||
if (ret) {
|
||||
dev_err(&udev->dev, "%s: invalid endpoint configuration\n",
|
||||
UCAN_DRIVER_NAME);
|
||||
goto err_firmware_needs_update;
|
||||
}
|
||||
|
||||
in_ep_addr = usb_endpoint_num(ep_in);
|
||||
out_ep_addr = usb_endpoint_num(ep_out);
|
||||
in_ep_size = usb_endpoint_maxp(ep_in);
|
||||
out_ep_size = usb_endpoint_maxp(ep_out);
|
||||
|
||||
/* check if interface is sane */
|
||||
if (in_ep_size < sizeof(struct ucan_message_in)) {
|
||||
dev_err(&udev->dev, "%s: invalid in_ep MaxPacketSize\n",
|
||||
UCAN_DRIVER_NAME);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user