summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bootloader.mk62
-rw-r--r--build_keyboard.mk5
-rw-r--r--docs/flashing.md45
-rw-r--r--keyboards/atreus/rules.mk21
-rw-r--r--keyboards/atreus62/config.h2
-rw-r--r--keyboards/atreus62/rules.mk15
-rw-r--r--keyboards/bfake/config.h1
-rw-r--r--keyboards/bfake/rules.mk7
-rw-r--r--keyboards/bmini/config.h1
-rw-r--r--keyboards/bmini/rules.mk7
-rw-r--r--keyboards/chimera_ortho/rules.mk17
-rw-r--r--keyboards/converter/usb_usb/ble/rules.mk1
-rw-r--r--keyboards/converter/usb_usb/rules.mk16
-rw-r--r--keyboards/deltasplit75/rules.mk15
-rw-r--r--keyboards/deltasplit75/v2/config.h2
-rw-r--r--keyboards/dichotemy/rules.mk19
-rw-r--r--keyboards/eco/config.h2
-rw-r--r--keyboards/eco/rules.mk15
-rw-r--r--keyboards/ergodox_ez/rules.mk15
-rw-r--r--keyboards/gherkin/keymaps/mjt/config.h2
-rw-r--r--keyboards/gherkin/rules.mk11
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/rules.mk14
-rwxr-xr-xkeyboards/handwired/reddot/rules.mk19
-rw-r--r--keyboards/handwired/space_oddity/config.h2
-rw-r--r--keyboards/handwired/space_oddity/rules.mk11
-rw-r--r--keyboards/handwired/traveller/rules.mk10
-rw-r--r--keyboards/handwired/woodpad/config.h2
-rw-r--r--keyboards/handwired/woodpad/rules.mk15
-rw-r--r--keyboards/iris/rev1/config.h2
-rw-r--r--keyboards/iris/rev2/config.h2
-rw-r--r--keyboards/iris/rules.mk15
-rw-r--r--keyboards/jj40/config.h1
-rwxr-xr-xkeyboards/jj40/program74
-rw-r--r--keyboards/jj40/rules.mk9
-rw-r--r--keyboards/lets_split/rev1/config.h3
-rw-r--r--keyboards/lets_split/rev2/config.h2
-rw-r--r--keyboards/lets_split/rules.mk15
-rw-r--r--keyboards/lets_split/sockets/config.h2
-rw-r--r--keyboards/levinson/rev1/config.h2
-rw-r--r--keyboards/levinson/rev2/config.h3
-rw-r--r--keyboards/levinson/rules.mk15
-rw-r--r--keyboards/mechmini/config.h1
-rw-r--r--keyboards/mechmini/rules.mk7
-rw-r--r--keyboards/minidox/rev1/config.h2
-rw-r--r--keyboards/minidox/rules.mk15
-rw-r--r--keyboards/mitosis/rules.mk18
-rw-r--r--keyboards/mt40/config.h1
-rwxr-xr-xkeyboards/mt40/program74
-rw-r--r--keyboards/mt40/rules.mk9
-rw-r--r--keyboards/nyquist/rev1/config.h2
-rw-r--r--keyboards/nyquist/rules.mk15
-rw-r--r--keyboards/orthodox/rev1/config.h2
-rw-r--r--keyboards/orthodox/rules.mk15
-rw-r--r--keyboards/pearl/config.h1
-rw-r--r--keyboards/pearl/rules.mk7
-rw-r--r--keyboards/planck/light/rules.mk2
-rw-r--r--keyboards/planck/rev3/rules.mk9
-rw-r--r--keyboards/planck/rev4/rules.mk8
-rw-r--r--keyboards/planck/rev5/rules.mk8
-rw-r--r--keyboards/planck/rules.mk21
-rw-r--r--keyboards/preonic/rules.mk20
-rw-r--r--keyboards/ps2avrGB/config.h1
-rw-r--r--keyboards/ps2avrGB/rules.mk7
-rw-r--r--keyboards/viterbi/rev1/config.h2
-rw-r--r--keyboards/viterbi/rules.mk15
-rw-r--r--keyboards/ymd96/config.h1
-rw-r--r--keyboards/ymd96/rules.mk7
-rw-r--r--layouts/community/ergodox/jackhumbert/keymap.c2
-rw-r--r--message.mk8
-rw-r--r--quantum/quantum.c3
-rw-r--r--tmk_core/avr.mk10
-rw-r--r--tmk_core/common/avr/bootloader.c196
-rw-r--r--tmk_core/common/avr/bootloader_size.c20
-rw-r--r--tmk_core/rules.mk23
-rw-r--r--users/drashna/drashna.c2
-rw-r--r--users/drashna/template.c2
76 files changed, 484 insertions, 551 deletions
diff --git a/bootloader.mk b/bootloader.mk
new file mode 100644
index 0000000000..55352f3d42
--- /dev/null
+++ b/bootloader.mk
@@ -0,0 +1,62 @@
+# Copyright 2017 Jack Humbert
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# If it's possible that multiple bootloaders can be used for one project,
+# you can leave this unset, and the correct size will be selected
+# automatically.
+#
+# Sets the bootloader defined in the keyboard's/keymap's rules.mk
+# Current options:
+# atmel-dfu
+# lufa-dfu
+# qmk-dfu
+# halfkay
+# caterina
+# bootloadHID
+#
+# BOOTLOADER_SIZE can still be defined manually, but it's recommended
+# you add any possible configuration to this list
+
+ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
+ OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
+ OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_SIZE = 4096
+endif
+ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
+ OPT_DEFS += -DBOOTLOADER_LUFA_DFU
+ OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_SIZE = 4096
+endif
+ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
+ OPT_DEFS += -DBOOTLOADER_QMK_DFU
+ OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_SIZE = 4096
+endif
+ifeq ($(strip $(BOOTLOADER)), halfkay)
+ OPT_DEFS += -DBOOTLOADER_HALFKAY
+ BOOTLOADER_SIZE = 512
+endif
+ifeq ($(strip $(BOOTLOADER)), caterina)
+ OPT_DEFS += -DBOOTLOADER_CATERINA
+ BOOTLOADER_SIZE = 4096
+endif
+ifeq ($(strip $(BOOTLOADER)), bootloadHID)
+ OPT_DEFS += -DBOOTLOADER_BOOTLOADHID
+ BOOTLOADER_SIZE = 4096
+endif
+
+ifdef BOOTLOADER_SIZE
+ OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
+endif \ No newline at end of file
diff --git a/build_keyboard.mk b/build_keyboard.mk
index df025714db..cbdaaa0104 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -230,6 +230,7 @@ VPATH += $(USER_PATH)
include common_features.mk
include $(TMK_PATH)/protocol.mk
include $(TMK_PATH)/common.mk
+include bootloader.mk
SRC += $(TMK_COMMON_SRC)
OPT_DEFS += $(TMK_COMMON_DEFS)
@@ -266,10 +267,10 @@ $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(GFXINC)
$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
# Default target.
-all: build sizeafter
+all: build check-size
# Change the build target to build a HEX file or a library.
-build: elf hex
+build: elf cphex
#build: elf hex eep lss sym
#build: lib
diff --git a/docs/flashing.md b/docs/flashing.md
index a61634d215..5b3c1a4447 100644
--- a/docs/flashing.md
+++ b/docs/flashing.md
@@ -1,12 +1,20 @@
-# Flashing Intrustructions
+# Flashing Intrustructions / Bootloader Information
There are quite a few different types of bootloaders that keyboards use, and just about all of the use a different flashing method. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to be compatible with all the different types without having to think about it much, but this article will describe the different types of bootloaders, and available methods for flashing them.
+If you have a bootloader selected with the `BOOTLOADER` variable in your `rules.mk`, QMK will automatically calculate if your .hex file is the right size to be flashed to the device, and output the total size it bytes (along with the max). To run this process manually, compile with the target `check-size`, eg `make planck/rev4:default:check-size`.
+
## DFU
Atmel's DFU bootloader comes on all atmega32u4 chips by default, and is used by many keyboards that have their own ICs on their PCBs (Older OLKB boards, Clueboards). Some keyboards may also use LUFA's DFU bootloader (or QMK's fork) (Newer OLKB boards) that adds in additional features specific to that hardware.
-These bootloaders are usually 4096 bytes for the atmega32u4 chip.
+To ensure compatability with the DFU bootloader, make sure this block is present your `rules.mk` (optionally with `lufa-dfu` or `qmk-dfu` instead):
+
+ # Bootloader
+ # This definition is optional, and if your keyboard supports multiple bootloaders of
+ # different sizes, comment this out, and the correct address will be loaded
+ # automatically (+60). See bootloader.mk for all options.
+ BOOTLOADER = atmel-dfu
Compatible flashers:
@@ -26,15 +34,32 @@ or:
make <keyboard>:<keymap>:dfu
+### QMK DFU
+
+QMK has a fork of the LUFA DFU bootloader that allows for a simple matrix scan for exiting the bootloader and returning to the application, as well as flashing an LED/making a ticking noise with a speaker when things are happening. To enable these features, use this block in your `config.h` (The key that exits the bootloader needs to be hooked-up to the INPUT and OUTPUT defined here):
+
+ #define QMK_ESC_OUTPUT F1 // usually COL
+ #define QMK_ESC_INPUT D5 // usually ROW
+ #define QMK_LED E6
+ #define QMK_SPEAKER C6
+
+The Manufacturer and Product names are automatically pulled from your `config.h`, and "Bootloader" is added to the product.
+
+To generate this bootloader, use the `bootloader` target, eg `make planck/rev4:default:bootloader`.
+
+To generate a production-ready .hex file (containing the application and the bootloader), use the `production` target, eg `make planck/rev4:default:production`.
+
## Caterina
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
-This block of code allows for Caterina compatibility in QMK:
+To ensure compatability with the Caterina bootloader, make sure this block is present your `rules.mk`:
- #define CATERINA_BOOTLOADER
-
-These bootloaders are usually 4096 bytes for the atmega32u4 chip.
+ # Bootloader
+ # This definition is optional, and if your keyboard supports multiple bootloaders of
+ # different sizes, comment this out, and the correct address will be loaded
+ # automatically (+60). See bootloader.mk for all options.
+ BOOTLOADER = caterina
Compatible flashers:
@@ -57,7 +82,13 @@ or
Halfkay is a super-slim protocol developed by PJRC that uses HID, and come on all Teensys (namely the 2.0).
-This bootloader is 512 bytes.
+To ensure compatability with the Halfkay bootloader, make sure this block is present your `rules.mk`:
+
+ # Bootloader
+ # This definition is optional, and if your keyboard supports multiple bootloaders of
+ # different sizes, comment this out, and the correct address will be loaded
+ # automatically (+60). See bootloader.mk for all options.
+ BOOTLOADER = halfkay
Compatible flashers:
diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk
index 0a254d0e79..2c8418beb7 100644
--- a/keyboards/atreus/rules.mk
+++ b/keyboards/atreus/rules.mk
@@ -5,7 +5,6 @@ ifdef TEENSY2
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
else
OPT_DEFS += -DATREUS_ASTAR
- OPT_DEFS += -DCATERINA_BOOTLOADER
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
endif
@@ -27,7 +26,6 @@ MCU = atmega32u4
# software delays.
F_CPU = 16000000
-
#
# LUFA specific
#
@@ -47,19 +45,20 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+ifdef TEENSY2
+ BOOTLOADER = halfkay
+else
+ BOOTLOADER = caterina
+endif
+
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/atreus62/config.h b/keyboards/atreus62/config.h
index 90a4aa05a6..8d9248947c 100644
--- a/keyboards/atreus62/config.h
+++ b/keyboards/atreus62/config.h
@@ -38,8 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, C6 }
-#define CATERINA_BOOTLOADER
-
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION ROW2COL
diff --git a/keyboards/atreus62/rules.mk b/keyboards/atreus62/rules.mk
index ca399e9c56..66f6660c6e 100644
--- a/keyboards/atreus62/rules.mk
+++ b/keyboards/atreus62/rules.mk
@@ -35,18 +35,15 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
diff --git a/keyboards/bfake/config.h b/keyboards/bfake/config.h
index c52d9175b8..c0e0face5a 100644
--- a/keyboards/bfake/config.h
+++ b/keyboards/bfake/config.h
@@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_ANIMATIONS
#define NO_UART 1
-#define BOOTLOADHID_BOOTLOADER 1
/* key combination for command */
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
diff --git a/keyboards/bfake/rules.mk b/keyboards/bfake/rules.mk
index d089858273..9165de4248 100644
--- a/keyboards/bfake/rules.mk
+++ b/keyboards/bfake/rules.mk
@@ -24,6 +24,12 @@ NO_SUSPEND_POWER_DOWN = yes
# processor frequency
F_CPU = 12000000
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
# build options
BOOTMAGIC_ENABLE = yes
MOUSEKEY_ENABLE = yes
@@ -35,7 +41,6 @@ RGBLIGHT_ENABLE = yes
RGBLIGHT_CUSTOM_DRIVER = yes
OPT_DEFS = -DDEBUG_LEVEL=0
-OPT_DEFS += -DBOOTLOADER_SIZE=2048
# custom matrix setup
CUSTOM_MATRIX = yes
diff --git a/keyboards/bmini/config.h b/keyboards/bmini/config.h
index 90b315b7c5..b7a25e050e 100644
--- a/keyboards/bmini/config.h
+++ b/keyboards/bmini/config.h
@@ -34,7 +34,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_ANIMATIONS
#define NO_UART 1
-#define BOOTLOADHID_BOOTLOADER 1
/* key combination for command */
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
diff --git a/keyboards/bmini/rules.mk b/keyboards/bmini/rules.mk
index 41a87973d4..73c361e2a8 100644
--- a/keyboards/bmini/rules.mk
+++ b/keyboards/bmini/rules.mk
@@ -24,6 +24,12 @@ NO_SUSPEND_POWER_DOWN = yes
# processor frequency
F_CPU = 12000000
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
# build options
BOOTMAGIC_ENABLE = yes
MOUSEKEY_ENABLE = yes
@@ -35,7 +41,6 @@ RGBLIGHT_ENABLE = yes
RGBLIGHT_CUSTOM_DRIVER = yes
OPT_DEFS = -DDEBUG_LEVEL=0
-OPT_DEFS += -DBOOTLOADER_SIZE=2048
# custom matrix setup
CUSTOM_MATRIX = yes
diff --git a/keyboards/chimera_ortho/rules.mk b/keyboards/chimera_ortho/rules.mk
index 098bf28fa5..4f95949f9f 100644
--- a/keyboards/chimera_ortho/rules.mk
+++ b/keyboards/chimera_ortho/rules.mk
@@ -1,6 +1,5 @@
OPT_DEFS += -DCHIMERA_ORTHO_PROMICRO
-OPT_DEFS += -DCATERINA_BOOTLOADER
CHIMERA_ORTHO_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
@@ -45,19 +44,15 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk
index c951780e20..16090962d9 100644
--- a/keyboards/converter/usb_usb/ble/rules.mk
+++ b/keyboards/converter/usb_usb/ble/rules.mk
@@ -1,4 +1,3 @@
BLUETOOTH = AdafruitBLE
ADAFRUIT_BLE_ENABLE = yes
-OPT_DEFS += -DCATERINA_BOOTLOADER
F_CPU = 8000000
diff --git a/keyboards/converter/usb_usb/rules.mk b/keyboards/converter/usb_usb/rules.mk
index b0e07c7649..7a8f24bb49 100644
--- a/keyboards/converter/usb_usb/rules.mk
+++ b/keyboards/converter/usb_usb/rules.mk
@@ -43,19 +43,15 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
# Interrupt driven control endpoint task
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/deltasplit75/rules.mk b/keyboards/deltasplit75/rules.mk
index e345d61f56..2a13dbdfc6 100644
--- a/keyboards/deltasplit75/rules.mk
+++ b/keyboards/deltasplit75/rules.mk
@@ -39,18 +39,15 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
diff --git a/keyboards/deltasplit75/v2/config.h b/keyboards/deltasplit75/v2/config.h
index b677d09aa9..319a149fbc 100644
--- a/keyboards/deltasplit75/v2/config.h
+++ b/keyboards/deltasplit75/v2/config.h
@@ -37,8 +37,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2 }
#define MATRIX_COL_PINS { B6, B5, B4, E6, D7, C6, D4, D1}
-#define CATERINA_BOOTLOADER
-
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/dichotemy/rules.mk b/keyboards/dichotemy/rules.mk
index c8a316f843..4e9db86875 100644
--- a/keyboards/dichotemy/rules.mk
+++ b/