#define MCBA_USB_RX_BUFF_SIZE 64
 #define MCBA_USB_TX_BUFF_SIZE (sizeof(struct mcba_usb_msg))
 
-/* MCBA endpoint numbers */
-#define MCBA_USB_EP_IN 1
-#define MCBA_USB_EP_OUT 1
-
 /* Microchip command id */
 #define MBCA_CMD_RECEIVE_MESSAGE 0xE3
 #define MBCA_CMD_I_AM_ALIVE_FROM_CAN 0xF5
        atomic_t free_ctx_cnt;
        void *rxbuf[MCBA_MAX_RX_URBS];
        dma_addr_t rxbuf_dma[MCBA_MAX_RX_URBS];
+       int rx_pipe;
+       int tx_pipe;
 };
 
 /* CAN frame */
 
        memcpy(buf, usb_msg, MCBA_USB_TX_BUFF_SIZE);
 
-       usb_fill_bulk_urb(urb, priv->udev,
-                         usb_sndbulkpipe(priv->udev, MCBA_USB_EP_OUT), buf,
-                         MCBA_USB_TX_BUFF_SIZE, mcba_usb_write_bulk_callback,
-                         ctx);
+       usb_fill_bulk_urb(urb, priv->udev, priv->tx_pipe, buf, MCBA_USB_TX_BUFF_SIZE,
+                         mcba_usb_write_bulk_callback, ctx);
 
        urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
        usb_anchor_urb(urb, &priv->tx_submitted);
 resubmit_urb:
 
        usb_fill_bulk_urb(urb, priv->udev,
-                         usb_rcvbulkpipe(priv->udev, MCBA_USB_EP_OUT),
+                         priv->rx_pipe,
                          urb->transfer_buffer, MCBA_USB_RX_BUFF_SIZE,
                          mcba_usb_read_bulk_callback, priv);
 
                urb->transfer_dma = buf_dma;
 
                usb_fill_bulk_urb(urb, priv->udev,
-                                 usb_rcvbulkpipe(priv->udev, MCBA_USB_EP_IN),
+                                 priv->rx_pipe,
                                  buf, MCBA_USB_RX_BUFF_SIZE,
                                  mcba_usb_read_bulk_callback, priv);
                urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
        struct mcba_priv *priv;
        int err;
        struct usb_device *usbdev = interface_to_usbdev(intf);
+       struct usb_endpoint_descriptor *in, *out;
+
+       err = usb_find_common_endpoints(intf->cur_altsetting, &in, &out, NULL, NULL);
+       if (err) {
+               dev_err(&intf->dev, "Can't find endpoints\n");
+               return err;
+       }
 
        netdev = alloc_candev(sizeof(struct mcba_priv), MCBA_MAX_TX_URBS);
        if (!netdev) {
                goto cleanup_free_candev;
        }
 
+       priv->rx_pipe = usb_rcvbulkpipe(priv->udev, in->bEndpointAddress);
+       priv->tx_pipe = usb_sndbulkpipe(priv->udev, out->bEndpointAddress);
+
        devm_can_led_init(netdev);
 
        /* Start USB dev only if we have successfully registered CAN device */