From efa28d0f5cca55b0dfecaddd0860ec3dfeab8bb0 Mon Sep 17 00:00:00 2001
From: fauxpark <fauxpark@gmail.com>
Date: Tue, 5 Nov 2019 11:05:03 +1100
Subject: [PATCH] Convert some PS2AVRGB boards to I2C WS2812 driver (#7241)

* Convert some PS2AVRGB boards to I2C WS2812 driver

* Fix Travis failure for bface
---
 keyboards/ares/ares.c                     | 72 ++--------------------
 keyboards/ares/rules.mk                   | 19 +-----
 keyboards/donutcables/budget96/budget96.c | 71 +++-------------------
 keyboards/donutcables/budget96/rules.mk   | 20 +------
 keyboards/eve/meteor/meteor.c             | 50 ++--------------
 keyboards/eve/meteor/rules.mk             | 19 +-----
 keyboards/exclusive/e6v2/le_bmc/le_bmc.c  | 51 ++--------------
 keyboards/exclusive/e6v2/le_bmc/rules.mk  |  3 +-
 keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c  | 63 +++----------------
 keyboards/exclusive/e6v2/oe_bmc/rules.mk  |  3 +-
 keyboards/exent/exent.c                   | 73 -----------------------
 keyboards/exent/rules.mk                  |  4 +-
 keyboards/facew/facew.c                   | 54 ++++++-----------
 keyboards/facew/rules.mk                  | 20 +------
 keyboards/ft/mars80/mars80.c              | 52 ++--------------
 keyboards/ft/mars80/rules.mk              | 19 +-----
 keyboards/gray_studio/hb85/hb85.c         | 40 +++----------
 keyboards/gray_studio/hb85/rules.mk       | 19 +-----
 keyboards/jj4x4/jj4x4.c                   | 37 ------------
 keyboards/jj4x4/rules.mk                  | 19 +-----
 keyboards/kbdfans/kbdpad/mk1/mk1.c        |  2 +-
 keyboards/kbdfans/kbdpad/mk1/rules.mk     | 15 -----
 keyboards/panc60/panc60.c                 | 55 ++++++-----------
 keyboards/panc60/rules.mk                 | 20 +------
 keyboards/pearl/pearl.c                   | 52 ++--------------
 keyboards/pearl/rules.mk                  | 20 +------
 keyboards/percent/skog_lite/rules.mk      | 19 +-----
 keyboards/percent/skog_lite/skog_lite.c   | 49 ++-------------
 keyboards/singa/rules.mk                  | 19 +-----
 keyboards/singa/singa.c                   | 49 ++-------------
 keyboards/tgr/alice/alice.c               | 39 +-----------
 keyboards/tgr/alice/rules.mk              | 19 +-----
 keyboards/tgr/jane/jane.c                 | 51 ++--------------
 keyboards/tgr/jane/rules.mk               | 19 +-----
 keyboards/unikorn/readme.md               |  1 -
 keyboards/unikorn/rules.mk                | 19 +-----
 keyboards/unikorn/unikorn.c               | 50 ++--------------
 keyboards/winkeyless/bface/bface.c        | 49 ++-------------
 keyboards/winkeyless/bface/bface.h        |  4 +-
 keyboards/winkeyless/bface/rules.mk       | 20 +------
 40 files changed, 122 insertions(+), 1157 deletions(-)

diff --git a/keyboards/ares/ares.c b/keyboards/ares/ares.c
index 85c7435ed..07276491c 100644
--- a/keyboards/ares/ares.c
+++ b/keyboards/ares/ares.c
@@ -17,50 +17,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "ares.h"
 
-#ifdef RGBLIGHT_ENABLE
-
-#include <string.h>
-#include "i2c_master.h"
-#include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
-  i2c_init();
-  // call user level keymaps, if any
-  matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
-  if (!rgblight_config.enable) {
-    memset(led, 0, 3 * RGBLED_NUM);
-  }
-
-  i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
-  // if LEDs were previously on before poweroff, turn them back on
-  if (rgb_init == false && rgblight_config.enable) {
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    rgb_init = true;
-  }
-
-  rgblight_task();
-  matrix_scan_user();
-}
-
-#endif
-
 #ifdef BACKLIGHT_ENABLE
 void backlight_init_ports(void) {
-    setPinOutput(D0);
-    setPinOutput(D1);
-    setPinOutput(D4);
-    setPinOutput(D6);
+	setPinOutput(D0);
+	setPinOutput(D1);
+	setPinOutput(D4);
+	setPinOutput(D6);
 }
 
 void backlight_set(uint8_t level) {
@@ -79,29 +41,3 @@ void backlight_set(uint8_t level) {
 	}
 }
 #endif
