|
@@ -302,6 +302,42 @@ static const char *dwc3_gadget_ep_cmd_string(u8 cmd)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static const char *dwc3_gadget_link_string(enum dwc3_link_state link_state)
|
|
|
+{
|
|
|
+ switch (link_state) {
|
|
|
+ case DWC3_LINK_STATE_U0:
|
|
|
+ return "U0";
|
|
|
+ case DWC3_LINK_STATE_U1:
|
|
|
+ return "U1";
|
|
|
+ case DWC3_LINK_STATE_U2:
|
|
|
+ return "U2";
|
|
|
+ case DWC3_LINK_STATE_U3:
|
|
|
+ return "U3";
|
|
|
+ case DWC3_LINK_STATE_SS_DIS:
|
|
|
+ return "SS.Disabled";
|
|
|
+ case DWC3_LINK_STATE_RX_DET:
|
|
|
+ return "RX.Detect";
|
|
|
+ case DWC3_LINK_STATE_SS_INACT:
|
|
|
+ return "SS.Inactive";
|
|
|
+ case DWC3_LINK_STATE_POLL:
|
|
|
+ return "Polling";
|
|
|
+ case DWC3_LINK_STATE_RECOV:
|
|
|
+ return "Recovery";
|
|
|
+ case DWC3_LINK_STATE_HRESET:
|
|
|
+ return "Hot Reset";
|
|
|
+ case DWC3_LINK_STATE_CMPLY:
|
|
|
+ return "Compliance";
|
|
|
+ case DWC3_LINK_STATE_LPBK:
|
|
|
+ return "Loopback";
|
|
|
+ case DWC3_LINK_STATE_RESET:
|
|
|
+ return "Reset";
|
|
|
+ case DWC3_LINK_STATE_RESUME:
|
|
|
+ return "Resume";
|
|
|
+ default:
|
|
|
+ return "UNKNOWN link state\n";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param)
|
|
|
{
|
|
|
u32 timeout = 500;
|
|
@@ -2449,8 +2485,6 @@ static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- dwc->link_state = next;
|
|
|
-
|
|
|
switch (next) {
|
|
|
case DWC3_LINK_STATE_U1:
|
|
|
if (dwc->speed == USB_SPEED_SUPER)
|
|
@@ -2468,7 +2502,11 @@ static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- dev_vdbg(dwc->dev, "%s link %d\n", __func__, dwc->link_state);
|
|
|
+ dev_vdbg(dwc->dev, "link change: %s [%d] -> %s [%d]\n",
|
|
|
+ dwc3_gadget_link_string(dwc->link_state),
|
|
|
+ dwc->link_state, dwc3_gadget_link_string(next), next);
|
|
|
+
|
|
|
+ dwc->link_state = next;
|
|
|
}
|
|
|
|
|
|
static void dwc3_gadget_hibernation_interrupt(struct dwc3 *dwc,
|