Loading drivers/usb/dwc3/dwc3-msm.c +17 −7 Original line number Diff line number Diff line Loading @@ -201,6 +201,7 @@ struct dwc3_msm { struct delayed_work resume_work; struct work_struct restart_usb_work; bool in_restart; struct workqueue_struct *dwc3_wq; struct delayed_work sm_work; unsigned long inputs; struct completion dwc3_xcvr_vbus_init; Loading Loading @@ -1706,7 +1707,8 @@ static void dwc3_msm_notify_event(struct dwc3 *dwc, unsigned event) dev_dbg(mdwc->dev, "DWC3_CONTROLLER_NOTIFY_OTG_EVENT received\n"); if (dwc->enable_bus_suspend) { mdwc->suspend = dwc->b_suspend; schedule_delayed_work(&mdwc->resume_work, 0); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); } break; case DWC3_CONTROLLER_SET_CURRENT_DRAW_EVENT: Loading Loading @@ -2328,9 +2330,10 @@ static int dwc3_msm_power_set_property_usb(struct power_supply *psy, case POWER_SUPPLY_PROP_USB_OTG: /* Let OTG know about ID detection */ mdwc->id_state = val->intval ? DWC3_ID_GROUND : DWC3_ID_FLOAT; dbg_event(0xFF, "id_state", mdwc->id_state); if (dwc->is_drd) schedule_delayed_work(&mdwc->resume_work, 12); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); break; /* PMIC notification for DP_DM state */ case POWER_SUPPLY_PROP_DP_DM: Loading Loading @@ -2367,7 +2370,8 @@ static int dwc3_msm_power_set_property_usb(struct power_supply *psy, * charging CDP complaince test fails if delay > 120ms. */ dbg_event(0xFF, "Q RW (vbus)", val->intval); schedule_delayed_work(&mdwc->resume_work, 12); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 12); } break; case POWER_SUPPLY_PROP_ONLINE: Loading Loading @@ -2616,6 +2620,12 @@ static int dwc3_msm_probe(struct platform_device *pdev) init_completion(&mdwc->dwc3_xcvr_vbus_init); INIT_DELAYED_WORK(&mdwc->sm_work, dwc3_otg_sm_work); mdwc->dwc3_wq = alloc_ordered_workqueue("dwc3_wq", 0); if (!mdwc->dwc3_wq) { pr_err("%s: Unable to create workqueue dwc3_wq\n", __func__); return -ENOMEM; } /* Get all clks and gdsc reference */ ret = dwc3_msm_get_clk_gdsc(mdwc); if (ret) { Loading Loading @@ -3627,7 +3637,7 @@ static int dwc3_msm_pm_suspend(struct device *dev) dev_dbg(dev, "dwc3-msm PM suspend\n"); dbg_event(0xFF, "PM Sus", 0); flush_delayed_work(&mdwc->resume_work); flush_workqueue(mdwc->dwc3_wq); if (!atomic_read(&dwc->in_lpm)) { dev_err(mdwc->dev, "Abort PM suspend!! (USB is outside LPM)\n"); return -EBUSY; Loading @@ -3649,11 +3659,11 @@ static int dwc3_msm_pm_resume(struct device *dev) dbg_event(0xFF, "PM Res", 0); /* flush to avoid race in read/write of pm_suspended */ flush_delayed_work(&mdwc->resume_work); flush_workqueue(mdwc->dwc3_wq); atomic_set(&mdwc->pm_suspended, 0); /* kick in otg state machine */ schedule_delayed_work(&mdwc->resume_work, 0); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); return 0; } Loading Loading
drivers/usb/dwc3/dwc3-msm.c +17 −7 Original line number Diff line number Diff line Loading @@ -201,6 +201,7 @@ struct dwc3_msm { struct delayed_work resume_work; struct work_struct restart_usb_work; bool in_restart; struct workqueue_struct *dwc3_wq; struct delayed_work sm_work; unsigned long inputs; struct completion dwc3_xcvr_vbus_init; Loading Loading @@ -1706,7 +1707,8 @@ static void dwc3_msm_notify_event(struct dwc3 *dwc, unsigned event) dev_dbg(mdwc->dev, "DWC3_CONTROLLER_NOTIFY_OTG_EVENT received\n"); if (dwc->enable_bus_suspend) { mdwc->suspend = dwc->b_suspend; schedule_delayed_work(&mdwc->resume_work, 0); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); } break; case DWC3_CONTROLLER_SET_CURRENT_DRAW_EVENT: Loading Loading @@ -2328,9 +2330,10 @@ static int dwc3_msm_power_set_property_usb(struct power_supply *psy, case POWER_SUPPLY_PROP_USB_OTG: /* Let OTG know about ID detection */ mdwc->id_state = val->intval ? DWC3_ID_GROUND : DWC3_ID_FLOAT; dbg_event(0xFF, "id_state", mdwc->id_state); if (dwc->is_drd) schedule_delayed_work(&mdwc->resume_work, 12); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); break; /* PMIC notification for DP_DM state */ case POWER_SUPPLY_PROP_DP_DM: Loading Loading @@ -2367,7 +2370,8 @@ static int dwc3_msm_power_set_property_usb(struct power_supply *psy, * charging CDP complaince test fails if delay > 120ms. */ dbg_event(0xFF, "Q RW (vbus)", val->intval); schedule_delayed_work(&mdwc->resume_work, 12); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 12); } break; case POWER_SUPPLY_PROP_ONLINE: Loading Loading @@ -2616,6 +2620,12 @@ static int dwc3_msm_probe(struct platform_device *pdev) init_completion(&mdwc->dwc3_xcvr_vbus_init); INIT_DELAYED_WORK(&mdwc->sm_work, dwc3_otg_sm_work); mdwc->dwc3_wq = alloc_ordered_workqueue("dwc3_wq", 0); if (!mdwc->dwc3_wq) { pr_err("%s: Unable to create workqueue dwc3_wq\n", __func__); return -ENOMEM; } /* Get all clks and gdsc reference */ ret = dwc3_msm_get_clk_gdsc(mdwc); if (ret) { Loading Loading @@ -3627,7 +3637,7 @@ static int dwc3_msm_pm_suspend(struct device *dev) dev_dbg(dev, "dwc3-msm PM suspend\n"); dbg_event(0xFF, "PM Sus", 0); flush_delayed_work(&mdwc->resume_work); flush_workqueue(mdwc->dwc3_wq); if (!atomic_read(&dwc->in_lpm)) { dev_err(mdwc->dev, "Abort PM suspend!! (USB is outside LPM)\n"); return -EBUSY; Loading @@ -3649,11 +3659,11 @@ static int dwc3_msm_pm_resume(struct device *dev) dbg_event(0xFF, "PM Res", 0); /* flush to avoid race in read/write of pm_suspended */ flush_delayed_work(&mdwc->resume_work); flush_workqueue(mdwc->dwc3_wq); atomic_set(&mdwc->pm_suspended, 0); /* kick in otg state machine */ schedule_delayed_work(&mdwc->resume_work, 0); queue_delayed_work(mdwc->dwc3_wq, &mdwc->resume_work, 0); return 0; } Loading