-
-// Optional override functions below.
-// You can leave any or all of these undefined.
-// These are only required if you want to perform custom actions.
-
-/*
-void matrix_init_kb(void) {
-  // put your keyboard start-up code here
-  // runs once when the firmware starts up
-  matrix_init_user();
-}
-void matrix_scan_kb(void) {
-  // put your looping keyboard code here
-  // runs every cycle (a lot)
-  matrix_scan_user();
-}
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-  // put your per-action keyboard code here
-  // runs for every action, just before processing by the firmware
-  return process_record_user(keycode, record);
-}
-void led_set_kb(uint8_t usb_led) {
-  // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-  led_set_user(usb_led);
-}
-*/
\ No newline at end of file
diff --git a/keyboards/ares/rules.mk b/keyboards/ares/rules.mk
index 3ac90cf97..58d36bc67 100644
--- a/keyboards/ares/rules.mk
+++ b/keyboards/ares/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = no
 RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/donutcables/budget96/budget96.c b/keyboards/donutcables/budget96/budget96.c
index 2fc826f09..e9125a3e6 100644
--- a/keyboards/donutcables/budget96/budget96.c
+++ b/keyboards/donutcables/budget96/budget96.c
@@ -13,61 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "budget96.h"
-
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
 
+#include "budget96.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -76,25 +23,25 @@ void backlight_init_ports(void) {
     setPinOutput(D4);
     setPinOutput(D6);
 
-     // turn RGB LEDs on
+    // turn backlight LEDs on
     writePinHigh(D0);
     writePinHigh(D1);
     writePinHigh(D4);
     writePinHigh(D6);
 }
 
- void backlight_set(uint8_t level) {
-	if (level == 0) {
-        // turn RGB LEDs off
+void backlight_set(uint8_t level) {
+    if (level == 0) {
+        // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
-        // turn RGB LEDs on
+    } else {
+        // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
- }
+    }
+}
diff --git a/keyboards/donutcables/budget96/rules.mk b/keyboards/donutcables/budget96/rules.mk
index 4f9e0e412..54328d248 100644
--- a/keyboards/donutcables/budget96/rules.mk
+++ b/keyboards/donutcables/budget96/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,9 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
diff --git a/keyboards/eve/meteor/meteor.c b/keyboards/eve/meteor/meteor.c
index 1bd47ef9e..f5ecbad02 100644
--- a/keyboards/eve/meteor/meteor.c
+++ b/keyboards/eve/meteor/meteor.c
@@ -14,49 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "meteor.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -73,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/eve/meteor/rules.mk b/keyboards/eve/meteor/rules.mk
index e43baee5c..e57c21c85 100644
--- a/keyboards/eve/meteor/rules.mk
+++ b/keyboards/eve/meteor/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-QUANTUM_LIB_SRC = i2c_master.c
diff --git a/keyboards/exclusive/e6v2/le_bmc/le_bmc.c b/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
index 5f7ef25b2..e3b81c81b 100644
--- a/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
+++ b/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
@@ -13,49 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
 
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "le_bmc.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
-}
\ No newline at end of file
+    }
+}
diff --git a/keyboards/exclusive/e6v2/le_bmc/rules.mk b/keyboards/exclusive/e6v2/le_bmc/rules.mk
index 13a5f1b89..106044ba7 100644
--- a/keyboards/exclusive/e6v2/le_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/le_bmc/rules.mk
@@ -24,7 +24,7 @@ SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 NKRO_ENABLE = no            # USB Nkey Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
 MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
 UNICODE_ENABLE = no         # Unicode
