{
struct usb_host_interface *idesc = intf->cur_altsetting;
struct usb_device *usbdev = interface_to_usbdev(intf);
- struct usb_endpoint_descriptor *ep_in = NULL;
- struct usb_endpoint_descriptor *ep_out = NULL;
- struct usb_endpoint_descriptor *ep = NULL;
+ struct usb_endpoint_descriptor *ep_in, *ep_out;
struct irtoy *irtoy;
struct rc_dev *rc;
struct urb *urb;
- int i, pipe, err = -ENOMEM;
+ int pipe, err;
- for (i = 0; i < idesc->desc.bNumEndpoints; i++) {
- ep = &idesc->endpoint[i].desc;
-
- if (!ep_in && usb_endpoint_is_bulk_in(ep) &&
- usb_endpoint_maxp(ep) == MAX_PACKET)
- ep_in = ep;
-
- if (!ep_out && usb_endpoint_is_bulk_out(ep) &&
- usb_endpoint_maxp(ep) == MAX_PACKET)
- ep_out = ep;
- }
-
- if (!ep_in || !ep_out) {
+ err = usb_find_common_endpoints(idesc, &ep_in, &ep_out, NULL, NULL);
+ if (err || usb_endpoint_maxp(ep_in) != MAX_PACKET ||
+ usb_endpoint_maxp(ep_out) != MAX_PACKET) {
dev_err(&intf->dev, "required endpoints not found\n");
return -ENODEV;
}
if (!irtoy)
return -ENOMEM;
+ err = -ENOMEM;
irtoy->in = kmalloc(MAX_PACKET, GFP_KERNEL);
if (!irtoy->in)
goto free_irtoy;