aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootloader.mk6
-rw-r--r--common_features.mk2
-rw-r--r--data/schemas/keyboard.jsonschema2
-rw-r--r--docs/compatible_microcontrollers.md1
-rw-r--r--docs/feature_backlight.md24
-rw-r--r--docs/ja/compatible_microcontrollers.md1
-rw-r--r--docs/spi_driver.md12
-rw-r--r--drivers/avr/serial.c6
-rw-r--r--drivers/avr/spi_master.c2
-rw-r--r--drivers/avr/spi_master.h2
-rw-r--r--drivers/avr/uart.c2
-rw-r--r--lib/python/qmk/constants.py2
-rw-r--r--lib/python/qmk/os_helpers/linux/__init__.py1
-rw-r--r--quantum/backlight/backlight_avr.c2
-rw-r--r--quantum/config_common.h2
-rw-r--r--quantum/dynamic_keymap.c2
-rw-r--r--quantum/mcu_selection.mk4
-rw-r--r--util/drivers.txt1
-rw-r--r--util/udev/50-qmk.rules2
19 files changed, 42 insertions, 34 deletions
diff --git a/bootloader.mk b/bootloader.mk
index 8b4bc7a0f..fd76446e9 100644
--- a/bootloader.mk
+++ b/bootloader.mk
@@ -40,7 +40,7 @@
40ifeq ($(strip $(BOOTLOADER)), atmel-dfu) 40ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
41 OPT_DEFS += -DBOOTLOADER_ATMEL_DFU 41 OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
42 OPT_DEFS += -DBOOTLOADER_DFU 42 OPT_DEFS += -DBOOTLOADER_DFU
43 ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) 43 ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
44 BOOTLOADER_SIZE = 4096 44 BOOTLOADER_SIZE = 4096
45 endif 45 endif
46 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) 46 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
@@ -50,7 +50,7 @@ endif
50ifeq ($(strip $(BOOTLOADER)), lufa-dfu) 50ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
51 OPT_DEFS += -DBOOTLOADER_LUFA_DFU 51 OPT_DEFS += -DBOOTLOADER_LUFA_DFU
52 OPT_DEFS += -DBOOTLOADER_DFU 52 OPT_DEFS += -DBOOTLOADER_DFU
53 ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) 53 ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
54 BOOTLOADER_SIZE = 4096 54 BOOTLOADER_SIZE = 4096
55 endif 55 endif
56 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) 56 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
@@ -60,7 +60,7 @@ endif
60ifeq ($(strip $(BOOTLOADER)), qmk-dfu) 60ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
61 OPT_DEFS += -DBOOTLOADER_QMK_DFU 61 OPT_DEFS += -DBOOTLOADER_QMK_DFU
62 OPT_DEFS += -DBOOTLOADER_DFU 62 OPT_DEFS += -DBOOTLOADER_DFU
63 ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) 63 ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
64 BOOTLOADER_SIZE = 4096 64 BOOTLOADER_SIZE = 4096
65 endif 65 endif
66 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) 66 ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
diff --git a/common_features.mk b/common_features.mk
index fa92a8482..6ed7e73b6 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -222,7 +222,7 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
222 $(error "$(RGB_MATRIX_DRIVER)" is not a valid matrix type) 222 $(error "$(RGB_MATRIX_DRIVER)" is not a valid matrix type)
223 endif 223 endif
224 OPT_DEFS += -DRGB_MATRIX_ENABLE 224 OPT_DEFS += -DRGB_MATRIX_ENABLE
225ifneq (,$(filter $(MCU), atmega16u2 atmega32u2)) 225ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
226 # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines 226 # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
227 OPT_DEFS += -DLIB8_ATTINY 227 OPT_DEFS += -DLIB8_ATTINY
228endif 228endif
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 3dba21bc0..8f1c0a915 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -25,7 +25,7 @@
25 }, 25 },
26 "processor": { 26 "processor": {
27 "type": "string", 27 "type": "string",
28 "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F411", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"] 28 "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F411", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
29 }, 29 },
30 "board": { 30 "board": {
31 "type": "string", 31 "type": "string",
diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md
index ac90ed746..8694beb7c 100644
--- a/docs/compatible_microcontrollers.md
+++ b/docs/compatible_microcontrollers.md
@@ -9,6 +9,7 @@ The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB
9* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2) 9* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
10* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4) 10* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
11* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286) 11* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
12* [AT90USB162](https://www.microchip.com/wwwproducts/en/AT90USB162)
12 13
13Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead: 14Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead:
14 15
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index a558af64e..2adb16e4a 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -93,18 +93,18 @@ BACKLIGHT_DRIVER = pwm
93 93
94On AVR boards, QMK automatically decides which driver to use according to the following table: 94On AVR boards, QMK automatically decides which driver to use according to the following table:
95 95
96|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328/P| 96|Backlight Pin|AT90USB64/128|AT90USB162|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328/P|
97|-------------|-------------|-------------|-------------|---------|-----------| 97|-------------|-------------|----------|-------------|-------------|---------|-----------|
98|`B1` | | | | |Timer 1 | 98|`B1` | | | | | |Timer 1 |
99|`B2` | | | | |Timer 1 | 99|`B2` | | | | | |Timer 1 |
100|`B5` |Timer 1 |Timer 1 | | | | 100|`B5` |Timer 1 | |Timer 1 | | | |
101|`B6` |Timer 1 |Timer 1 | | | | 101|`B6` |Timer 1 | |Timer 1 | | | |
102|`B7` |Timer 1 |Timer 1 |Timer 1 | | | 102|`B7` |Timer 1 |Timer 1 |Timer 1 |Timer 1 | | |
103|`C4` |Timer 3 | | | | | 103|`C4` |Timer 3 | | | | | |
104|`C5` |Timer 3 | |Timer 1 | | | 104|`C5` |Timer 3 |Timer 1 | |Timer 1 | | |
105|`C6` |Timer 3 |Timer 3 |Timer 1 | | | 105|`C6` |Timer 3 |Timer 1 |Timer 3 |Timer 1 | | |
106|`D4` | | | |Timer 1 | | 106|`D4` | | | | |Timer 1 | |
107|`D5` | | | |Timer 1 | | 107|`D5` | | | | |Timer 1 | |
108 108
109All other pins will use timer-assisted software PWM: 109All other pins will use timer-assisted software PWM:
110 110
diff --git a/docs/ja/compatible_microcontrollers.md b/docs/ja/compatible_microcontrollers.md
index 56f4c0297..b89dd54b0 100644
--- a/docs/ja/compatible_microcontrollers.md
+++ b/docs/ja/compatible_microcontrollers.md
@@ -14,6 +14,7 @@ QMK は十分な容量のフラッシュメモリを備えた USB 対応 AVR ま
14* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2) 14* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
15* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4) 15* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
16* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286) 16* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
17* [AT90USB162](https://www.microchip.com/wwwproducts/en/AT90USB162)
17 18
18組み込みの USB インターフェースを持たない、いくつかの MCU は代わりに [V-USB](https://www.obdev.at/products/vusb/index.html) を使います: 19組み込みの USB インターフェースを持たない、いくつかの MCU は代わりに [V-USB](https://www.obdev.at/products/vusb/index.html) を使います:
19 20
diff --git a/docs/spi_driver.md b/docs/spi_driver.md
index 1d432432a..03c008da2 100644
--- a/docs/spi_driver.md
+++ b/docs/spi_driver.md
@@ -6,12 +6,12 @@ The SPI Master drivers used in QMK have a set of common functions to allow porta
6 6
7No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` pins of your SPI devices to the matching pins on the MCU: 7No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` pins of your SPI devices to the matching pins on the MCU:
8 8
9|MCU |`SS`|`SCK`|`MOSI`|`MISO`| 9|MCU |`SS`|`SCK`|`MOSI`|`MISO`|
10|---------------|----|-----|------|------| 10|-----------------|----|-----|------|------|
11|ATMega16/32U2/4|`B0`|`B1` |`B2` |`B3` | 11|ATMega16/32U2/4 |`B0`|`B1` |`B2` |`B3` |
12|AT90USB64/128 |`B0`|`B1` |`B2` |`B3` | 12|AT90USB64/128/162|`B0`|`B1` |`B2` |`B3` |
13|ATmega32A |`B4`|`B7` |`B5` |`B6` | 13|ATmega32A |`B4`|`B7` |`B5` |`B6` |
14|ATmega328/P |`B2`|`B5` |`B3` |`B4` | 14|ATmega328/P |`B2`|`B5` |`B3` |`B4` |
15 15
16You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually. 16You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually.
17`SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`. 17`SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`.
diff --git a/drivers/avr/serial.c b/drivers/avr/serial.c
index 526a0946b..3647bee0d 100644
--- a/drivers/avr/serial.c
+++ b/drivers/avr/serial.c
@@ -20,7 +20,7 @@
20 20
21#ifdef SOFT_SERIAL_PIN 21#ifdef SOFT_SERIAL_PIN
22 22
23# if !(defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) 23# if !(defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
24# error serial.c is not supported for the currently selected MCU 24# error serial.c is not supported for the currently selected MCU
25# endif 25# endif
26// if using ATmega32U4/2, AT90USBxxx I2C, can not use PD0 and PD1 in soft serial. 26// if using ATmega32U4/2, AT90USBxxx I2C, can not use PD0 and PD1 in soft serial.
@@ -52,8 +52,8 @@
52# define EICRx EICRA 52# define EICRx EICRA
53# endif 53# endif
54 54
55// ATmegaxxU2 specific config 55// ATmegaxxU2/AT90USB162 specific config
56# if defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) 56# if defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_AT90USB162__)
57// PD4(INT5), PD6(INT6), PD7(INT7), PC7(INT4) 57// PD4(INT5), PD6(INT6), PD7(INT7), PC7(INT4)
58# if SOFT_SERIAL_PIN == D4 58# if SOFT_SERIAL_PIN == D4
59# define EIMSK_BIT _BV(INT5) 59# define EIMSK_BIT _BV(INT5)
diff --git a/drivers/avr/spi_master.c b/drivers/avr/spi_master.c
index cbec9f36e..19ca0ced4 100644
--- a/drivers/avr/spi_master.c
+++ b/drivers/avr/spi_master.c
@@ -20,7 +20,7 @@
20#include "quantum.h" 20#include "quantum.h"
21#include "timer.h" 21#include "timer.h"
22 22
23#if defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 23#if defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
24# define SPI_SCK_PIN B1 24# define SPI_SCK_PIN B1
25# define SPI_MOSI_PIN B2 25# define SPI_MOSI_PIN B2
26# define SPI_MISO_PIN B3 26# define SPI_MISO_PIN B3
diff --git a/drivers/avr/spi_master.h b/drivers/avr/spi_master.h
index e36a7c21c..9203698dd 100644
--- a/drivers/avr/spi_master.h
+++ b/drivers/avr/spi_master.h
@@ -21,7 +21,7 @@
21typedef int16_t spi_status_t; 21typedef int16_t spi_status_t;
22 22
23// Hardware SS pin is defined in the header so that user code can refer to it 23// Hardware SS pin is defined in the header so that user code can refer to it
24#if defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 24#if defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
25# define SPI_SS_PIN B0 25# define SPI_SS_PIN B0
26#elif defined(__AVR_ATmega32A__) 26#elif defined(__AVR_ATmega32A__)
27# define SPI_SS_PIN B4 27# define SPI_SS_PIN B4
diff --git a/drivers/avr/uart.c b/drivers/avr/uart.c
index e866a9e4f..c6abcb6fe 100644
--- a/drivers/avr/uart.c
+++ b/drivers/avr/uart.c
@@ -29,7 +29,7 @@
29 29
30#include "uart.h" 30#include "uart.h"
31 31
32#if defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 32#if defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
33# define UDRn UDR1 33# define UDRn UDR1
34# define UBRRnL UBRR1L 34# define UBRRnL UBRR1L
35# define UCSRnA UCSR1A 35# define UCSRnA UCSR1A
diff --git a/lib/python/qmk/constants.py b/lib/python/qmk/constants.py
index 404a58a7e..cb9461356 100644
--- a/lib/python/qmk/constants.py
+++ b/lib/python/qmk/constants.py
@@ -11,7 +11,7 @@ MAX_KEYBOARD_SUBFOLDERS = 5
11 11
12# Supported processor types 12# Supported processor types
13CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F411' 13CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F411'
14LUFA_PROCESSORS = 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None 14LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None
15VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85' 15VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85'
16 16
17# Common format strings 17# Common format strings
diff --git a/lib/python/qmk/os_helpers/linux/__init__.py b/lib/python/qmk/os_helpers/linux/__init__.py
index 86850bf28..a04ac4f8a 100644
--- a/lib/python/qmk/os_helpers/linux/__init__.py
+++ b/lib/python/qmk/os_helpers/linux/__init__.py
@@ -48,6 +48,7 @@ def check_udev_rules():
48 _udev_rule("03eb", "2ff3"), # ATmega16U4 48 _udev_rule("03eb", "2ff3"), # ATmega16U4
49 _udev_rule("03eb", "2ff4"), # ATmega32U4 49 _udev_rule("03eb", "2ff4"), # ATmega32U4
50 _udev_rule("03eb", "2ff9"), # AT90USB64 50 _udev_rule("03eb", "2ff9"), # AT90USB64
51 _udev_rule("03eb", "2ffa"), # AT90USB162
51 _udev_rule("03eb", "2ffb") # AT90USB128 52 _udev_rule("03eb", "2ffb") # AT90USB128
52 }, 53 },
53 'kiibohd': {_udev_rule("1c11", "b007")}, 54 'kiibohd': {_udev_rule("1c11", "b007")},
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index 4d66da80b..2ecdd4f2c 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -68,7 +68,7 @@
68# define COMxx1 COM3A1 68# define COMxx1 COM3A1
69# define OCRxx OCR3A 69# define OCRxx OCR3A
70# endif 70# endif
71#elif (defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__)) && (BACKLIGHT_PIN == B7 || BACKLIGHT_PIN == C5 || BACKLIGHT_PIN == C6) 71#elif (defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__)) && (BACKLIGHT_PIN == B7 || BACKLIGHT_PIN == C5 || BACKLIGHT_PIN == C6)
72# define HARDWARE_PWM 72# define HARDWARE_PWM
73# define ICRx ICR1 73# define ICRx ICR1
74# define TCCRxA TCCR1A 74# define TCCRxA TCCR1A
diff --git a/quantum/config_common.h b/quantum/config_common.h
index 2d9c70b08..df3a6c5c5 100644
--- a/quantum/config_common.h
+++ b/quantum/config_common.h
@@ -39,7 +39,7 @@
39# define PIND_ADDRESS 0x9 39# define PIND_ADDRESS 0x9
40# define PINE_ADDRESS 0xC 40# define PINE_ADDRESS 0xC
41# define PINF_ADDRESS 0xF 41# define PINF_ADDRESS 0xF
42# elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) 42# elif defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
43# define ADDRESS_BASE 0x00 43# define ADDRESS_BASE 0x00
44# define PINB_ADDRESS 0x3 44# define PINB_ADDRESS 0x3
45# define PINC_ADDRESS 0x6 45# define PINC_ADDRESS 0x6
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 0608b469c..a860b9497 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -37,6 +37,8 @@
37#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 37#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
38# if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 38# if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
39# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 39# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
40# elif defined(__AVR_AT90USB162__)
41# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 511
40# else 42# else
41# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023 43# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023
42# endif 44# endif
diff --git a/quantum/mcu_selection.mk b/quantum/mcu_selection.mk
index 6b11eb498..09e07a37f 100644
--- a/quantum/mcu_selection.mk
+++ b/quantum/mcu_selection.mk
@@ -279,7 +279,7 @@ ifneq ($(findstring STM32F411, $(MCU)),)
279 DFU_SUFFIX_ARGS ?= -v 0483 -p DF11 279 DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
280endif 280endif
281 281
282ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287)) 282ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287))
283 PROTOCOL = LUFA 283 PROTOCOL = LUFA
284 284
285 # Processor frequency. 285 # Processor frequency.
@@ -317,7 +317,7 @@ ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 a
317 ifeq (,$(filter $(NO_INTERRUPT_CONTROL_ENDPOINT),yes)) 317 ifeq (,$(filter $(NO_INTERRUPT_CONTROL_ENDPOINT),yes))
318 OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT 318 OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
319 endif 319 endif
320 ifneq (,$(filter $(MCU),atmega16u2 atmega32u2)) 320 ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2))
321 NO_I2C = yes 321 NO_I2C = yes
322 endif 322 endif
323endif 323endif
diff --git a/util/drivers.txt b/util/drivers.txt
index c3c5e286b..a41192571 100644
--- a/util/drivers.txt
+++ b/util/drivers.txt
@@ -11,4 +11,5 @@ libusb,ATmega32U2,03EB,2FF0,ddc2c572-cb6e-4f61-a6cc-1a5de941f063
11libusb,ATmega16U4,03EB,2FF3,3180d426-bf93-4578-a693-2efbc337da8e 11libusb,ATmega16U4,03EB,2FF3,3180d426-bf93-4578-a693-2efbc337da8e
12libusb,ATmega32U4,03EB,2FF4,5f9726fd-f9de-487a-9fbd-8b3524a7a56a 12libusb,ATmega32U4,03EB,2FF4,5f9726fd-f9de-487a-9fbd-8b3524a7a56a
13libusb,AT90USB64,03EB,2FF9,c6a708ad-e97d-43cd-b04a-3180d737a71b 13libusb,AT90USB64,03EB,2FF9,c6a708ad-e97d-43cd-b04a-3180d737a71b
14libusb,AT90USB162,03EB,2FFA,ef8546f0-ef09-4e7c-8fc2-ffbae1dcd84a
14libusb,AT90USB128,03EB,2FFB,fd217df3-59d0-440a-a8f3-4c0c8c84daa3 15libusb,AT90USB128,03EB,2FFB,fd217df3-59d0-440a-a8f3-4c0c8c84daa3
diff --git a/util/udev/50-qmk.rules b/util/udev/50-qmk.rules
index 70bd7e6e3..acaa7dcc5 100644
--- a/util/udev/50-qmk.rules
+++ b/util/udev/50-qmk.rules
@@ -9,6 +9,8 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff3", TAG+="uacc
9SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess" 9SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess"
10### AT90USB64 10### AT90USB64
11SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess" 11SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess"
12### AT90USB162
13SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffa", TAG+="uaccess"
12### AT90USB128 14### AT90USB128
13SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess" 15SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess"
14 16