]> git.sur5r.net Git - u-boot/blobdiff - drivers/serial/usbtty.c
Merge branch 'u-boot-imx/master' into 'u-boot-arm/master'
[u-boot] / drivers / serial / usbtty.c
index a263b2c1fc593ea015f685c6f3ace3806e6f01c8..8e0815334431a1c99b115e3f8a38bdb16a5fa869 100644 (file)
@@ -63,7 +63,7 @@
 /*
  * Buffers to hold input and output data
  */
-#define USBTTY_BUFFER_SIZE 256
+#define USBTTY_BUFFER_SIZE 2048
 static circbuf_t usbtty_input;
 static circbuf_t usbtty_output;
 
@@ -133,6 +133,19 @@ static struct usb_device_descriptor device_descriptor = {
 };
 
 
+#if defined(CONFIG_USBD_HS)
+static struct usb_qualifier_descriptor qualifier_descriptor = {
+       .bLength = sizeof(struct usb_qualifier_descriptor),
+       .bDescriptorType =      USB_DT_QUAL,
+       .bcdUSB =               cpu_to_le16(USB_BCD_VERSION),
+       .bDeviceClass =         COMMUNICATIONS_DEVICE_CLASS,
+       .bDeviceSubClass =      0x00,
+       .bDeviceProtocol =      0x00,
+       .bMaxPacketSize0 =      EP0_MAX_PACKET_SIZE,
+       .bNumConfigurations =   NUM_CONFIGS
+};
+#endif
+
 /*
  * Static CDC ACM specific descriptors
  */
@@ -638,6 +651,9 @@ static void usbtty_init_instances (void)
        memset (device_instance, 0, sizeof (struct usb_device_instance));
        device_instance->device_state = STATE_INIT;
        device_instance->device_descriptor = &device_descriptor;
+#if defined(CONFIG_USBD_HS)
+       device_instance->qualifier_descriptor = &qualifier_descriptor;
+#endif
        device_instance->event = usbtty_event_handler;
        device_instance->cdc_recv_setup = usbtty_cdc_setup;
        device_instance->bus = bus_instance;
@@ -751,6 +767,10 @@ static void usbtty_init_terminal_type(short type)
                        device_descriptor.idProduct =
                                cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM);
 
+#if defined(CONFIG_USBD_HS)
+                       qualifier_descriptor.bDeviceClass =
+                               COMMUNICATIONS_DEVICE_CLASS;
+#endif
                        /* Assign endpoint indices */
                        tx_endpoint = ACM_TX_ENDPOINT;
                        rx_endpoint = ACM_RX_ENDPOINT;
@@ -779,7 +799,9 @@ static void usbtty_init_terminal_type(short type)
                        device_descriptor.bDeviceClass = 0xFF;
                        device_descriptor.idProduct =
                                cpu_to_le16(CONFIG_USBD_PRODUCTID_GSERIAL);
-
+#if defined(CONFIG_USBD_HS)
+                       qualifier_descriptor.bDeviceClass = 0xFF;
+#endif
                        /* Assign endpoint indices */
                        tx_endpoint = GSERIAL_TX_ENDPOINT;
                        rx_endpoint = GSERIAL_RX_ENDPOINT;
@@ -932,6 +954,9 @@ static int usbtty_configured (void)
 static void usbtty_event_handler (struct usb_device_instance *device,
                                  usb_device_event_t event, int data)
 {
+#if defined(CONFIG_USBD_HS)
+       int i;
+#endif
        switch (event) {
        case DEVICE_RESET:
        case DEVICE_BUS_INACTIVE:
@@ -942,6 +967,29 @@ static void usbtty_event_handler (struct usb_device_instance *device,
                break;
 
        case DEVICE_ADDRESS_ASSIGNED:
+#if defined(CONFIG_USBD_HS)
+               /*
+                * is_usbd_high_speed routine needs to be defined by
+                * specific gadget driver
+                * It returns true if device enumerates at High speed
+                * Retuns false otherwise
+                */
+               for (i = 0; i < NUM_ENDPOINTS; i++) {
+                       if (((ep_descriptor_ptrs[i]->bmAttributes &
+                             USB_ENDPOINT_XFERTYPE_MASK) ==
+                             USB_ENDPOINT_XFER_BULK)
+                           && is_usbd_high_speed()) {
+
+                               ep_descriptor_ptrs[i]->wMaxPacketSize =
+                                       CONFIG_USBD_SERIAL_BULK_HS_PKTSIZE;
+                       }
+
+                       endpoint_instance[i + 1].tx_packetSize =
+                               ep_descriptor_ptrs[i]->wMaxPacketSize;
+                       endpoint_instance[i + 1].rcv_packetSize =
+                               ep_descriptor_ptrs[i]->wMaxPacketSize;
+               }
+#endif
                usbtty_init_endpoints ();
 
        default: