From d66a925786e4e57713a2c902cdffe7269db43226 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 19 Sep 2010 06:30:14 +0000 Subject: Make device mode configure the control endpoint even before the bus has been reset, so that the device will enumerate correctly on hosts that do not reset the device before initial use. --- LUFA/Drivers/USB/LowLevel/USBController.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'LUFA') diff --git a/LUFA/Drivers/USB/LowLevel/USBController.c b/LUFA/Drivers/USB/LowLevel/USBController.c index 49bd05b64..f7207778c 100644 --- a/LUFA/Drivers/USB/LowLevel/USBController.c +++ b/LUFA/Drivers/USB/LowLevel/USBController.c @@ -60,6 +60,11 @@ void USB_Init( USB_Options = Options; #endif + if (!(USB_Options & USB_OPT_REG_DISABLED)) + USB_REG_On(); + else + USB_REG_Off(); + #if defined(USB_CAN_BE_BOTH) if (Mode == USB_MODE_UID) { @@ -112,11 +117,6 @@ void USB_ResetInterface(void) USB_INT_ClearAllInterrupts(); USB_Controller_Reset(); - - if (!(USB_Options & USB_OPT_REG_DISABLED)) - USB_REG_On(); - else - USB_REG_Off(); if (!(USB_Options & USB_OPT_MANUAL_PLL)) { @@ -126,9 +126,7 @@ void USB_ResetInterface(void) USB_PLL_On(); while (!(USB_PLL_IsReady())); - } - - USB_CLK_Unfreeze(); + } #if defined(USB_CAN_BE_BOTH) if (UIDModeSelectEnabled) @@ -137,6 +135,8 @@ void USB_ResetInterface(void) USB_INT_Enable(USB_INT_IDTI); } #endif + + USB_CLK_Unfreeze(); if (USB_CurrentMode == USB_MODE_DEVICE) { @@ -159,8 +159,6 @@ void USB_ResetInterface(void) #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif - - USB_Attach(); } #if defined(USB_CAN_BE_DEVICE) @@ -201,10 +199,14 @@ static void USB_Init_Device(void) USB_INT_Enable(USB_INT_VBUS); #endif - USB_INT_Clear(USB_INT_SUSPEND); + Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL, + ENDPOINT_DIR_OUT, USB_ControlEndpointSize, + ENDPOINT_BANK_SINGLE); + USB_INT_Enable(USB_INT_SUSPEND); - USB_INT_Clear(USB_INT_EORSTI); USB_INT_Enable(USB_INT_EORSTI); + + USB_Attach(); } #endif -- cgit v1.2.3