Browse Source

Dedupe I2C, SPI, UART driver inclusions (#22253)

Ryan 2 years ago
parent
commit
c157c19b81
100 changed files with 239 additions and 204 deletions
  1. 89 96
      builddefs/common_features.mk
  2. 12 0
      docs/i2c_driver.md
  3. 12 0
      docs/spi_driver.md
  4. 12 0
      docs/uart_driver.md
  5. 1 1
      keyboards/3w6/rev1/rules.mk
  6. 1 1
      keyboards/3w6/rev2/rules.mk
  7. 1 1
      keyboards/40percentclub/ut47/rules.mk
  8. 1 1
      keyboards/aeboards/satellite/rev1/rules.mk
  9. 0 2
      keyboards/anavi/knob1/rules.mk
  10. 0 2
      keyboards/anavi/knobs3/rules.mk
  11. 1 1
      keyboards/bajjak/rules.mk
  12. 1 1
      keyboards/barleycorn_smd/rules.mk
  13. 1 1
      keyboards/bioi/g60/rules.mk
  14. 1 1
      keyboards/bioi/g60ble/rules.mk
  15. 1 1
      keyboards/bioi/morgan65/rules.mk
  16. 1 1
      keyboards/centromere/rules.mk
  17. 2 1
      keyboards/clueboard/2x1800/2021/rules.mk
  18. 1 1
      keyboards/converter/palm_usb/rules.mk
  19. 1 1
      keyboards/converter/sun_usb/rules.mk
  20. 2 2
      keyboards/dc01/left/rules.mk
  21. 1 1
      keyboards/dichotomy/rules.mk
  22. 1 1
      keyboards/ergodox_ez/rules.mk
  23. 1 1
      keyboards/ergodox_stm32/rules.mk
  24. 1 1
      keyboards/fallacy/rules.mk
  25. 1 1
      keyboards/fc660c/rules.mk
  26. 1 1
      keyboards/fc980c/rules.mk
  27. 1 1
      keyboards/ferris/0_1/rules.mk
  28. 1 1
      keyboards/ferris/0_2/rules.mk
  29. 1 1
      keyboards/frobiac/blackbowl/rules.mk
  30. 2 1
      keyboards/gboards/ergotaco/rules.mk
  31. 2 1
      keyboards/gboards/georgi/rules.mk
  32. 2 1
      keyboards/gboards/gergo/keymaps/colemak/rules.mk
  33. 2 1
      keyboards/gboards/gergo/keymaps/default/rules.mk
  34. 2 1
      keyboards/gboards/gergo/keymaps/germ/rules.mk
  35. 2 1
      keyboards/gboards/gergo/keymaps/gotham/rules.mk
  36. 1 1
      keyboards/gboards/gergo/rules.mk
  37. 1 1
      keyboards/gboards/gergoplex/rules.mk
  38. 1 1
      keyboards/geistmaschine/macropod/rules.mk
  39. 1 1
      keyboards/glenpickle/chimera_ergo/rules.mk
  40. 1 1
      keyboards/glenpickle/chimera_ls/rules.mk
  41. 1 1
      keyboards/glenpickle/chimera_ortho/rules.mk
  42. 1 1
      keyboards/glenpickle/chimera_ortho_plus/rules.mk
  43. 1 1
      keyboards/handwired/dactyl/rules.mk
  44. 1 1
      keyboards/handwired/dqz11n1g/rules.mk
  45. 1 1
      keyboards/handwired/dygma/raise/rules.mk
  46. 2 2
      keyboards/handwired/frenchdev/rules.mk
  47. 2 1
      keyboards/handwired/lagrange/rules.mk
  48. 0 2
      keyboards/handwired/onekey/kb2040/rules.mk
  49. 1 1
      keyboards/handwired/onekey/keymaps/i2c_scanner/rules.mk
  50. 1 1
      keyboards/handwired/pterodactyl/rules.mk
  51. 1 1
      keyboards/hazel/bad_wings/rules.mk
  52. 1 1
      keyboards/hotdox/rules.mk
  53. 2 2
      keyboards/hs60/v2/ansi/rules.mk
  54. 2 2
      keyboards/hs60/v2/hhkb/rules.mk
  55. 2 2
      keyboards/hs60/v2/iso/rules.mk
  56. 2 2
      keyboards/ibm/model_m/mschwingen/rules.mk
  57. 1 1
      keyboards/ingrained/rules.mk
  58. 1 1
      keyboards/kagizaraya/chidori/rules.mk
  59. 1 1
      keyboards/keebwerk/mega/ansi/rules.mk
  60. 1 1
      keyboards/keyboardio/model01/rules.mk
  61. 1 1
      keyboards/keyhive/honeycomb/rules.mk
  62. 1 1
      keyboards/kprepublic/bm60hsrgb/rev2/rules.mk
  63. 1 1
      keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk
  64. 1 1
      keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk
  65. 1 1
      keyboards/ktec/ergodone/rules.mk
  66. 1 1
      keyboards/matrix/abelx/rules.mk
  67. 1 1
      keyboards/matrix/m20add/rules.mk
  68. 1 1
      keyboards/mechwild/sugarglider/rules.mk
  69. 1 1
      keyboards/mitosis/rules.mk
  70. 1 1
      keyboards/molecule/rules.mk
  71. 1 1
      keyboards/moon/rules.mk
  72. 1 1
      keyboards/moonlander/rules.mk
  73. 1 1
      keyboards/mt/split75/rules.mk
  74. 2 1
      keyboards/neson_design/700e/rules.mk
  75. 2 1
      keyboards/neson_design/n6/rules.mk
  76. 2 2
      keyboards/novelkeys/nk65/rules.mk
  77. 2 2
      keyboards/novelkeys/nk87/rules.mk
  78. 1 1
      keyboards/nullbitsco/nibble/rules.mk
  79. 2 2
      keyboards/nullbitsco/snap/rules.mk
  80. 2 2
      keyboards/nullbitsco/tidbit/rules.mk
  81. 1 1
      keyboards/oddforge/vea/rules.mk
  82. 0 1
      keyboards/phoenix/config.h
  83. 2 0
      keyboards/phoenix/halconf.h
  84. 1 1
      keyboards/redox_w/rules.mk
  85. 1 1
      keyboards/rgbkb/mun/rules.mk
  86. 1 1
      keyboards/rgbkb/sol3/rules.mk
  87. 1 1
      keyboards/satt/comet46/rules.mk
  88. 1 1
      keyboards/sirius/uni660/rev1/rules.mk
  89. 1 1
      keyboards/sirius/uni660/rev2/rules.mk
  90. 1 1
      keyboards/spaceholdings/nebula12/rules.mk
  91. 1 1
      keyboards/spaceholdings/nebula68/rules.mk
  92. 1 1
      keyboards/spiderisland/split78/rules.mk
  93. 1 1
      keyboards/switchplate/southpaw_65/rules.mk
  94. 1 1
      keyboards/sx60/rules.mk
  95. 1 1
      keyboards/system76/launch_1/rules.mk
  96. 1 1
      keyboards/telophase/rules.mk
  97. 1 1
      keyboards/tkc/portico/rules.mk
  98. 1 1
      keyboards/tkc/portico75/keymaps/via/rules.mk
  99. 1 1
      keyboards/torn/rules.mk
  100. 2 1
      keyboards/touchpad/rules.mk

+ 89 - 96
builddefs/common_features.mk

@@ -151,30 +151,25 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
         endif
         OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(POINTING_DEVICE_DRIVER))
         ifeq ($(strip $(POINTING_DEVICE_DRIVER)), adns9800)
-            OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
-            QUANTUM_LIB_SRC += spi_master.c
+            SPI_DRIVER_REQUIRED = yes
         else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), analog_joystick)
             OPT_DEFS += -DSTM32_ADC -DHAL_USE_ADC=TRUE
             LIB_SRC += analog.c
         else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_i2c)
-            OPT_DEFS += -DSTM32_I2C -DHAL_USE_I2C=TRUE
+            I2C_DRIVER_REQUIRED = yes
             SRC += drivers/sensors/cirque_pinnacle.c
             SRC += drivers/sensors/cirque_pinnacle_gestures.c
             SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
-            QUANTUM_LIB_SRC += i2c_master.c
         else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_spi)
-            OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+            SPI_DRIVER_REQUIRED = yes
             SRC += drivers/sensors/cirque_pinnacle.c
             SRC += drivers/sensors/cirque_pinnacle_gestures.c
             SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
-            QUANTUM_LIB_SRC += spi_master.c
         else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
-            OPT_DEFS += -DSTM32_SPI -DHAL_USE_I2C=TRUE
-            QUANTUM_LIB_SRC += i2c_master.c
+            I2C_DRIVER_REQUIRED = yes
         else ifneq ($(filter $(strip $(POINTING_DEVICE_DRIVER)),pmw3360 pmw3389),)
-            OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+            SPI_DRIVER_REQUIRED = yes
             SRC += drivers/sensors/pmw33xx_common.c
-            QUANTUM_LIB_SRC += spi_master.c
         endif
     endif
 endif
@@ -204,12 +199,12 @@ else
   else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
     # External I2C EEPROM implementation
     OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
-    QUANTUM_LIB_SRC += i2c_master.c
+    I2C_DRIVER_REQUIRED = yes
     SRC += eeprom_driver.c eeprom_i2c.c
   else ifeq ($(strip $(EEPROM_DRIVER)), spi)
     # External SPI EEPROM implementation
     OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
-    QUANTUM_LIB_SRC += spi_master.c
+    SPI_DRIVER_REQUIRED = yes
     SRC += eeprom_driver.c eeprom_spi.c
   else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
     # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
@@ -308,10 +303,10 @@ ifneq ($(strip $(FLASH_DRIVER)), none)
     else
         OPT_DEFS += -DFLASH_ENABLE
         ifeq ($(strip $(FLASH_DRIVER)),spi)
+            SPI_DRIVER_REQUIRED = yes
             OPT_DEFS += -DFLASH_DRIVER -DFLASH_SPI
             COMMON_VPATH += $(DRIVER_PATH)/flash
             SRC += flash_spi.c
-            QUANTUM_LIB_SRC += spi_master.c
         endif
     endif
 endif
@@ -380,80 +375,73 @@ endif
     CIE1931_CURVE := yes
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3218)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3218-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3731)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3731-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3733)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3733-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3736)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3736-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3737)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3737-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3741)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3741-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(LED_MATRIX_DRIVER)), snled27351)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led
         SRC += snled27351-simple.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
 endif
@@ -491,87 +479,79 @@ endif
     RGB_KEYCODES_ENABLE := yes
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216s)
-        OPT_DEFS += -DHAL_USE_SPI=TRUE
+        SPI_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led
         SRC += aw20216s.c
-        QUANTUM_LIB_SRC += spi_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3218)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3218.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3731)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3731.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3733)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3733.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3736)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3736.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3737)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3737.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3741)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31fl3741.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
-        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
+        OPT_DEFS += -DIS31FLCOMMON
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led/issi
         SRC += is31flcommon.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), snled27351)
-        OPT_DEFS += -DHAL_USE_I2C=TRUE
+        I2C_DRIVER_REQUIRED = yes
         COMMON_VPATH += $(DRIVER_PATH)/led
         SRC += snled27351.c
-        QUANTUM_LIB_SRC += i2c_master.c
     endif
 
     ifeq ($(strip $(RGB_MATRIX_DRIVER)), ws2812)
@@ -638,35 +618,6 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
     endif
 endif
 
-VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
-
-WS2812_DRIVER ?= bitbang
-ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
-    ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
-        $(call CATASTROPHIC_ERROR,Invalid WS2812_DRIVER,WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
-    endif
-
-    OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
-
-    SRC += ws2812_$(strip $(WS2812_DRIVER)).c
-
-    ifeq ($(strip $(PLATFORM)), CHIBIOS)
-        ifeq ($(strip $(WS2812_DRIVER)), pwm)
-            OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
-        endif
-    endif
-
-    # add extra deps
-    ifeq ($(strip $(WS2812_DRIVER)), i2c)
-        QUANTUM_LIB_SRC += i2c_master.c
-    endif
-endif
-
-ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
-    COMMON_VPATH += $(DRIVER_PATH)/led
-    SRC += apa102.c
-endif
-
 ifeq ($(strip $(CIE1931_CURVE)), yes)
     OPT_DEFS += -DUSE_CIE1931_CURVE
     LED_TABLES := yes
@@ -787,8 +738,8 @@ ifeq ($(strip $(HAPTIC_ENABLE)),yes)
         COMMON_VPATH += $(DRIVER_PATH)/haptic
 
         ifeq ($(strip $(HAPTIC_DRIVER)), drv2605l)
+            I2C_DRIVER_REQUIRED = yes
             SRC += drv2605l.c
-            QUANTUM_LIB_SRC += i2c_master.c
         endif
 
         ifeq ($(strip $(HAPTIC_DRIVER)), solenoid)
@@ -823,10 +774,10 @@ ifeq ($(strip $(OLED_ENABLE)), yes)
 
             OPT_DEFS += -DOLED_TRANSPORT_$(strip $(shell echo $(OLED_TRANSPORT) | tr '[:lower:]' '[:upper:]'))
             ifeq ($(strip $(OLED_TRANSPORT)), i2c)
-                QUANTUM_LIB_SRC += i2c_master.c
+                I2C_DRIVER_REQUIRED = yes
             endif
             ifeq ($(strip $(OLED_TRANSPORT)), spi)
-                QUANTUM_LIB_SRC += spi_master.c
+                SPI_DRIVER_REQUIRED = yes
             endif
         endif
     endif
@@ -834,9 +785,9 @@ endif
 
 ifeq ($(strip $(ST7565_ENABLE)), yes)
     OPT_DEFS += -DST7565_ENABLE
+    SPI_DRIVER_REQUIRED = yes
     COMMON_VPATH += $(DRIVER_PATH)/oled # For glcdfont.h
     COMMON_VPATH += $(DRIVER_PATH)/lcd
-    QUANTUM_LIB_SRC += spi_master.c
     SRC += st7565.c
 endif
 
@@ -974,18 +925,16 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
     SRC += outputselect.c
 
     ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le)
-        OPT_DEFS += -DHAL_USE_SPI=TRUE
+        SPI_DRIVER_REQUIRED = yes
         SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
         SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
         QUANTUM_LIB_SRC += analog.c
-        QUANTUM_LIB_SRC += spi_master.c
     endif
 
     ifeq ($(strip $(BLUETOOTH_DRIVER)), rn42)
-        OPT_DEFS += -DHAL_USE_SERIAL=TRUE
+        UART_DRIVER_REQUIRED = yes
         SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
         SRC += $(DRIVER_PATH)/bluetooth/rn42.c
-        QUANTUM_LIB_SRC += uart.c
     endif
 endif
 
@@ -1004,3 +953,47 @@ ifeq ($(strip $(OS_DETECTION_ENABLE)), yes)
         OPT_DEFS += -DOS_DETECTION_DEBUG_ENABLE
     endif
 endif
