diff --git a/drivers/usb/pd/policy_engine.c b/drivers/usb/pd/policy_engine.c index b354b651398c..7d893c5815e2 100644 --- a/drivers/usb/pd/policy_engine.c +++ b/drivers/usb/pd/policy_engine.c @@ -1539,6 +1539,11 @@ static void usbpd_sm(struct work_struct *w) if (pd->current_state == PE_UNKNOWN) goto sm_done; + if (pd->vconn_enabled) { + regulator_disable(pd->vconn); + pd->vconn_enabled = false; + } + usbpd_info(&pd->dev, "USB Type-C disconnect\n"); if (pd->pd_phy_opened) { @@ -1574,11 +1579,6 @@ static void usbpd_sm(struct work_struct *w) pd->vbus_enabled = false; } - if (pd->vconn_enabled) { - regulator_disable(pd->vconn); - pd->vconn_enabled = false; - } - if (pd->current_dr == DR_UFP) stop_usb_peripheral(pd); else if (pd->current_dr == DR_DFP) @@ -3187,7 +3187,7 @@ struct usbpd *usbpd_create(struct device *parent) if (ret) goto free_pd; - pd->wq = alloc_ordered_workqueue("usbpd_wq", WQ_FREEZABLE); + pd->wq = alloc_ordered_workqueue("usbpd_wq", WQ_FREEZABLE | WQ_HIGHPRI); if (!pd->wq) { ret = -ENOMEM; goto del_pd;