*** ftdi.c	2011-05-23 19:20:11.000000000 +0400
--- ftdi2.c	2011-06-26 14:43:15.000000000 +0400
***************
*** 406,411 ****
--- 406,412 ----
  static unsigned int _ftdi_determine_max_packet_size(struct ftdi_context *ftdi, struct usb_device *dev)
  {
      unsigned int packet_size;
+     int i ;
  
      // Sanity check
      if (ftdi == NULL || dev == NULL)
***************
*** 419,425 ****
      else
          packet_size = 64;
  
!     if (dev->descriptor.bNumConfigurations > 0 && dev->config)
      {
          struct usb_config_descriptor config = dev->config[0];
  
--- 420,426 ----
      else
          packet_size = 64;
  
!     if (packet_size > 64 && dev->descriptor.bNumConfigurations > 0 && dev->config)
      {
          struct usb_config_descriptor config = dev->config[0];
  
***************
*** 429,438 ****
              if (interface.num_altsetting > 0)
              {
                  struct usb_interface_descriptor descriptor = interface.altsetting[0];
!                 if (descriptor.bNumEndpoints > 0)
!                 {
!                     packet_size = descriptor.endpoint[0].wMaxPacketSize;
!                 }
              }
          }
      }
--- 430,441 ----
              if (interface.num_altsetting > 0)
              {
                  struct usb_interface_descriptor descriptor = interface.altsetting[0];
!                 for (i = 0; i < descriptor.bNumEndpoints; ++i)
!                     if (descriptor.endpoint[i].wMaxPacketSize)
!                     {
!                         packet_size = descriptor.endpoint[0].wMaxPacketSize;
!                         break ;
!                     }
              }
          }
      }
