From 92fa07336cd7fcd578c31a8069cf955a4d601327 Mon Sep 17 00:00:00 2001
From: Drashna Jaelre <drashna@live.com>
Date: Fri, 20 Aug 2021 06:14:42 -0700
Subject: [PATCH] [Bug] Fix RGB/LED Matrix Suspend code (#14084)

---
 quantum/led_matrix/led_matrix.c | 5 +++--
 quantum/rgb_matrix/rgb_matrix.c | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c
index bcf258b260..9133849132 100644
--- a/quantum/led_matrix/led_matrix.c
+++ b/quantum/led_matrix/led_matrix.c
@@ -459,8 +459,9 @@ void led_matrix_init(void) {
 
 void led_matrix_set_suspend_state(bool state) {
 #ifdef LED_DISABLE_WHEN_USB_SUSPENDED
-    if (state && is_keyboard_master()) {
-        led_matrix_set_value_all(0);  // turn off all LEDs when suspending
+    if (state && !suspend_state && is_keyboard_master()) {  // only run if turning off, and only once
+        led_task_effect(0);                                 // turn off all LEDs when suspending
+        led_task_flush(0);                                  // and actually flash led state to LEDs
     }
     suspend_state = state;
 #endif
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index e5635ee039..8f00b40877 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -501,8 +501,9 @@ void rgb_matrix_init(void) {
 
 void rgb_matrix_set_suspend_state(bool state) {
 #ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
-    if (state) {
-        rgb_matrix_set_color_all(0, 0, 0);  // turn off all LEDs when suspending
+    if (state && !suspend_state) {  // only run if turning off, and only once
+        rgb_task_render(0);         // turn off all LEDs when suspending
+        rgb_task_flush(0);          // and actually flash led state to LEDs
     }
     suspend_state = state;
 #endif