@@ -34,4 +34,3 @@ FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
 HD44780_ENABLE = no 		# Enable support for HD44780 based LCDs (+400)
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
diff --git a/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c b/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
index 5357550ae..97d354653 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
+++ b/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
@@ -13,57 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "oe_bmc.h"
-#include "rgblight.h"
-#include "i2c_master.h"
-
-void matrix_init_kb(void) {
-	// put your keyboard start-up code here
-	// runs once when the firmware starts up
-
-	matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-	// put your looping keyboard code here
-	// runs every cycle (a lot)
-
-	matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-	// put your per-action keyboard code here
-	// runs for every action, just before processing by the firmware
-
-	return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
-	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
 
-	led_set_user(usb_led);
-}
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "oe_bmc.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,7 +23,7 @@ void backlight_init_ports(void) {
     setPinOutput(D4);
     setPinOutput(D6);
 
-    // turn RGB LEDs on
+    // turn backlight LEDs on
     writePinHigh(D0);
     writePinHigh(D1);
     writePinHigh(D4);
@@ -80,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
-        // turn RGB LEDs off
+    if (level == 0) {
+        // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
-        // turn RGB LEDs on
+    } else {
+        // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/exclusive/e6v2/oe_bmc/rules.mk b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
index 13a5f1b89..106044ba7 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
@@ -24,7 +24,7 @@ SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 NKRO_ENABLE = no            # USB Nkey Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
 MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
 UNICODE_ENABLE = no         # Unicode
@@ -34,4 +34,3 @@ FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
 HD44780_ENABLE = no 		# Enable support for HD44780 based LCDs (+400)
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
diff --git a/keyboards/exent/exent.c b/keyboards/exent/exent.c
index 00cd20aff..82066f7e8 100644
--- a/keyboards/exent/exent.c
+++ b/keyboards/exent/exent.c
@@ -15,76 +15,3 @@
  */
 
 #include "exent.h"
-
-#ifdef RGBLIGHT_ENABLE
-
-#    include <string.h>
-#    include "i2c_master.h"
-#    include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
-    i2c_init();
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        memset(led, 0, 3 * RGBLED_NUM);
-    }
-
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
-    // if LEDs were previously on before poweroff, turn them back on
-    if (rgb_init == false && rgblight_config.enable) {
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-        rgb_init = true;
-    }
-
-    rgblight_task();
-    matrix_scan_user();
-}
-
-#endif
-
-// Optional override functions below.
-// You can leave any or all of these undefined.
-// These are only required if you want to perform custom actions.
-
-/*
-
-void matrix_init_kb(void) {
-  // put your keyboard start-up code here
-  // runs once when the firmware starts up
-
-  matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-  // put your looping keyboard code here
-  // runs every cycle (a lot)
-
-  matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-  // put your per-action keyboard code here
-  // runs for every action, just before processing by the firmware
-
-  return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
-  // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
-  led_set_user(usb_led);
-}
-
-*/
diff --git a/keyboards/exent/rules.mk b/keyboards/exent/rules.mk
index a49f32058..10442b31b 100644
--- a/keyboards/exent/rules.mk
+++ b/keyboards/exent/rules.mk
@@ -19,10 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = no
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-SRC += i2c_master.c
-
 LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/facew/facew.c b/keyboards/facew/facew.c
index 7ec56548b..fa58f0cf7 100644
--- a/keyboards/facew/facew.c
+++ b/keyboards/facew/facew.c
@@ -16,51 +16,31 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "facew.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
 
 void backlight_init_ports(void) {
-	DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
-	PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+	setPinOutput(D0);
+	setPinOutput(D1);
+	setPinOutput(D4);
+	setPinOutput(D6);
+
+	writePinLow(D0);
+	writePinLow(D1);
+	writePinLow(D4);
+	writePinLow(D6);
 }
 
 void backlight_set(uint8_t level) {
 	if (level == 0) {
 		// Turn out the lights
-		PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+		writePinLow(D0);
+		writePinLow(D1);
+		writePinLow(D4);
+		writePinLow(D6);
 	} else {
 		// Turn on the lights
-		PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+		writePinHigh(D0);
+		writePinHigh(D1);
+		writePinHigh(D4);
+		writePinHigh(D6);
 	}
 }
diff --git a/keyboards/facew/rules.mk b/keyboards/facew/rules.mk
index c9942e369..c4117d15d 100644
--- a/keyboards/facew/rules.mk
+++ b/keyboards/facew/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,11 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-# custom matrix setup
-SRC = i2c_master.c
-
 LAYOUTS = 60_ansi
