Exemple #1
0
static void xhci_hub_descriptor(struct xhci_hcd *xhci,
                                struct usb_hub_descriptor *desc)
{
    int ports;
    u16 temp;

    ports = HCS_MAX_PORTS(xhci->hcs_params1);

    /* USB 3.0 hubs have a different descriptor, but we fake this for now */
    desc->bDescriptorType = 0x29;
    desc->bPwrOn2PwrGood = 10;	/* xhci section 5.4.9 says 20ms max */
    desc->bHubContrCurrent = 0;

    desc->bNbrPorts = ports;
    temp = 1 + (ports / 8);
    desc->bDescLength = 7 + 2 * temp;

    /* Why does core/hcd.h define bitmap?  It's just confusing. */
    memset(&desc->DeviceRemovable[0], 0, temp);
    memset(&desc->DeviceRemovable[temp], 0xff, temp);

    /* Using table 11-13 in USB 2.0 spec. */
    temp = 0;
    /* Bits 1:0 - support port power switching, or power always on */
    if (HCC_PPC(xhci->hcc_params))
        temp |= 0x0001;
    else
        temp |= 0x0002;
    /* Bit  2 - root hubs are not part of a compound device */
    /* Bits 4:3 - individual port over current protection */
    temp |= 0x0008;
    /* Bits 6:5 - no TTs in root ports */
    /* Bit  7 - no port indicators */
    desc->wHubCharacteristics = (__force __u16) cpu_to_le16(temp);
}
Exemple #2
0
static void xhci_common_hub_descriptor(struct xhci_hcd *xhci,
		struct usb_hub_descriptor *desc, int ports)
{
	u16 temp;

	desc->bPwrOn2PwrGood = 10;	/* xhci section 5.4.9 says 20ms max */
	desc->bHubContrCurrent = 0;

	desc->bNbrPorts = ports;

	/* Ugh, these should be #defines, FIXME */
	/* Using table 11-13 in USB 2.0 spec. */
	temp = 0;
	/* Bits 1:0 - support port power switching, or power always on */
	if (HCC_PPC(xhci->hcc_params))
		temp |= 0x0001;
	else
		temp |= 0x0002;
	/* Bit  2 - root hubs are not part of a compound device */
	/* Bits 4:3 - individual port over current protection */
	temp |= 0x0008;
	/* Bits 6:5 - no TTs in root ports */
	/* Bit  7 - no port indicators */
	desc->wHubCharacteristics = cpu_to_le16(temp);
}
Exemple #3
0
static void xhci_common_hub_descriptor(struct xhci_hcd *xhci,
		struct usb_hub_descriptor *desc, int ports)
{
	u16 temp;

	desc->bPwrOn2PwrGood = 10;	/* xhci section 5.4.9 says 20ms max */
	desc->bHubContrCurrent = 0;

	desc->bNbrPorts = ports;
	temp = 0;
	/* Bits 1:0 - support per-port power switching, or power always on */
	if (HCC_PPC(xhci->hcc_params))
		temp |= HUB_CHAR_INDV_PORT_LPSM;
	else
		temp |= HUB_CHAR_NO_LPSM;
	/* Bit  2 - root hubs are not part of a compound device */
	/* Bits 4:3 - individual port over current protection */
	temp |= HUB_CHAR_INDV_PORT_OCPM;
	/* Bits 6:5 - no TTs in root ports */
	/* Bit  7 - no port indicators */
	desc->wHubCharacteristics = cpu_to_le16(temp);
}