+
+VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
+
+WS2812_DRIVER ?= bitbang
+ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
+    ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
+        $(call CATASTROPHIC_ERROR,Invalid WS2812_DRIVER,WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
+    endif
+
+    OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
+    SRC += ws2812_$(strip $(WS2812_DRIVER)).c
+
+    ifeq ($(strip $(PLATFORM)), CHIBIOS)
+        ifeq ($(strip $(WS2812_DRIVER)), pwm)
+            OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
+        endif
+    endif
+
+    # add extra deps
+    ifeq ($(strip $(WS2812_DRIVER)), i2c)
+        I2C_DRIVER_REQUIRED = yes
+    endif
+endif
+
+ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
+    COMMON_VPATH += $(DRIVER_PATH)/led
+    SRC += apa102.c
+endif
+
+ifeq ($(strip $(I2C_DRIVER_REQUIRED)), yes)
+    OPT_DEFS += -DHAL_USE_I2C=TRUE
+    QUANTUM_LIB_SRC += i2c_master.c
+endif
+
+ifeq ($(strip $(SPI_DRIVER_REQUIRED)), yes)
+    OPT_DEFS += -DHAL_USE_SPI=TRUE
+    QUANTUM_LIB_SRC += spi_master.c
+endif
+
+ifeq ($(strip $(UART_DRIVER_REQUIRED)), yes)
+    OPT_DEFS += -DHAL_USE_SERIAL=TRUE
+    QUANTUM_LIB_SRC += uart.c
+endif

+ 12 - 0
docs/i2c_driver.md

@@ -2,6 +2,18 @@
 
 The I2C Master drivers used in QMK have a set of common functions to allow portability between MCUs.
 
+## Usage :id=usage
+
+In most cases, the I2C Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](feature_oled_driver.md).
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+I2C_DRIVER_REQUIRED = yes
+```
+
+You can then call the I2C API by including `i2c_master.h` in your code.
+
 ## I2C Addressing :id=note-on-i2c-addresses
 
 All of the addresses expected by this driver should be pushed to the upper 7 bits of the address byte. Setting

+ 12 - 0
docs/spi_driver.md

@@ -2,6 +2,18 @@
 
 The SPI Master drivers used in QMK have a set of common functions to allow portability between MCUs.
 
+## Usage :id=usage
+
+In most cases, the SPI Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](feature_oled_driver.md).
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+SPI_DRIVER_REQUIRED = yes
+```
+
+You can then call the SPI API by including `spi_master.h` in your code.
+
 ## AVR Configuration :id=avr-configuration
 
 No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` pins of your SPI devices to the matching pins on the MCU:

+ 12 - 0
docs/uart_driver.md

@@ -4,6 +4,18 @@ The UART drivers used in QMK have a set of common functions to allow portability
 
 Currently, this driver does not support enabling hardware flow control (the `RTS` and `CTS` pins) if available, but may do so in future.
 
+## Usage :id=usage
+
+In most cases, the UART driver code is automatically included if you are using a feature or driver which requires it.
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+UART_DRIVER_REQUIRED = yes
+```
+
+You can then call the UART API by including `uart.h` in your code.
+
 ## AVR Configuration :id=avr-configuration
 
 No special setup is required - just connect the `RX` and `TX` pins of your UART device to the opposite pins on the MCU:

+ 1 - 1
keyboards/3w6/rev1/rules.mk

@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
 LTO_ENABLE = no
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/3w6/rev2/rules.mk

@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
 LTO_ENABLE = no
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/40percentclub/ut47/rules.mk

@@ -13,4 +13,4 @@ AUDIO_ENABLE = no           # Audio output
 # custom matrix setup
 CUSTOM_MATRIX = yes
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/aeboards/satellite/rev1/rules.mk

@@ -18,4 +18,4 @@ COMMON_VPATH += $(DRIVER_PATH)/issi
 # project specific files
 SRC +=  drivers/led/issi/is31fl3731.c
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 0 - 2
keyboards/anavi/knob1/rules.mk

@@ -1,3 +1 @@
 OLED_ENABLE = yes
-
-OPT_DEFS += -DHAL_USE_I2C=TRUE

+ 0 - 2
keyboards/anavi/knobs3/rules.mk

@@ -1,3 +1 @@
 OLED_ENABLE = yes
-
-OPT_DEFS += -DHAL_USE_I2C=TRUE

+ 1 - 1
keyboards/bajjak/rules.mk

@@ -26,4 +26,4 @@ AUDIO_SUPPORTED = no
 
 # project specific files
 SRC += matrix.c 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/barleycorn_smd/rules.mk

@@ -14,4 +14,4 @@ AUDIO_ENABLE = no           # Audio output
 CUSTOM_MATRIX = lite
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/bioi/g60/rules.mk

@@ -18,5 +18,5 @@ BLUETOOTH_ENABLE = yes
 
 VIA_ENABLE = yes            # VIA support should be enabled here due to the main() loop will be compiled first.
 
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 SRC += bluetooth_custom.c

+ 1 - 1
keyboards/bioi/g60ble/rules.mk

@@ -15,5 +15,5 @@ LTO_ENABLE = yes
 
 BLUETOOTH_ENABLE = yes
 
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 SRC += bluetooth_custom.c

+ 1 - 1
keyboards/bioi/morgan65/rules.mk

@@ -18,5 +18,5 @@ BLUETOOTH_ENABLE = yes
 
 VIA_ENABLE = yes            # VIA support should be enabled here due to the main() loop will be compiled first.
 
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 SRC += bluetooth_custom.c