diff --git a/keyboards/ft/mars80/mars80.c b/keyboards/ft/mars80/mars80.c
index 754345082..8e5127408 100644
--- a/keyboards/ft/mars80/mars80.c
+++ b/keyboards/ft/mars80/mars80.c
@@ -16,50 +16,6 @@
 
 #include "mars80.h"
 
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
     setPinOutput(D0);
@@ -75,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
-}
\ No newline at end of file
+    }
+}
diff --git a/keyboards/ft/mars80/rules.mk b/keyboards/ft/mars80/rules.mk
index f1c79b196..de85d62c8 100644
--- a/keyboards/ft/mars80/rules.mk
+++ b/keyboards/ft/mars80/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-SRC += i2c_master.c
-
 LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/gray_studio/hb85/hb85.c b/keyboards/gray_studio/hb85/hb85.c
index 3e4202358..21562b9e0 100644
--- a/keyboards/gray_studio/hb85/hb85.c
+++ b/keyboards/gray_studio/hb85/hb85.c
@@ -16,33 +16,7 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <string.h>
-
-#include "rgblight.h"
-
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "hb85.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -51,7 +25,7 @@ void backlight_init_ports(void) {
     setPinOutput(D4);
     setPinOutput(D6);
 
-    // turn RGB LEDs on
+    // turn backlight LEDs on
     writePinHigh(D0);
     writePinHigh(D1);
     writePinHigh(D4);
@@ -59,17 +33,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
-        // turn RGB LEDs off
+    if (level == 0) {
+        // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
-        // turn RGB LEDs on
+    } else {
+        // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/gray_studio/hb85/rules.mk b/keyboards/gray_studio/hb85/rules.mk
index 5339aad89..ec57b03dc 100644
--- a/keyboards/gray_studio/hb85/rules.mk
+++ b/keyboards/gray_studio/hb85/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 fcoury <felipe.coury@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = no
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/jj4x4/jj4x4.c b/keyboards/jj4x4/jj4x4.c
index 265508b2d..6330c89de 100644
--- a/keyboards/jj4x4/jj4x4.c
+++ b/keyboards/jj4x4/jj4x4.c
@@ -17,40 +17,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "jj4x4.h"
-
-#ifdef RGBLIGHT_ENABLE
-
-#include <string.h>
-#include "i2c_master.h"
-#include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
-  i2c_init();
-  // call user level keymaps, if any
-  matrix_init_user();
-}
-// custom RGB driver
-void rgblight_set(void) {
-  if (!rgblight_config.enable) {
-    memset(led, 0, 3 * RGBLED_NUM);
-  }
-
-  i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
-  // if LEDs were previously on before poweroff, turn them back on
-  if (rgb_init == false && rgblight_config.enable) {
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    rgb_init = true;
-  }
-
-  rgblight_task();
-  matrix_scan_user();
-}
-
-#endif
diff --git a/keyboards/jj4x4/rules.mk b/keyboards/jj4x4/rules.mk
index fedc525f8..aa74cc7c9 100644
--- a/keyboards/jj4x4/rules.mk
+++ b/keyboards/jj4x4/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -40,7 +25,7 @@ SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 NKRO_ENABLE = no            # USB Nkey Rollover
 BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
 RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
@@ -48,6 +33,4 @@ AUDIO_ENABLE = no           # Audio output on port C6
 FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
 HD44780_ENABLE = no 		# Enable support for HD44780 based LCDs (+400)
 
-SRC += i2c_master.c
-
 LAYOUTS = ortho_4x4
diff --git a/keyboards/kbdfans/kbdpad/mk1/mk1.c b/keyboards/kbdfans/kbdpad/mk1/mk1.c
index 71a47b7ba..aa781875c 100644
--- a/keyboards/kbdfans/kbdpad/mk1/mk1.c
+++ b/keyboards/kbdfans/kbdpad/mk1/mk1.c
@@ -14,7 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "quantum.h"
+#include "mk1.h"
 
 #define NUMLOCK_PIN D0
 
