]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
usb: dwc3: omap: improve extcon initialization
authorMarcel Hamer <marcel@solidxs.se>
Tue, 27 Apr 2021 12:21:18 +0000 (14:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 May 2021 08:08:30 +0000 (10:08 +0200)
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

index 8c3de2d258bf7d780edf70737a967b7a281f5317..e8acad49a53a882fe809fbf3faf1cd221baf180c 100644 (file)
@@ -437,8 +437,13 @@ static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
 
                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;
        }