+ 1 - 1
keyboards/centromere/rules.mk

@@ -18,4 +18,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/clueboard/2x1800/2021/rules.mk

@@ -1 +1,2 @@
-QUANTUM_LIB_SRC += max7219.c spi_master.c
+SPI_DRIVER_REQUIRED = yes
+QUANTUM_LIB_SRC += max7219.c

+ 1 - 1
keyboards/converter/palm_usb/rules.mk

@@ -14,6 +14,6 @@ RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 CUSTOM_MATRIX = yes
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = converter/palm_usb/stowaway

+ 1 - 1
keyboards/converter/sun_usb/rules.mk

@@ -14,6 +14,6 @@ RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 CUSTOM_MATRIX = yes
 
 SRC += matrix.c led.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = converter/sun_usb/type5

+ 2 - 2
keyboards/dc01/left/rules.mk

@@ -11,5 +11,5 @@ BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 AUDIO_ENABLE = no           # Audio output
 
 CUSTOM_MATRIX = yes         # Use custom matrix
-SRC += matrix.c \
-       i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/dichotomy/rules.mk

@@ -14,4 +14,4 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover
 
 # # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/ergodox_ez/rules.mk

@@ -21,7 +21,7 @@ RGB_MATRIX_ENABLE = no # enable later
 # project specific files
 SRC += matrix.c \
 	   led_i2c.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 # Disable unsupported hardware
 AUDIO_SUPPORTED = no

+ 1 - 1
keyboards/ergodox_stm32/rules.mk

@@ -16,4 +16,4 @@ CUSTOM_MATRIX = yes # Custom matrix file
 UNICODE_ENABLE   = yes # Unicode
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/fallacy/rules.mk

@@ -14,4 +14,4 @@ AUDIO_ENABLE = no           # Audio output
 # project specific files
 SRC += indicators.c \
        drivers/led/issi/is31fl3731-simple.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/fc660c/rules.mk

@@ -11,7 +11,7 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover
 # Optimize size but this may cause error "relocation truncated to fit"
 #EXTRALDFLAGS = -Wl,--relax
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 CUSTOM_MATRIX = yes
 SRC += matrix.c ad5258.c

+ 1 - 1
keyboards/fc980c/rules.mk

@@ -11,7 +11,7 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover
 # Optimize size but this may cause error "relocation truncated to fit"
 #EXTRALDFLAGS = -Wl,--relax
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 CUSTOM_MATRIX = yes
 SRC += matrix.c ad5258.c

+ 1 - 1
keyboards/ferris/0_1/rules.mk

@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
 LTO_ENABLE = yes
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/ferris/0_2/rules.mk

@@ -16,6 +16,6 @@ NO_USB_STARTUP_CHECK = yes
 LTO_ENABLE = no
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = ferris/0_2/base

+ 1 - 1
keyboards/frobiac/blackbowl/rules.mk

@@ -1,7 +1,7 @@
 CUSTOM_MATRIX = lite
 
 # project specific files
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 SRC += matrix.c
 
 PS2_MOUSE_ENABLE = yes

+ 2 - 1
keyboards/gboards/ergotaco/rules.mk

@@ -7,4 +7,5 @@ COMMAND_ENABLE		= yes
 # know what you're doing.
 #
 # No touchy, capiche?
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/gboards/georgi/rules.mk

@@ -14,4 +14,5 @@ CUSTOM_MATRIX = yes
 STENO_ENABLE = yes
 LTO_ENABLE = yes
 
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/gboards/gergo/keymaps/colemak/rules.mk

@@ -18,7 +18,8 @@ DEBUG_MATRIX		 = no
 # know what you're doing.
 #
 # No touchy, capiche?
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes
 ifneq ($(strip $(BALLSTEP)),)
     OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
 endif

+ 2 - 1
keyboards/gboards/gergo/keymaps/default/rules.mk

@@ -18,7 +18,8 @@ DEBUG_MATRIX		 = yes
 # know what you're doing.
 #
 # No touchy, capiche?
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes
 ifneq ($(strip $(BALLSTEP)),)
     OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
 endif

+ 2 - 1
keyboards/gboards/gergo/keymaps/germ/rules.mk

@@ -18,7 +18,8 @@ DEBUG_MATRIX		 = no
 # know what you're doing.
 #
 # No touchy, capiche?
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes
 ifneq ($(strip $(BALLSTEP)),)
     OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
 endif

+ 2 - 1
keyboards/gboards/gergo/keymaps/gotham/rules.mk

@@ -18,7 +18,8 @@ DEBUG_MATRIX		 = yes
 # know what you're doing.
 #
 # No touchy, capiche?
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes
 ifneq ($(strip $(BALLSTEP)),)
     OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
 endif

+ 1 - 1
keyboards/gboards/gergo/rules.mk

@@ -8,4 +8,4 @@ COMMAND_ENABLE		= yes
 BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/gboards/gergoplex/rules.mk

@@ -13,4 +13,4 @@ AUDIO_ENABLE = no           # Audio output
 CUSTOM_MATRIX = yes
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/geistmaschine/macropod/rules.mk

@@ -2,4 +2,4 @@ CUSTOM_MATRIX = lite
 
 VPATH += drivers/gpio
 SRC += pca9555.c matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/glenpickle/chimera_ergo/rules.mk