diff --git a/keyboards/kbdfans/kbdpad/mk1/rules.mk b/keyboards/kbdfans/kbdpad/mk1/rules.mk
index f1f740760..b4cd885b1 100644
--- a/keyboards/kbdfans/kbdpad/mk1/rules.mk
+++ b/keyboards/kbdfans/kbdpad/mk1/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
diff --git a/keyboards/panc60/panc60.c b/keyboards/panc60/panc60.c
index 16674d30d..6bd16a4bd 100644
--- a/keyboards/panc60/panc60.c
+++ b/keyboards/panc60/panc60.c
@@ -13,52 +13,33 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "panc60.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
 
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
+#include "panc60.h"
 
 void backlight_init_ports(void) {
-	DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
-	PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+	setPinOutput(D0);
+	setPinOutput(D1);
+	setPinOutput(D4);
+	setPinOutput(D6);
+
+	writePinLow(D0);
+	writePinLow(D1);
+	writePinLow(D4);
+	writePinLow(D6);
 }
 
 void backlight_set(uint8_t level) {
 	if (level == 0) {
 		// Turn out the lights
-		PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+		writePinLow(D0);
+		writePinLow(D1);
+		writePinLow(D4);
+		writePinLow(D6);
 	} else {
 		// Turn on the lights
-		PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+		writePinHigh(D0);
+		writePinHigh(D1);
+		writePinHigh(D4);
+		writePinHigh(D6);
 	}
 }
diff --git a/keyboards/panc60/rules.mk b/keyboards/panc60/rules.mk
index cdacb4be7..d3ed4998b 100644
--- a/keyboards/panc60/rules.mk
+++ b/keyboards/panc60/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,11 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = no
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-# custom matrix setup
-SRC = i2c_master.c
-
 LAYOUTS = 60_ansi 60_hhkb
diff --git a/keyboards/pearl/pearl.c b/keyboards/pearl/pearl.c
index c8cd8a860..093b5fdd9 100644
--- a/keyboards/pearl/pearl.c
+++ b/keyboards/pearl/pearl.c
@@ -15,49 +15,7 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "pearl.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -74,17 +32,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
-}
\ No newline at end of file
+    }
+}
diff --git a/keyboards/pearl/rules.mk b/keyboards/pearl/rules.mk
index eacf8bb2c..79b783e42 100644
--- a/keyboards/pearl/rules.mk
+++ b/keyboards/pearl/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,9 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
diff --git a/keyboards/percent/skog_lite/rules.mk b/keyboards/percent/skog_lite/rules.mk
index ed29c47f2..1d2372c77 100644
--- a/keyboards/percent/skog_lite/rules.mk
+++ b/keyboards/percent/skog_lite/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-SRC = i2c_master.c
-
 LAYOUTS = tkl_ansi
diff --git a/keyboards/percent/skog_lite/skog_lite.c b/keyboards/percent/skog_lite/skog_lite.c
index a77fc9258..a6c00f529 100644
--- a/keyboards/percent/skog_lite/skog_lite.c
+++ b/keyboards/percent/skog_lite/skog_lite.c
@@ -13,49 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
 
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "skog_lite.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/singa/rules.mk b/keyboards/singa/rules.mk
index df2a59e90..54328d248 100644
--- a/keyboards/singa/rules.mk
+++ b/keyboards/singa/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC = i2c_master.c
diff --git a/keyboards/singa/singa.c b/keyboards/singa/singa.c
index ee49ba65c..144065d02 100644
--- a/keyboards/singa/singa.c
+++ b/keyboards/singa/singa.c
@@ -13,49 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
 
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "singa.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/tgr/alice/alice.c b/keyboards/tgr/alice/alice.c
index adb88fef0..39aed2cf5 100644
--- a/keyboards/tgr/alice/alice.c
+++ b/keyboards/tgr/alice/alice.c
@@ -15,41 +15,4 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <string.h>
-
-#include "rgblight.h"
-
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
-  i2c_init();
-  // call user level keymaps, if any
-  matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
-  if (!rgblight_config.enable) {
-    memset(led, 0, 3 * RGBLED_NUM);
-  }
-
-  i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
-  // if LEDs were previously on before poweroff, turn them back on
-  if (rgb_init == false && rgblight_config.enable) {
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    rgb_init = true;
-  }
-
-  rgblight_task();
-  matrix_scan_user();
-}
-#endif
+#include "alice.h"
diff --git a/keyboards/tgr/alice/rules.mk b/keyboards/tgr/alice/rules.mk
index aa141f7c3..530e8ea32 100644
--- a/keyboards/tgr/alice/rules.mk
+++ b/keyboards/tgr/alice/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = no
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/tgr/jane/jane.c b/keyboards/tgr/jane/jane.c
index c17cb0084..4ab0b3007 100644
--- a/keyboards/tgr/jane/jane.c
+++ b/keyboards/tgr/jane/jane.c
@@ -13,49 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "i2c_master.h"
-#include "quantum.h"
 
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "jane.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
-}
\ No newline at end of file
+    }
+}
diff --git a/keyboards/tgr/jane/rules.mk b/keyboards/tgr/jane/rules.mk
index f2b488306..c6a26d4a4 100644
--- a/keyboards/tgr/jane/rules.mk
+++ b/keyboards/tgr/jane/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
-QUANTUM_LIB_SRC = i2c_master.c
-
 LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/unikorn/readme.md b/keyboards/unikorn/readme.md
index 3175cddc2..1f8b16d64 100644
--- a/keyboards/unikorn/readme.md
+++ b/keyboards/unikorn/readme.md
@@ -18,7 +18,6 @@ To enable RGB lighting support, install the necessary components and set RGBLIGH
 
 ```
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
 ```
 
 
diff --git a/keyboards/unikorn/rules.mk b/keyboards/unikorn/rules.mk
index d4f4d2aaf..e57c21c85 100644
--- a/keyboards/unikorn/rules.mk
+++ b/keyboards/unikorn/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
 BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC = i2c_master.c
diff --git a/keyboards/unikorn/unikorn.c b/keyboards/unikorn/unikorn.c
index 1bd47ef9e..70bc5a988 100644
--- a/keyboards/unikorn/unikorn.c
+++ b/keyboards/unikorn/unikorn.c
@@ -14,49 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "unikorn.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -73,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/winkeyless/bface/bface.c b/keyboards/winkeyless/bface/bface.c
index 1c83be4b8..8cb5b600c 100644
--- a/keyboards/winkeyless/bface/bface.c
+++ b/keyboards/winkeyless/bface/bface.c
@@ -13,49 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
 
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
-    if (!rgblight_config.enable) {
-        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
-            led[i].r = 0;
-            led[i].g = 0;
-            led[i].b = 0;
-        }
-    }
-
-    i2c_init();
-    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    if (rgblight_config.enable) {
-        i2c_init();
-        i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-    }
-#endif
-    // call user level keymaps, if any
-    matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_task();
-#endif
-    matrix_scan_user();
-    /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "bface.h"
 
 void backlight_init_ports(void) {
     // initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
 }
 
 void backlight_set(uint8_t level) {
-	if (level == 0) {
+    if (level == 0) {
         // turn backlight LEDs off
         writePinLow(D0);
         writePinLow(D1);
         writePinLow(D4);
         writePinLow(D6);
-	} else {
+    } else {
         // turn backlight LEDs on
         writePinHigh(D0);
         writePinHigh(D1);
         writePinHigh(D4);
         writePinHigh(D6);
-	}
+    }
 }
diff --git a/keyboards/winkeyless/bface/bface.h b/keyboards/winkeyless/bface/bface.h
index f7a3b9521..bca0c24c1 100644
--- a/keyboards/winkeyless/bface/bface.h
+++ b/keyboards/winkeyless/bface/bface.h
@@ -18,9 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #pragma once
 
-#include "quantum_keycodes.h"
-#include "keycode.h"
-#include "action.h"
+#include "quantum.h"
 
 #define LAYOUT_60_ansi( \
   K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \
diff --git a/keyboards/winkeyless/bface/rules.mk b/keyboards/winkeyless/bface/rules.mk
index 12b502785..506e37ac9 100644
--- a/keyboards/winkeyless/bface/rules.mk
+++ b/keyboards/winkeyless/bface/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# 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/>.
-
 # MCU name
 MCU = atmega32a
 
@@ -36,9 +21,6 @@ BACKLIGHT_ENABLE = yes
 BACKLIGHT_CUSTOM_DRIVER = yes
 BACKLIGHT_BREATHING = no
 RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
 
 OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
-- 
2.39.5