mirror of https://gitee.com/openkylin/linux.git
usb: phy: msm: Trigger USB state detection work in DRD mode
When working in Dual Role Device mode, USB state machine is not kicked, when host or gadget drivers are loaded. Fix this be explicitly triggering state detection on client driver load. Issue is that if the board is booted without micro usb cable and usb device attached, kernel fails to populate the usb host and device. The reason for this is that the state machine worker logic only checks for USB_DR_MODE_PERIPHERAL and USB_DR_MODE_HOST modes to run worker thread. However if the phy is configured in OTG mode it would fail to run the state machine, resulting in failure to detect for very first time. This patch fixes the issue by removing the explicit checks. Issue is noticed on Qualcomm Dragon board DB410C. [srinivas.kandagatla@linaro.org: Added more details to log] Signed-off-by: Ivan T. Ivanov <ivan.ivanov@linaro.org> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
ca1c118942
commit
8de4b3a3fc
|
@ -757,14 +757,8 @@ static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
|
|||
otg->host = host;
|
||||
dev_dbg(otg->usb_phy->dev, "host driver registered w/ tranceiver\n");
|
||||
|
||||
/*
|
||||
* Kick the state machine work, if peripheral is not supported
|
||||
* or peripheral is already registered with us.
|
||||
*/
|
||||
if (motg->pdata->mode == USB_DR_MODE_HOST || otg->gadget) {
|
||||
pm_runtime_get_sync(otg->usb_phy->dev);
|
||||
schedule_work(&motg->sm_work);
|
||||
}
|
||||
pm_runtime_get_sync(otg->usb_phy->dev);
|
||||
schedule_work(&motg->sm_work);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -827,14 +821,8 @@ static int msm_otg_set_peripheral(struct usb_otg *otg,
|
|||
dev_dbg(otg->usb_phy->dev,
|
||||
"peripheral driver registered w/ tranceiver\n");
|
||||
|
||||
/*
|
||||
* Kick the state machine work, if host is not supported
|
||||
* or host is already registered with us.
|
||||
*/
|
||||
if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL || otg->host) {
|
||||
pm_runtime_get_sync(otg->usb_phy->dev);
|
||||
schedule_work(&motg->sm_work);
|
||||
}
|
||||
pm_runtime_get_sync(otg->usb_phy->dev);
|
||||
schedule_work(&motg->sm_work);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue