diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt index ed0e9e8df3..4f361c5f70 100644 --- a/LUFA/DoxygenPages/ChangeLog.txt +++ b/LUFA/DoxygenPages/ChangeLog.txt @@ -15,7 +15,8 @@ * * Changed: * - Core: - * - None + * - Added workaround for broken VBUS detection on AVR8 devices when a bootloader starts the application + * via a software jump without first turning off the OTG pad (thanks to Simon Inns) * - Library Applications: * - None * diff --git a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c index 1f37dfd495..8285f7e92a 100644 --- a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c +++ b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c @@ -63,6 +63,13 @@ void USB_Init( USB_Options = Options; #endif + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + /* Workaround for AVR8 bootloaders that fail to turn off the OTG pad before running + * the loaded application. This causes VBUS detection to fail unless we first force + * it off to reset it. */ + USB_OTGPAD_Off(); + #endif + if (!(USB_Options & USB_OPT_REG_DISABLED)) USB_REG_On(); else