aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LUFA/DoxygenPages/ChangeLog.txt3
-rw-r--r--LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c7
2 files changed, 9 insertions, 1 deletions
diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index ed0e9e8df..4f361c5f7 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -15,7 +15,8 @@
*
* <b>Changed:</b>
* - Core:
- * - <i>None</i>
+ * - 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:
* - <i>None</i>
*
diff --git a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
index 1f37dfd49..8285f7e92 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