From fdb82cd1e87b6521cea0c297107e9f03c7d50fa4 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 12 Jul 2011 07:22:36 +0000 Subject: Fixed error in the pipe unordered allocation algorithm for the AVR8 devices breaking compatibility with some devices. --- LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c | 2 +- LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c | 14 +++----------- 2 files changed, 4 insertions(+), 12 deletions(-) (limited to 'LUFA/Drivers/USB') diff --git a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c index 6d4df036b..9f7cec15e 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c +++ b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c @@ -78,7 +78,7 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, continue; Endpoint_DisableEndpoint(); - UECFG1X &= (1 << ALLOC); + UECFG1X &= ~(1 << ALLOC); Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; diff --git a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c index 5d7c8ac1b..9484abed3 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c +++ b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c @@ -62,8 +62,6 @@ bool Pipe_ConfigurePipe(const uint8_t Number, uint8_t UPCFG0XTemp; uint8_t UPCFG1XTemp; uint8_t UPCFG2XTemp; - uint8_t UPCONXTemp; - uint8_t UPINRQXTemp; uint8_t UPIENXTemp; Pipe_SelectPipe(PNum); @@ -73,8 +71,6 @@ bool Pipe_ConfigurePipe(const uint8_t Number, UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0)); UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size)); UPCFG2XTemp = 0; - UPCONXTemp = ((1 << PEN) | (1 << INMODE)); - UPINRQXTemp = 0; UPIENXTemp = 0; } else @@ -82,27 +78,23 @@ bool Pipe_ConfigurePipe(const uint8_t Number, UPCFG0XTemp = UPCFG0X; UPCFG1XTemp = UPCFG1X; UPCFG2XTemp = UPCFG2X; - UPCONXTemp = UPCONX; - UPINRQXTemp = UPINRQX; UPIENXTemp = UPIENX; } - Pipe_SetInfiniteINRequests(); - if (!(UPCFG1XTemp & (1 << ALLOC))) continue; Pipe_DisablePipe(); - UPCFG1X &= (1 << ALLOC); + UPCFG1X &= ~(1 << ALLOC); Pipe_EnablePipe(); UPCFG0X = UPCFG0XTemp; UPCFG1X = UPCFG1XTemp; UPCFG2X = UPCFG2XTemp; - UPCONX = UPCONXTemp; - UPINRQX = UPINRQXTemp; UPIENX = UPIENXTemp; + Pipe_SetInfiniteINRequests(); + if (!(Pipe_IsConfigured())) return false; } -- cgit v1.2.3