Fixed possible register corruption in USB Host mode on AVR8 devices when ORDERED_EP_C...
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 21 Apr 2013 19:06:34 +0000 (19:06 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 21 Apr 2013 19:06:34 +0000 (19:06 +0000)
LUFA/DoxygenPages/ChangeLog.txt
LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c

index fb05dd6..744e360 100644 (file)
@@ -21,6 +21,7 @@
   *  <b>Fixed:</b>
   *  - Core:
   *   - Fixed Low Speed USB devices broken when using the library HID Class driver (thanks to Michael)
   *  <b>Fixed:</b>
   *  - Core:
   *   - Fixed Low Speed USB devices broken when using the library HID Class driver (thanks to Michael)
+  *   - Fixed possible register corruption in USB Host mode on AVR8 devices when ORDERED_EP_CONFIG is used (thanks to Martin Aakerberg)
   *  - Library Applications:
   *   - Added handler for SCSI_CMD_START_STOP_UNIT in demos using the Mass Storage class, to prevent ejection errors on *nix systems due to an
   *     unknown SCSI command
   *  - Library Applications:
   *   - Added handler for SCSI_CMD_START_STOP_UNIT in demos using the Mass Storage class, to prevent ejection errors on *nix systems due to an
   *     unknown SCSI command
index 45b4bdd..bd285db 100644 (file)
@@ -47,13 +47,13 @@ bool Pipe_ConfigurePipeTable(const USB_Pipe_Table_t* const Table,
        {
                if (!(Table[i].Address))
                  continue;
        {
                if (!(Table[i].Address))
                  continue;
-       
+
                if (!(Pipe_ConfigurePipe(Table[i].Address, Table[i].Type, Table[i].EndpointAddress, Table[i].Size, Table[i].Banks)))
                {
                        return false;
                }
        }
                if (!(Pipe_ConfigurePipe(Table[i].Address, Table[i].Type, Table[i].EndpointAddress, Table[i].Size, Table[i].Banks)))
                {
                        return false;
                }
        }
-       
+
        return true;
 }
 
        return true;
 }
 
@@ -65,7 +65,7 @@ bool Pipe_ConfigurePipe(const uint8_t Address,
 {
        uint8_t Number = (Address & PIPE_EPNUM_MASK);
        uint8_t Token  = (Address & PIPE_DIR_IN) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT;
 {
        uint8_t Number = (Address & PIPE_EPNUM_MASK);
        uint8_t Token  = (Address & PIPE_DIR_IN) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT;
-       
+
        if (Number >= PIPE_TOTAL_PIPES)
          return false;
 
        if (Number >= PIPE_TOTAL_PIPES)
          return false;
 
@@ -97,7 +97,7 @@ bool Pipe_ConfigurePipe(const uint8_t Address,
                if (PNum == Number)
                {
                        UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointAddress & PIPE_EPNUM_MASK) << PEPNUM0));
                if (PNum == Number)
                {
                        UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointAddress & PIPE_EPNUM_MASK) << PEPNUM0));
-                       UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+                       UPCFG1XTemp = ((1 << ALLOC) | ((Banks > 1) ? (1 << EPBK0) : 0) | Pipe_BytesToEPSizeMask(Size));
                        UPCFG2XTemp = 0;
                        UPIENXTemp  = 0;
                }
                        UPCFG2XTemp = 0;
                        UPIENXTemp  = 0;
                }