diff options
Diffstat (limited to 'drivers/usb/cdns3/core.c')
| -rw-r--r-- | drivers/usb/cdns3/core.c | 20 | 
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index 06f1e105be4e..1109dc5a4c39 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -160,10 +160,28 @@ static int cdns3_core_init_role(struct cdns3 *cdns)  	if (ret)  		goto err; -	if (cdns->dr_mode != USB_DR_MODE_OTG) { +	/* Initialize idle role to start with */ +	ret = cdns3_role_start(cdns, USB_ROLE_NONE); +	if (ret) +		goto err; + +	switch (cdns->dr_mode) { +	case USB_DR_MODE_UNKNOWN: +	case USB_DR_MODE_OTG:  		ret = cdns3_hw_role_switch(cdns);  		if (ret)  			goto err; +		break; +	case USB_DR_MODE_PERIPHERAL: +		ret = cdns3_role_start(cdns, USB_ROLE_DEVICE); +		if (ret) +			goto err; +		break; +	case USB_DR_MODE_HOST: +		ret = cdns3_role_start(cdns, USB_ROLE_HOST); +		if (ret) +			goto err; +		break;  	}  	return ret;  | 
