Inherit USB mode from RootHUB port where the USB device is connected.
Only RootHUB ports can be dual mode. Disallow OTG ports on external HUBs. This simplifies some checks in the USB controller drivers. MFC after: 1 week
This commit is contained in:
parent
5bd9e48117
commit
0324d54acb
@ -2277,10 +2277,6 @@ at91dci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
|
||||
if (udev->device_index != sc->sc_rt_addr) {
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_DEVICE) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->speed != USB_SPEED_FULL) {
|
||||
/* not supported */
|
||||
return;
|
||||
|
@ -2112,10 +2112,6 @@ atmegadci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc
|
||||
|
||||
if (udev->device_index != sc->sc_rt_addr) {
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_DEVICE) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->speed != USB_SPEED_FULL) {
|
||||
/* not supported */
|
||||
return;
|
||||
|
@ -2056,10 +2056,6 @@ avr32dci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
|
||||
if (udev->device_index != sc->sc_rt_addr) {
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_DEVICE) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if ((udev->speed != USB_SPEED_FULL) &&
|
||||
(udev->speed != USB_SPEED_HIGH)) {
|
||||
/* not supported */
|
||||
|
@ -3701,10 +3701,6 @@ ehci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
edesc->bEndpointAddress, udev->flags.usb_mode,
|
||||
sc->sc_addr);
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_HOST) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->device_index != sc->sc_addr) {
|
||||
|
||||
if ((udev->speed != USB_SPEED_HIGH) &&
|
||||
|
@ -2748,10 +2748,6 @@ musbotg_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
|
||||
if (udev->device_index != sc->sc_rt_addr) {
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_DEVICE) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if ((udev->speed != USB_SPEED_FULL) &&
|
||||
(udev->speed != USB_SPEED_HIGH)) {
|
||||
/* not supported */
|
||||
|
@ -2315,6 +2315,7 @@ ohci_roothub_exec(struct usb_device *udev,
|
||||
}
|
||||
v = OREAD4(sc, OHCI_RH_PORT_STATUS(index));
|
||||
DPRINTFN(9, "port status=0x%04x\n", v);
|
||||
v &= ~UPS_PORT_MODE_DEVICE; /* force host mode */
|
||||
USETW(sc->sc_hub_desc.ps.wPortStatus, v);
|
||||
USETW(sc->sc_hub_desc.ps.wPortChange, v >> 16);
|
||||
len = sizeof(sc->sc_hub_desc.ps);
|
||||
@ -2551,10 +2552,6 @@ ohci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
edesc->bEndpointAddress, udev->flags.usb_mode,
|
||||
sc->sc_addr);
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_HOST) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->device_index != sc->sc_addr) {
|
||||
switch (edesc->bmAttributes & UE_XFERTYPE) {
|
||||
case UE_CONTROL:
|
||||
|
@ -3030,10 +3030,6 @@ uhci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
edesc->bEndpointAddress, udev->flags.usb_mode,
|
||||
sc->sc_addr);
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_HOST) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->device_index != sc->sc_addr) {
|
||||
switch (edesc->bmAttributes & UE_XFERTYPE) {
|
||||
case UE_CONTROL:
|
||||
|
@ -2333,10 +2333,6 @@ uss820dci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc
|
||||
|
||||
if (udev->device_index != sc->sc_rt_addr) {
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_DEVICE) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->speed != USB_SPEED_FULL) {
|
||||
/* not supported */
|
||||
return;
|
||||
|
@ -3712,10 +3712,6 @@ xhci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
DPRINTFN(2, "endpoint=%p, addr=%d, endpt=%d, mode=%d\n",
|
||||
ep, udev->address, edesc->bEndpointAddress, udev->flags.usb_mode);
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_HOST) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->parent_hub == NULL) {
|
||||
/* root HUB has special endpoint handling */
|
||||
return;
|
||||
|
@ -518,7 +518,10 @@ repeat:
|
||||
*
|
||||
* NOTE: This part is currently FreeBSD specific.
|
||||
*/
|
||||
if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE)
|
||||
if (udev->parent_hub != NULL) {
|
||||
/* inherit mode from the parent HUB */
|
||||
mode = udev->parent_hub->flags.usb_mode;
|
||||
} else if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE)
|
||||
mode = USB_MODE_DEVICE;
|
||||
else
|
||||
mode = USB_MODE_HOST;
|
||||
|
@ -1860,10 +1860,6 @@ octusb_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc,
|
||||
ep, udev->address, edesc->bEndpointAddress,
|
||||
udev->flags.usb_mode, sc->sc_addr);
|
||||
|
||||
if (udev->flags.usb_mode != USB_MODE_HOST) {
|
||||
/* not supported */
|
||||
return;
|
||||
}
|
||||
if (udev->device_index != sc->sc_addr) {
|
||||
switch (edesc->bmAttributes & UE_XFERTYPE) {
|
||||
case UE_CONTROL:
|
||||
|
Loading…
x
Reference in New Issue
Block a user