@@ -97,7 +97,8 @@ static void imx8mp_configure_glue(struct dwc3_imx8mp *dwc3_imx)
97
97
writel (value , dwc3_imx -> glue_base + USB_CTRL1 );
98
98
}
99
99
100
- static void dwc3_imx8mp_wakeup_enable (struct dwc3_imx8mp * dwc3_imx )
100
+ static void dwc3_imx8mp_wakeup_enable (struct dwc3_imx8mp * dwc3_imx ,
101
+ pm_message_t msg )
101
102
{
102
103
struct dwc3 * dwc3 = platform_get_drvdata (dwc3_imx -> dwc3 );
103
104
u32 val ;
@@ -107,12 +108,14 @@ static void dwc3_imx8mp_wakeup_enable(struct dwc3_imx8mp *dwc3_imx)
107
108
108
109
val = readl (dwc3_imx -> hsio_blk_base + USB_WAKEUP_CTRL );
109
110
110
- if ((dwc3 -> current_dr_role == DWC3_GCTL_PRTCAP_HOST ) && dwc3 -> xhci )
111
- val |= USB_WAKEUP_EN | USB_WAKEUP_SS_CONN |
112
- USB_WAKEUP_U3_EN | USB_WAKEUP_DPDM_EN ;
113
- else if (dwc3 -> current_dr_role == DWC3_GCTL_PRTCAP_DEVICE )
111
+ if ((dwc3 -> current_dr_role == DWC3_GCTL_PRTCAP_HOST ) && dwc3 -> xhci ) {
112
+ val |= USB_WAKEUP_EN | USB_WAKEUP_DPDM_EN ;
113
+ if (PMSG_IS_AUTO (msg ))
114
+ val |= USB_WAKEUP_SS_CONN | USB_WAKEUP_U3_EN ;
115
+ } else {
114
116
val |= USB_WAKEUP_EN | USB_WAKEUP_VBUS_EN |
115
117
USB_WAKEUP_VBUS_SRC_SESS_VAL ;
118
+ }
116
119
117
120
writel (val , dwc3_imx -> hsio_blk_base + USB_WAKEUP_CTRL );
118
121
}
@@ -277,7 +280,7 @@ static int dwc3_imx8mp_suspend(struct dwc3_imx8mp *dwc3_imx, pm_message_t msg)
277
280
278
281
/* Wakeup enable */
279
282
if (PMSG_IS_AUTO (msg ) || device_may_wakeup (dwc3_imx -> dev ))
280
- dwc3_imx8mp_wakeup_enable (dwc3_imx );
283
+ dwc3_imx8mp_wakeup_enable (dwc3_imx , msg );
281
284
282
285
dwc3_imx -> pm_suspended = true;
283
286
0 commit comments