.bNumConfigurations     = 1,
 };
 
+static const struct usb_qualifier_descriptor ast_vhub_qual_desc = {
+       .bLength = 0xA,
+       .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
+       .bcdUSB = cpu_to_le16(0x0200),
+       .bDeviceClass = USB_CLASS_HUB,
+       .bDeviceSubClass = 0,
+       .bDeviceProtocol = 0,
+       .bMaxPacketSize0 = 64,
+       .bNumConfigurations = 1,
+       .bRESERVED = 0,
+};
+
 /*
  * Configuration descriptor: same comments as above
  * regarding handling USB1 mode.
                BUILD_BUG_ON(dsize > sizeof(vhub->vhub_dev_desc));
                BUILD_BUG_ON(USB_DT_DEVICE_SIZE >= AST_VHUB_EP0_MAX_PACKET);
                break;
+       case USB_DT_OTHER_SPEED_CONFIG:
        case USB_DT_CONFIG:
                dsize = AST_VHUB_CONF_DESC_SIZE;
                memcpy(ep->buf, &vhub->vhub_conf_desc, dsize);
+               ((u8 *)ep->buf)[1] = desc_type;
                BUILD_BUG_ON(dsize > sizeof(vhub->vhub_conf_desc));
                BUILD_BUG_ON(AST_VHUB_CONF_DESC_SIZE >= AST_VHUB_EP0_MAX_PACKET);
                break;
                BUILD_BUG_ON(dsize > sizeof(vhub->vhub_hub_desc));
                BUILD_BUG_ON(AST_VHUB_HUB_DESC_SIZE >= AST_VHUB_EP0_MAX_PACKET);
                break;
+       case USB_DT_DEVICE_QUALIFIER:
+               dsize = sizeof(vhub->vhub_qual_desc);
+               memcpy(ep->buf, &vhub->vhub_qual_desc, dsize);
+               break;
        default:
                return std_req_stall;
        }
                switch (wValue >> 8) {
                case USB_DT_DEVICE:
                case USB_DT_CONFIG:
+               case USB_DT_DEVICE_QUALIFIER:
+               case USB_DT_OTHER_SPEED_CONFIG:
                        return ast_vhub_rep_desc(ep, wValue >> 8,
                                                 wLength);
                case USB_DT_STRING:
        else
                ret = ast_vhub_str_alloc_add(vhub, &ast_vhub_strings);
 
+       /* Initialize vhub Qualifier Descriptor. */
+       memcpy(&vhub->vhub_qual_desc, &ast_vhub_qual_desc,
+               sizeof(vhub->vhub_qual_desc));
+
        return ret;
 }