Advertisement
Guest User

MCE USB patch

a guest
Apr 20th, 2014
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.09 KB | None | 0 0
  1. --- mceusb.c    2014-04-09 12:37:46.510492000 -0500
  2. +++ mceusb_patched.c    2014-04-17 20:24:03.319805265 -0500
  3. @@ -761,11 +761,17 @@
  4.         }
  5.  
  6.         /* outbound data */
  7. -       pipe = usb_sndintpipe(ir->usbdev,
  8. -                     ir->usb_ep_out->bEndpointAddress);
  9. -       usb_fill_int_urb(async_urb, ir->usbdev, pipe,
  10. -           async_buf, size, mce_async_callback,
  11. -           ir, ir->usb_ep_out->bInterval);
  12. +                if ((ir->usb_ep_out->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  13. +               == USB_ENDPOINT_XFER_INT) {
  14. +                    pipe = usb_sndintpipe(ir->usbdev, ir->usb_ep_out->bEndpointAddress);
  15. +           usb_fill_int_urb(async_urb, ir->usbdev, pipe, async_buf,
  16. +                            size, mce_async_callback, ir, ir->usb_ep_out->bInterval);
  17. +                                
  18. +                } else {
  19. +                    pipe = usb_sndbulkpipe(ir->usbdev, ir->usb_ep_out->bEndpointAddress);
  20. +           usb_fill_bulk_urb(async_urb, ir->usbdev, pipe, async_buf,
  21. +                            size, mce_async_callback, ir);
  22. +                }
  23.         memcpy(async_buf, data, size);
  24.  
  25.     } else if (urb_type == MCEUSB_RX) {
  26. @@ -1285,32 +1291,38 @@
  27.  
  28.         if ((ep_in == NULL)
  29.             && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
  30. -               == USB_DIR_IN)
  31. -           && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  32. -               == USB_ENDPOINT_XFER_BULK)
  33. -           || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  34. -               == USB_ENDPOINT_XFER_INT))) {
  35. -
  36. -           ep_in = ep;
  37. -           ep_in->bmAttributes = USB_ENDPOINT_XFER_INT;
  38. -           ep_in->bInterval = 1;
  39. -           mce_dbg(&intf->dev, "acceptable inbound endpoint "
  40. -               "found\n");
  41. +               == USB_DIR_IN)) {
  42. +           if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  43. +               == USB_ENDPOINT_XFER_BULK) {
  44. +               ep_in = ep;
  45. +               mce_dbg(&intf->dev, "acceptable bulk inbound endpoint "
  46. +                   "found\n");
  47. +           }
  48. +           if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  49. +               == USB_ENDPOINT_XFER_INT) {
  50. +               ep_in = ep;
  51. +               ep_in->bInterval = 1;
  52. +               mce_dbg(&intf->dev, "acceptable interrupt inbound endpoint "
  53. +                   "found\n");
  54. +           }
  55.         }
  56.  
  57.         if ((ep_out == NULL)
  58.             && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
  59. -               == USB_DIR_OUT)
  60. -           && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  61. -               == USB_ENDPOINT_XFER_BULK)
  62. -           || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  63. -               == USB_ENDPOINT_XFER_INT))) {
  64. -
  65. -           ep_out = ep;
  66. -           ep_out->bmAttributes = USB_ENDPOINT_XFER_INT;
  67. -           ep_out->bInterval = 1;
  68. -           mce_dbg(&intf->dev, "acceptable outbound endpoint "
  69. -               "found\n");
  70. +               == USB_DIR_OUT)) {
  71. +           if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  72. +               == USB_ENDPOINT_XFER_BULK) {
  73. +               ep_out = ep;
  74. +               mce_dbg(&intf->dev, "acceptable bulk outbound endpoint "
  75. +                   "found\n");
  76. +           }
  77. +           if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  78. +               == USB_ENDPOINT_XFER_INT) {
  79. +               ep_out = ep;
  80. +               ep_out->bInterval = 1;
  81. +               mce_dbg(&intf->dev, "acceptable interrupt outbound endpoint "
  82. +                   "found\n");
  83. +           }
  84.         }
  85.     }
  86.     if (ep_in == NULL) {
  87. @@ -1318,7 +1330,13 @@
  88.         return -ENODEV;
  89.     }
  90.  
  91. -   pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
  92. +        if ((ep_in->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  93. +               == USB_ENDPOINT_XFER_INT) {
  94. +            pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
  95. +        } else {
  96. +            pipe = usb_rcvbulkpipe(dev, ep_in->bEndpointAddress);
  97. +        }
  98. +
  99.     maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
  100.  
  101.     ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL);
  102. @@ -1359,8 +1377,15 @@
  103.         goto rc_dev_fail;
  104.  
  105.     /* wire up inbound data handler */
  106. -   usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
  107. +        if ((ep_in->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
  108. +               == USB_ENDPOINT_XFER_INT) {
  109. +            usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
  110.                 mceusb_dev_recv, ir, ep_in->bInterval);
  111. +        } else {
  112. +            usb_fill_bulk_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp,
  113. +               mceusb_dev_recv, ir);
  114. +        }
  115. +  
  116.     ir->urb_in->transfer_dma = ir->dma_in;
  117.     ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement