endpoint = &interface->cur_altsetting->endpoint[0].desc;
 
        /* check if the device has the iso in endpoint at the correct place */
-       if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
-           USB_ENDPOINT_XFER_ISOC &&
+       if (usb_endpoint_xfer_isoc(endpoint)
+           &&
            (interface->altsetting[1].endpoint[0].desc.wMaxPacketSize == 940)) {
                /* It's a newer em2874/em2875 device */
                isoc_pipe = 0;
                int check_interface = 1;
                isoc_pipe = 1;
                endpoint = &interface->cur_altsetting->endpoint[1].desc;
-               if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
+               if (usb_endpoint_type(endpoint) !=
                    USB_ENDPOINT_XFER_ISOC)
                        check_interface = 0;
 
-               if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
+               if (usb_endpoint_dir_out(endpoint))
                        check_interface = 0;
 
                if (!check_interface) {
 
                endpoint = &iface_desc->endpoint[i].desc;
 
                if (!dev->isoc_ep
-                       && ((endpoint->bEndpointAddress
-                               & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
-                       && ((endpoint->bmAttributes
-                               & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC)) {
+                       && usb_endpoint_is_isoc_in(endpoint)) {
                        /* we found an isoc in endpoint */
-                       dev->isoc_ep = (endpoint->bEndpointAddress & 0xF);
+                       dev->isoc_ep = usb_endpoint_num(endpoint);
                        break;
                }
        }
 
                        err("Alternate settings have different endpoint addresses!");
                        return -ENODEV;
                }
-               if ((endpoint->bmAttributes & 0x03) != 0x01) {
+               if (usb_endpoint_type(endpoint) != USB_ENDPOINT_XFER_ISOC) {
                        err("Interface %d. has non-ISO endpoint!", ifnum);
                        return -ENODEV;
                }
-               if ((endpoint->bEndpointAddress & 0x80) == 0) {
+               if (usb_endpoint_dir_out(endpoint)) {
                        err("Interface %d. has ISO OUT endpoint!", ifnum);
                        return -ENODEV;
                }
 
                        err("Alternate settings have different endpoint addresses!");
                        return -ENODEV;
                }
-               if ((endpoint->bmAttributes & 0x03) != 0x01) {
+               if (usb_endpoint_type(endpoint) != USB_ENDPOINT_XFER_ISOC) {
                        err("Interface %d. has non-ISO endpoint!",
                            interface->desc.bInterfaceNumber);
                        return -ENODEV;
                }
-               if ((endpoint->bEndpointAddress & 0x80) == 0) {
+               if (usb_endpoint_dir_out(endpoint)) {
                        err("Interface %d. has ISO OUT endpoint!",
                            interface->desc.bInterfaceNumber);
                        return -ENODEV;
 
                for (j=0; j < interface->desc.bNumEndpoints; j++) {
                        endpoint = &interface->endpoint[j].desc;
 
-                       if ((endpoint->bEndpointAddress &
-                               USB_ENDPOINT_DIR_MASK) != USB_DIR_IN)
+                       if (usb_endpoint_dir_out(endpoint))
                                continue; /* not input then not good */
 
                        buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
                                continue; /* 0 pkt size is not what we want */
                        }
 
-                       if ((endpoint->bmAttributes &
-                               USB_ENDPOINT_XFERTYPE_MASK) ==
-                               USB_ENDPOINT_XFER_ISOC) {
+                       if (usb_endpoint_xfer_isoc(endpoint)) {
                                video_ep = endpoint->bEndpointAddress;
                                /* break out of the search */
                                goto good_videoep;
 
                        err("Alternate settings have different endpoint addresses!");
                        return -ENODEV;
                }
-               if ((endpoint->bmAttributes & 0x03) != 0x01) {
+               if (usb_endpoint_type(endpoint) != USB_ENDPOINT_XFER_ISOC) {
                        err("Interface %d. has non-ISO endpoint!",
                            interface->desc.bInterfaceNumber);
                        return -ENODEV;
                }
-               if ((endpoint->bEndpointAddress & 0x80) == 0) {
+               if (usb_endpoint_dir_out(endpoint)) {
                        err("Interface %d. has ISO OUT endpoint!",
                            interface->desc.bInterfaceNumber);
                        return -ENODEV;
 
               interface->desc.bInterfaceNumber, (unsigned) (interface->desc.bNumEndpoints));
        endpoint = &interface->endpoint[0].desc;
 
-       if ((endpoint->bEndpointAddress & 0x80) &&
-           ((endpoint->bmAttributes & 3) == 0x02)) {
+       if (usb_endpoint_is_bulk_in(endpoint)) {
                /* we found a bulk in endpoint */
                bulkEndpoint = endpoint->bEndpointAddress;
        } else {
 
                interface = &dev->actconfig->interface[ifnum]->altsetting[0];
        }
        endpoint = &interface->endpoint[1].desc;
-       if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
+       if (usb_endpoint_type(endpoint) !=
            USB_ENDPOINT_XFER_ISOC) {
                err("%s: interface %d. has non-ISO endpoint!",
                    __func__, ifnum);
                    __func__, endpoint->bmAttributes);
                return -ENODEV;
        }
-       if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) ==
-           USB_DIR_OUT) {
+       if (usb_endpoint_dir_out(endpoint)) {
                err("%s: interface %d. has ISO OUT endpoint!",
                    __func__, ifnum);
                return -ENODEV;