| From e17b02d4970913233d543c79c9c66e72cac05bdd Mon Sep 17 00:00:00 2001 |
| From: Marcel Hamer <marcel@solidxs.se> |
| Date: Tue, 27 Apr 2021 14:21:18 +0200 |
| Subject: usb: dwc3: omap: improve extcon initialization |
| |
| From: Marcel Hamer <marcel@solidxs.se> |
| |
| commit e17b02d4970913233d543c79c9c66e72cac05bdd upstream. |
| |
| When extcon is used in combination with dwc3, it is assumed that the dwc3 |
| registers are untouched and as such are only configured if VBUS is valid |
| or ID is tied to ground. |
| |
| In case VBUS is not valid or ID is floating, the registers are not |
| configured as such during driver initialization, causing a wrong |
| default state during boot. |
| |
| If the registers are not in a default state, because they are for |
| instance touched by a boot loader, this can cause for a kernel error. |
| |
| Signed-off-by: Marcel Hamer <marcel@solidxs.se> |
| Link: https://lore.kernel.org/r/20210427122118.1948340-1-marcel@solidxs.se |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/dwc3/dwc3-omap.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/usb/dwc3/dwc3-omap.c |
| +++ b/drivers/usb/dwc3/dwc3-omap.c |
| @@ -437,8 +437,13 @@ static int dwc3_omap_extcon_register(str |
| |
| if (extcon_get_state(edev, EXTCON_USB) == true) |
| dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID); |
| + else |
| + dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_OFF); |
| + |
| if (extcon_get_state(edev, EXTCON_USB_HOST) == true) |
| dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND); |
| + else |
| + dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_FLOAT); |
| |
| omap->edev = edev; |
| } |