@ -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 :