xhci: refactor U0 link state handling in get_port_status
Subsystems (2)
PATCH 7/8 xhci: refactor U0 link state handling in get_port_status
Move U0 link state handing to USB3 and USB2 specific functions
Note thatbus_state->resuming_ports:
bus_state->resume_done[]:
are only used for USB2, and don't need to cleared for USB3 ports
No functional changes
Signed-off-by Mathias Nyman <[email protected]>
--- drivers/usb/host/xhci-hub.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-)
drivers/usb/host/xhci-hub.c +19 -13
@@ -814,10 +814,12 @@ static u32 xhci_get_ext_port_status(u32 raw_port_status, u32 port_li)static void xhci_get_usb3_port_status (struct xhci_port *port,u32 *status,u32 portsc) { +struct xhci_bus_state *bus_state;struct xhci_hcd *xhci;u32 link_state;u32 portnum; + bus_state = &port->rhub->bus_state; xhci =hcd_to_xhci (port->rhub->hcd); link_state = portsc &PORT_PLS_MASK ; portnum = port->hcd_portnum;
@@ -839,8 +841,12 @@ static void xhci_get_usb3_port_status(struct xhci_port *port, u32 *status, *status |=USB_PORT_STAT_C_CONFIG_ERROR <<16 ;/* USB3 specific wPortStatus bits */ -if (portsc &PORT_POWER ) +if (portsc &PORT_POWER ) { *status |=USB_SS_PORT_STAT_POWER ; +/* link state handling */ +if (link_state ==XDEV_U0 ) + bus_state->suspended_ports &= ~(1 << portnum); + }xhci_hub_report_usb3_link_state (xhci, status, portsc);xhci_del_comp_mod_timer (xhci, portsc, portnum);
@@ -849,9 +855,13 @@ static void xhci_get_usb3_port_status(struct xhci_port *port, u32 *status,static void xhci_get_usb2_port_status (struct xhci_port *port,u32 *status,u32 portsc) { +struct xhci_bus_state *bus_state;u32 link_state; +u32 portnum; + bus_state = &port->rhub->bus_state; link_state = portsc &PORT_PLS_MASK ; + portnum = port->hcd_portnum;/* USB2 wPortStatus bits */ if (portsc &PORT_POWER ) {
@@ -862,6 +872,14 @@ static void xhci_get_usb2_port_status(struct xhci_port *port, u32 *status, *status |=USB_PORT_STAT_SUSPEND ;if (link_state ==XDEV_U2 ) *status |=USB_PORT_STAT_L1 ; +if (link_state ==XDEV_U0 ) { + bus_state->resume_done[portnum] =0 ; +clear_bit (portnum, &bus_state->resuming_ports); +if (bus_state->suspended_ports & (1 << portnum)) { + bus_state->suspended_ports &= ~(1 << portnum); + bus_state->port_c_suspend |=1 << portnum; + } + } } }
@@ -1011,18 +1029,6 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,usb_hcd_end_port_resume (&hcd->self, wIndex); } - -if ((raw_port_status &PORT_PLS_MASK ) ==XDEV_U0 && - (raw_port_status &PORT_POWER )) { -if (bus_state->suspended_ports & (1 << wIndex)) { - bus_state->suspended_ports &= ~(1 << wIndex); -if (hcd->speed <HCD_USB3 ) - bus_state->port_c_suspend |=1 << wIndex; - } - bus_state->resume_done[wIndex] =0 ; -clear_bit (wIndex, &bus_state->resuming_ports); - } -if (bus_state->port_c_suspend & (1 << wIndex)) status |=USB_PORT_STAT_C_SUSPEND <<16 ;