From ffbb30e0f86a774e6bfd866db36254fc7c8926d8 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 12 Aug 2012 13:46:24 +0000 Subject: [PATCH] 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) --- LUFA/DoxygenPages/ChangeLog.txt | 3 ++- LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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