summaryrefslogtreecommitdiff
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorAjay Agarwal <ajaya@codeaurora.org>2017-05-30 10:22:04 +0530
committerAjay Agarwal <ajaya@codeaurora.org>2017-05-30 15:55:01 +0530
commit2f211b5dc9fa03287af3f623b4a823ec7944a14a (patch)
tree019a3eee3098622983e1fd93e46bc872fcf3fe78 /drivers/usb/dwc3
parentace73576d2eb567f552a699109b32d0917fccdbd (diff)
usb: dwc3: Allow DWC3 to handle non-extcon controller instance
Extcon is required by the USB controller to switch between host and peripheral modes using BSV and ID events. If the DT node of a particular controller does not have 'extcon' property set but the mode is set to host only using dr_mode = "host", then we do not fail the probe and bring up the controller in host mode. Add another case to the probe that when extcon prop is not set and the controller mode is set to DRD, then bring up the device in host mode. User can always change the mode using sysfs. Change-Id: Iad44748b99a944fab93ff86a34787bd93dcb4ed6 Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/dwc3-msm.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index 4ed46d9ca279..c2d788bc4bc5 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -2671,12 +2671,16 @@ static int dwc3_msm_extcon_register(struct dwc3_msm *mdwc)
{
struct device_node *node = mdwc->dev->of_node;
struct extcon_dev *edev;
+ struct dwc3 *dwc;
int ret = 0;
+ dwc = platform_get_drvdata(mdwc->dwc3);
if (!of_property_read_bool(node, "extcon")) {
- if (usb_get_dr_mode(&mdwc->dwc3->dev) == USB_DR_MODE_HOST)
+ dev_dbg(mdwc->dev, "extcon property doesn't exist\n");
+ if (usb_get_dr_mode(&mdwc->dwc3->dev) == USB_DR_MODE_HOST
+ || dwc->is_drd)
return 0;
- dev_err(mdwc->dev, "extcon property doesn't exist\n");
+ dev_err(mdwc->dev, "Neither host nor DRD, fail probe\n");
return -EINVAL;
}
@@ -3137,8 +3141,9 @@ static int dwc3_msm_probe(struct platform_device *pdev)
device_create_file(&pdev->dev, &dev_attr_speed);
host_mode = usb_get_dr_mode(&mdwc->dwc3->dev) == USB_DR_MODE_HOST;
- if (!dwc->is_drd && host_mode) {
- dev_dbg(&pdev->dev, "DWC3 in host only mode\n");
+ if (host_mode ||
+ (dwc->is_drd && !of_property_read_bool(node, "extcon"))) {
+ dev_dbg(&pdev->dev, "DWC3 in default host mode\n");
mdwc->id_state = DWC3_ID_GROUND;
dwc3_ext_event_notify(mdwc);
}