@@ -14,4 +14,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/glenpickle/chimera_ls/rules.mk

@@ -14,7 +14,7 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 
 # Disable unsupported hardware
 RGBLIGHT_SUPPORTED = no

+ 1 - 1
keyboards/glenpickle/chimera_ortho/rules.mk

@@ -14,4 +14,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/glenpickle/chimera_ortho_plus/rules.mk

@@ -15,4 +15,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/handwired/dactyl/rules.mk

@@ -14,5 +14,5 @@ SWAP_HANDS_ENABLE       = yes # Allow swapping hands of keyboard
 RGBLIGHT_ENABLE         = no
 
 # project specific files
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 SRC += matrix.c

+ 1 - 1
keyboards/handwired/dqz11n1g/rules.mk

@@ -1,7 +1,7 @@
 # Keyboard matrix uses shift-registers read via SPI
 CUSTOM_MATRIX = lite
 SRC += matrix.c 
-QUANTUM_LIB_SRC += spi_master.c
+SPI_DRIVER_REQUIRED = yes
 
 # Build Options
 #   change yes to no to disable

+ 1 - 1
keyboards/handwired/dygma/raise/rules.mk

@@ -19,7 +19,7 @@ CUSTOM_MATRIX = lite
 # alternate usb endpoints.
 RAW_ENABLE = yes
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 SRC += matrix.c
 
 DEFAULT_FOLDER = handwired/dygma/raise/ansi

+ 2 - 2
keyboards/handwired/frenchdev/rules.mk

@@ -13,5 +13,5 @@ AUDIO_ENABLE = no           # Audio output
 RGBLIGHT_ENABLE = no
 
 # project specific files
-SRC = i2c_master.c \
-	  matrix.c
+SRC = matrix.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/handwired/lagrange/rules.mk

@@ -14,4 +14,5 @@ UNICODE_ENABLE = yes
 SPLIT_KEYBOARD = yes
 SPLIT_TRANSPORT = custom
 
-SRC += transport.c spi_master.c
+SRC += transport.c
+SPI_DRIVER_REQUIRED = yes

+ 0 - 2
keyboards/handwired/onekey/kb2040/rules.mk

@@ -1,3 +1 @@
 OLED_ENABLE = yes
-
-OPT_DEFS += -DHAL_USE_I2C=TRUE

+ 1 - 1
keyboards/handwired/onekey/keymaps/i2c_scanner/rules.mk

@@ -1,3 +1,3 @@
 CONSOLE_ENABLE = yes
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/handwired/pterodactyl/rules.mk

@@ -18,4 +18,4 @@ CUSTOM_MATRIX = yes
 BLUETOOTH_ENABLE = yes
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/hazel/bad_wings/rules.mk

@@ -3,7 +3,7 @@ CAPS_WORD_ENABLE = yes
 
 SRC += matrix.c
 
-QUANTUM_LIB_SRC += spi_master.c
+SPI_DRIVER_REQUIRED = yes
 CUSTOM_MATRIX = lite
 
 POINTING_DEVICE_DRIVER = cirque_pinnacle_spi

+ 1 - 1
keyboards/hotdox/rules.mk

@@ -15,5 +15,5 @@ RGBLIGHT_ENABLE         = no
 
 # project specific files
 SRC =  matrix.c     \
-	   i2c_master.c \
        left.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/hs60/v2/ansi/rules.mk

@@ -22,5 +22,5 @@ CIE1931_CURVE = yes
 SRC =	keyboards/wilba_tech/wt_main.c \
 		keyboards/wilba_tech/wt_rgb_backlight.c \
 		drivers/led/issi/is31fl3733.c \
-		quantum/color.c \
-		i2c_master.c
+		quantum/color.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/hs60/v2/hhkb/rules.mk

@@ -22,5 +22,5 @@ CIE1931_CURVE = yes
 SRC =	keyboards/wilba_tech/wt_main.c \
 		keyboards/wilba_tech/wt_rgb_backlight.c \
 		drivers/led/issi/is31fl3733.c \
-		quantum/color.c \
-		i2c_master.c
+		quantum/color.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/hs60/v2/iso/rules.mk

@@ -22,5 +22,5 @@ CIE1931_CURVE = yes
 SRC =	keyboards/wilba_tech/wt_main.c \
 		keyboards/wilba_tech/wt_rgb_backlight.c \
 		drivers/led/issi/is31fl3733.c \
-		quantum/color.c \
-		i2c_master.c
+		quantum/color.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/ibm/model_m/mschwingen/rules.mk

@@ -19,8 +19,8 @@ DYNAMIC_MACRO_ENABLE = yes
 UART_DEBUG = no
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c \
-                   spi_master.c
+UART_DRIVER_REQUIRED = yes
+SPI_DRIVER_REQUIRED = yes
 
 OPT_DEFS += -DSLEEP_LED_ENABLE # we need our own sleep callbacks to turn of WS2812 LEDs
 

+ 1 - 1
keyboards/ingrained/rules.mk

@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
 LTO_ENABLE = yes
 
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/kagizaraya/chidori/rules.mk

