diff --git a/lib/drivers/SK6805.c b/lib/drivers/SK6805.c index 0133a39eb..63178cfd2 100644 --- a/lib/drivers/SK6805.c +++ b/lib/drivers/SK6805.c @@ -60,7 +60,7 @@ void SK6805_set_led_color(uint8_t led_index, uint8_t r, uint8_t g, uint8_t b) { void SK6805_update() { FURI_LOG_T(TAG, "update"); SK6805_init(); - furi_kernel_lock(); + FURI_CRITICAL_ENTER(); uint32_t end; // Sequential sending LEDs for(uint8_t lednumber = 0; lednumber < SK6805_LED_COUNT; lednumber++) { @@ -100,5 +100,5 @@ void SK6805_update() { } } } - furi_kernel_unlock(); + FURI_CRITICAL_EXIT(); } diff --git a/lib/drivers/rgb_backlight.c b/lib/drivers/rgb_backlight.c index 7fcb3a472..097fa30de 100644 --- a/lib/drivers/rgb_backlight.c +++ b/lib/drivers/rgb_backlight.c @@ -228,6 +228,9 @@ void rgb_backlight_reconfigure(bool enabled) { rgb_state.rainbow_hsv.s = rgb_settings.rainbow_saturation; rgb_backlight_update(rgb_state.last_brightness, false); + if(rgb_state.enabled && rgb_settings.rainbow_mode == RGBBacklightRainbowModeOff) + SK6805_update(); + furi_check(furi_mutex_release(rgb_state.mutex) == FuriStatusOk); } @@ -286,8 +289,10 @@ void rgb_backlight_update(uint8_t brightness, bool tick) { return; } + bool brightness_changed = brightness != rgb_state.last_brightness; rgb_state.last_brightness = brightness; - SK6805_update(); + if(rgb_settings.rainbow_mode != RGBBacklightRainbowModeOff || brightness_changed) + SK6805_update(); furi_check(furi_mutex_release(rgb_state.mutex) == FuriStatusOk); }