From 2a2de8fea94d2a524e988725585b17746cd30dba Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 7 May 2010 06:48:27 +0000
Subject: [PATCH] Fix TeensyHID bootloader for the largest AVRs - only the
 ATMEGA128x needs the alternative addressing scheme.

---
 Bootloaders/TeensyHID/Descriptors.h | 11 ++++++-----
 Bootloaders/TeensyHID/TeensyHID.c   |  6 +++---
 LUFA/ManPages/AlternativeStacks.txt |  4 ++--
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/Bootloaders/TeensyHID/Descriptors.h b/Bootloaders/TeensyHID/Descriptors.h
index f72dec251..8ef964d2a 100644
--- a/Bootloaders/TeensyHID/Descriptors.h
+++ b/Bootloaders/TeensyHID/Descriptors.h
@@ -96,15 +96,16 @@
 		/** Vendor usage page for the Teensy++ 2.0 board */
 		#define TEENSY_USAGEPAGE_20PP     0x1C
 		
-		#if defined(USB_SERIES_2_AVR)
+		#if (defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__))
 			#define TEENSY_USAGEPAGE      TEENSY_USAGEPAGE_10
-		#elif defined(USB_SERIES_4_AVR)
+		#elif defined(__AVR_ATmega32U4__)
 			#define TEENSY_USAGEPAGE      TEENSY_USAGEPAGE_20
-			#define TEENSY_USAGE          TEENSY_USAGE_20
-		#elif defined(USB_SERIES_6_AVR)
+		#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__))
 			#define TEENSY_USAGEPAGE      TEENSY_USAGEPAGE_10PP
-		#elif defined(USB_SERIES_7_AVR)
+		#elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))
 			#define TEENSY_USAGEPAGE      TEENSY_USAGEPAGE_20PP
+		#else
+			#error The selected AVR model is not currently supported by the TeensyHID bootloader.
 		#endif
 
 	/* Function Prototypes: */
diff --git a/Bootloaders/TeensyHID/TeensyHID.c b/Bootloaders/TeensyHID/TeensyHID.c
index ff28927b4..ffbaca8b3 100644
--- a/Bootloaders/TeensyHID/TeensyHID.c
+++ b/Bootloaders/TeensyHID/TeensyHID.c
@@ -115,10 +115,10 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 			}
 			else
 			{
-				#if (SPM_PAGESIZE == 128)
-				uint16_t PageByteAddress = PageIndex;
-				#else
+				#if (FLASHEND > 0xFFFF)
 				uint32_t PageByteAddress = ((uint32_t)PageIndex << 8);
+				#else
+				uint16_t PageByteAddress = PageIndex;
 				#endif
 			
 				/* Erase the given FLASH page, ready to be programmed */
diff --git a/LUFA/ManPages/AlternativeStacks.txt b/LUFA/ManPages/AlternativeStacks.txt
index 28176ce48..0ce9150f5 100644
--- a/LUFA/ManPages/AlternativeStacks.txt
+++ b/LUFA/ManPages/AlternativeStacks.txt
@@ -43,8 +43,8 @@
  *  via a bit-banged (emulated) version of the USB protocol. They are limited in their capabilities due to the cycles required
  *  to be dedicated to managing the USB bus, but offer a cheap way to implement USB functionality into a design.
  *
- *  - <b>Name:</b> AVR309: Software USB (<i>Objective Development</i>) \n
- *    <b>Cost:</b> Free for some uses, see website for licensing \n
+ *  - <b>Name:</b> AVR309: Software USB (<i>Atmel</i>) \n
+ *    <b>Cost:</b> Free \n
  *    <b>License:</b> None Stated \n
  *    <b>Website:</b> http://www.atmel.com/dyn/Products/app_notes.asp?family_id=607 \n
  *    <b>Description:</b> Atmel's official software USB implementation, an Application Note containing work by Igor Cesko. This
-- 
GitLab