From 1409b368517a8ce9af1320acc75f7a8fbcdfca18 Mon Sep 17 00:00:00 2001
From: Joakim Tufvegren <jocke@barbanet.com>
Date: Tue, 3 Aug 2021 23:38:37 +0200
Subject: [PATCH] Remove the #10088 hotfix for Teensy 3.1-like Input:Club
 keyboards (#12870)

* Remove the #10088 hotfix for K20x MCU:s.

It seems to _cause_ the issue it intended to solve there.

* Cleaner way of removing #10088 hotfix.

Now only affects Ergodox Infinity, Whitefox and K-type, though.

Switches over Ergodox Infinity to the `IC_TEENSY_3_1` board, since that
was a nice place to implement the `restart_usb_driver` override.
However, I would guess this issue is present for other K20x/Teensy 3.1
boards as well...

* Fix comment regarding `IC_TEENSY_3_1` for all keyboards using it.
---
 keyboards/ergodox_infinity/rules.mk           | 7 +++++++
 keyboards/k_type/rules.mk                     | 3 ++-
 keyboards/whitefox/rules.mk                   | 8 +++-----
 platforms/chibios/IC_TEENSY_3_1/board/board.c | 5 +++++
 tmk_core/protocol/chibios/usb_main.c          | 2 +-
 5 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/keyboards/ergodox_infinity/rules.mk b/keyboards/ergodox_infinity/rules.mk
index fbd52cd257..6c490ca0d8 100644
--- a/keyboards/ergodox_infinity/rules.mk
+++ b/keyboards/ergodox_infinity/rules.mk
@@ -4,6 +4,13 @@ MCU = MK20DX256
 # Bootloader selection
 BOOTLOADER = kiibohd
 
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+# This board was copied from PJRC_TEENSY_3_1. The only difference should be a
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
+BOARD = IC_TEENSY_3_1
+
 # Build Options
 #   comment out to disable the options.
 #
diff --git a/keyboards/k_type/rules.mk b/keyboards/k_type/rules.mk
index 369cab4f09..ffd350ef8a 100644
--- a/keyboards/k_type/rules.mk
+++ b/keyboards/k_type/rules.mk
@@ -7,7 +7,8 @@ BOOTLOADER = kiibohd
 # Board: it should exist either in <chibios>/os/hal/boards/
 #  or <this_dir>/boards
 # This board was copied from PJRC_TEENSY_3_1. The only difference should be a
-# hack to ensure the watchdog has started before trying to disable it.
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
 BOARD = IC_TEENSY_3_1
 
 # Build Options
diff --git a/keyboards/whitefox/rules.mk b/keyboards/whitefox/rules.mk
index 7c1d0c3def..cc02f3472e 100644
--- a/keyboards/whitefox/rules.mk
+++ b/keyboards/whitefox/rules.mk
@@ -6,11 +6,9 @@ BOOTLOADER = kiibohd
 
 # Board: it should exist either in <chibios>/os/hal/boards/
 #  or <this_dir>/boards
-# - BOARD =
-#   - PJRC_TEENSY_LC for Teensy LC
-#   - PJRC_TEENSY_3 for Teensy 3.0
-#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-#   - MCHCK_K20 for Infinity KB
+# This board was copied from PJRC_TEENSY_3_1. The only difference should be a
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
 BOARD = IC_TEENSY_3_1
 
 # Build Options
diff --git a/platforms/chibios/IC_TEENSY_3_1/board/board.c b/platforms/chibios/IC_TEENSY_3_1/board/board.c
index 36ae8051ee..424e0c975b 100644
--- a/platforms/chibios/IC_TEENSY_3_1/board/board.c
+++ b/platforms/chibios/IC_TEENSY_3_1/board/board.c
@@ -144,3 +144,8 @@ void __early_init(void) {
  * @todo    Add your board-specific code, if any.
  */
 void boardInit(void) {}
+
+
+void restart_usb_driver(USBDriver *usbp) {
+    // Do nothing. Restarting the USB driver on these boards breaks it.
+}
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index 3adbb97994..441cfab970 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -705,7 +705,7 @@ void init_usb_driver(USBDriver *usbp) {
     chVTObjectInit(&keyboard_idle_timer);
 }
 
-void restart_usb_driver(USBDriver *usbp) {
+__attribute__((weak)) void restart_usb_driver(USBDriver *usbp) {
     usbStop(usbp);
     usbDisconnectBus(usbp);