@@ -16,4 +16,4 @@ CUSTOM_MATRIX = lite
 # project specific files
 SRC += matrix.c
 SRC += board.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/keebwerk/mega/ansi/rules.mk

@@ -24,4 +24,4 @@ SRC +=  keyboards/wilba_tech/wt_main.c \
         keyboards/wilba_tech/wt_rgb_backlight.c \
         drivers/led/issi/is31fl3733.c \
         quantum/color.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/keyboardio/model01/rules.mk

@@ -9,7 +9,7 @@ COMMAND_ENABLE = no        # Commands for debug and configuration
 NKRO_ENABLE = no            # Enable N-Key Rollover
 
 CUSTOM_MATRIX = yes
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 SRC += leds.c \
 	   matrix.c
 

+ 1 - 1
keyboards/keyhive/honeycomb/rules.mk

@@ -14,4 +14,4 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover
 
 # # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/kprepublic/bm60hsrgb/rev2/rules.mk

@@ -17,4 +17,4 @@ WS2812_DRIVER_REQUIRED = yes
 
 COMMON_VPATH += $(DRIVER_PATH)/led/issi
 SRC += is31fl3733.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk

@@ -20,5 +20,5 @@ RGB_MATRIX_ENABLE = yes
 # here manually.
 COMMON_VPATH += $(DRIVER_PATH)/led/issi
 SRC += is31fl3733.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 WS2812_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk

@@ -19,5 +19,5 @@ RGB_MATRIX_ENABLE = yes
 # here manually.
 COMMON_VPATH += $(DRIVER_PATH)/led/issi
 SRC += is31fl3733.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 WS2812_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/ktec/ergodone/rules.mk

@@ -3,4 +3,4 @@ CUSTOM_MATRIX = lite
 
 VPATH += drivers/gpio
 SRC += mcp23018.c matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/matrix/abelx/rules.mk

@@ -45,4 +45,4 @@ NO_USB_STARTUP_CHECK = yes  # Disable initialization only when usb is plugged in
 CUSTOM_MATRIX = lite
 # project specific files
 SRC += matrix.c tca6424.c aw9523b.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/matrix/m20add/rules.mk

@@ -29,4 +29,4 @@ RGBLIGHT_ENABLE = yes
 CUSTOM_MATRIX = lite
 # project specific files
 SRC += matrix.c tca6424.c rgb_ring.c drivers/led/issi/is31fl3731.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/mechwild/sugarglider/rules.mk

@@ -13,7 +13,7 @@ CUSTOM_MATRIX = lite
 
 VPATH += drivers/gpio
 SRC += mcp23018.c matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = mechwild/sugarglider/wide_oled
 

+ 1 - 1
keyboards/mitosis/rules.mk

@@ -15,4 +15,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/molecule/rules.mk

@@ -15,4 +15,4 @@ AUDIO_ENABLE = no           # Audio output
 POINTING_DEVICE_ENABLE = yes
 POINTING_DEVICE_DRIVER = custom
 SRC += adns.c
-QUANTUM_LIB_SRC += spi_master.c
+SPI_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/moon/rules.mk

@@ -16,4 +16,4 @@ CUSTOM_MATRIX = yes
 
 VPATH += drivers/gpio
 SRC += pca9555.c matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/moonlander/rules.mk

@@ -17,6 +17,6 @@ RGB_MATRIX_ENABLE = yes
 
 #project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 MOUSE_SHARED_EP = no

+ 1 - 1
keyboards/mt/split75/rules.mk

@@ -12,4 +12,4 @@ RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 # custom matrix setup
 CUSTOM_MATRIX = lite
 SRC = matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/neson_design/700e/rules.mk

@@ -11,4 +11,5 @@ BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 RGBLIGHT_ENABLE = yes		# Enable keyboard RGB underglow
 NO_USB_STARTUP_CHECK = yes
 
-QUANTUM_LIB_SRC += i2c_master.c drivers/led/issi/is31fl3731.c
+QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/neson_design/n6/rules.mk

@@ -10,4 +10,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 RGBLIGHT_ENABLE = yes		# Enable keyboard RGB underglow
 
-QUANTUM_LIB_SRC += i2c_master.c drivers/led/issi/is31fl3731.c
+QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/novelkeys/nk65/rules.mk

@@ -22,7 +22,7 @@ CIE1931_CURVE = yes
 SRC =	keyboards/wilba_tech/wt_main.c \
 		keyboards/wilba_tech/wt_rgb_backlight.c \
 		drivers/led/issi/is31fl3733.c \
-		quantum/color.c \
-		i2c_master.c
+		quantum/color.c
+I2C_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = novelkeys/nk65/base

+ 2 - 2
keyboards/novelkeys/nk87/rules.mk

@@ -22,5 +22,5 @@ CIE1931_CURVE = yes
 SRC =	keyboards/wilba_tech/wt_main.c \
 		keyboards/wilba_tech/wt_rgb_backlight.c \
 		drivers/led/issi/is31fl3733.c \
-		quantum/color.c \
-		i2c_master.c
+		quantum/color.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/nullbitsco/nibble/rules.mk

@@ -19,4 +19,4 @@ SRC += matrix.c \
        common/bitc_led.c \
        big_led.c \
        common/remote_kb.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/nullbitsco/snap/rules.mk

