diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h
index fc66dc0ef..448195306 100644
--- a/tmk_core/common/keycode.h
+++ b/tmk_core/common/keycode.h
@@ -156,6 +156,8 @@ along with this program. If not, see .
#define KC_WSTP KC_WWW_STOP
#define KC_WREF KC_WWW_REFRESH
#define KC_WFAV KC_WWW_FAVORITES
+/* Jump to bootloader */
+#define KC_BTLD KC_BOOTLOADER
/* Transparent */
#define KC_TRANSPARENT 1
#define KC_TRNS KC_TRANSPARENT
@@ -426,6 +428,9 @@ enum internal_special_keycodes {
KC_MEDIA_FAST_FORWARD,
KC_MEDIA_REWIND, /* 0xBC */
+ /* Jump to bootloader */
+ KC_BOOTLOADER = 0xBF,
+
/* Fn key */
KC_FN0 = 0xC0,
KC_FN1,
diff --git a/tmk_core/common/keymap.c b/tmk_core/common/keymap.c
index 9f4fab521..d48923808 100644
--- a/tmk_core/common/keymap.c
+++ b/tmk_core/common/keymap.c
@@ -20,6 +20,7 @@ along with this program. If not, see .
#include "action_layer.h"
#include "action.h"
#include "action_macro.h"
+#include "wait.h"
#include "debug.h"
@@ -140,6 +141,11 @@ static action_t keycode_to_action(uint8_t keycode)
case KC_TRNS:
action.code = ACTION_TRANSPARENT;
break;
+ case KC_BOOTLOADER:
+ clear_keyboard();
+ wait_ms(50);
+ bootloader_jump(); // not return
+ break;
default:
action.code = ACTION_NO;
break;