@@ -19,5 +19,5 @@ CUSTOM_MATRIX = lite       # Split custom matrix
 # Project specific files
 SRC +=  common/bitc_led.c \
         common/remote_kb.c \
-        matrix.c \
-        uart.c
+        matrix.c
+UART_DRIVER_REQUIRED = yes

+ 2 - 2
keyboards/nullbitsco/tidbit/rules.mk

@@ -16,5 +16,5 @@ LTO_ENABLE = yes
 # Project specific files
 SRC += common/bitc_led.c \
     common/remote_kb.c
-QUANTUM_LIB_SRC += i2c_master.c \
-    uart.c
+I2C_DRIVER_REQUIRED = yes
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/oddforge/vea/rules.mk

@@ -12,4 +12,4 @@ RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 # custom matrix setup
 CUSTOM_MATRIX = lite
 SRC = matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 0 - 1
keyboards/phoenix/config.h

@@ -26,7 +26,6 @@
 /* Locking resynchronize hack */
 #define LOCKING_RESYNC_ENABLE
 
-#define HAL_USE_SERIAL TRUE
 #define SPLIT_HAND_PIN B9
 #define SERIAL_USART_DRIVER SD1
 #define SERIAL_USART_TX_PAL_MODE 7

+ 2 - 0
keyboards/phoenix/halconf.h

@@ -21,6 +21,8 @@
 
 #pragma once
 
+#define HAL_USE_SERIAL TRUE
+
 #define SERIAL_USB_BUFFERS_SIZE 256
 
 #include_next <halconf.h>

+ 1 - 1
keyboards/redox_w/rules.mk

@@ -14,4 +14,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/rgbkb/mun/rules.mk

@@ -2,7 +2,7 @@
 VPATH += keyboards/rgbkb/common
 SRC += touch_encoder.c
 SRC += common_oled.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 # Build Options
 #   change yes to no to disable

+ 1 - 1
keyboards/rgbkb/sol3/rules.mk

@@ -2,7 +2,7 @@
 VPATH += keyboards/rgbkb/common
 SRC += touch_encoder.c
 SRC += common_oled.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 
 # Build Options
 #   change yes to no to disable

+ 1 - 1
keyboards/satt/comet46/rules.mk

@@ -14,4 +14,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/sirius/uni660/rev1/rules.mk

@@ -15,4 +15,4 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/sirius/uni660/rev2/rules.mk

@@ -15,6 +15,6 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 
 DEFAULT_FOLDER = sirius/uni660/rev2/ansi

+ 1 - 1
keyboards/spaceholdings/nebula12/rules.mk

@@ -24,4 +24,4 @@ SRC +=  keyboards/wilba_tech/wt_main.c \
         keyboards/wilba_tech/wt_rgb_backlight.c \
         drivers/led/issi/is31fl3731.c \
         quantum/color.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/spaceholdings/nebula68/rules.mk

@@ -24,4 +24,4 @@ SRC +=  keyboards/wilba_tech/wt_main.c \
         keyboards/wilba_tech/wt_rgb_backlight.c \
         drivers/led/issi/is31fl3733.c \
         quantum/color.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/spiderisland/split78/rules.mk

@@ -12,4 +12,4 @@ RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
 # custom matrix setup
 CUSTOM_MATRIX = lite
 SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/switchplate/southpaw_65/rules.mk

@@ -17,4 +17,4 @@ CUSTOM_MATRIX = lite
 
 VPATH += drivers/gpio
 SRC += pca9555.c matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/sx60/rules.mk

@@ -13,5 +13,5 @@ RGBLIGHT_ENABLE = no
 CUSTOM_MATRIX = yes
 
 # project specific files
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
 SRC += matrix.c

+ 1 - 1
keyboards/system76/launch_1/rules.mk

@@ -23,4 +23,4 @@ LTO_ENABLE = yes            # Link-time optimization for smaller binary
 
 # Add System76 EC command interface as well as I2C and USB mux drivers
 SRC += system76_ec.c usb_mux.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/telophase/rules.mk

@@ -14,7 +14,7 @@ CUSTOM_MATRIX = lite
 
 # project specific files
 SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
 
 # Disable unsupported hardware
 RGBLIGHT_SUPPORTED = no

+ 1 - 1
keyboards/tkc/portico/rules.mk

@@ -19,4 +19,4 @@ SRC += keyboards/wilba_tech/wt_main.c \
        quantum/color.c \
        drivers/led/issi/is31fl3731.c
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/tkc/portico75/keymaps/via/rules.mk

@@ -9,4 +9,4 @@ SRC += keyboards/wilba_tech/wt_main.c \
        quantum/color.c \
        drivers/led/issi/is31fl3741.c
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 1 - 1
keyboards/torn/rules.mk

@@ -18,4 +18,4 @@ SRC += matrix.c \
     mcp23018.c \
     torn_encoder.c
 
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes

+ 2 - 1
keyboards/touchpad/rules.mk

@@ -12,4 +12,5 @@ AUDIO_ENABLE = no           # Audio output
 RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 CUSTOM_MATRIX = yes
 
-SRC += matrix.c i2c_master.c
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes

Some files were not shown because too many files changed in this diff