From de0e4539d9374296e5ea44c202b4ffae25758e93 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Sat, 14 Sep 2019 19:46:35 +0200
Subject: [PATCH] fix(leds): Add a few missing instances of locking

Signed-off-by: Rahix <rahix@rahix.de>
---
 epicardium/modules/leds.c | 36 ++++++++++++++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)

diff --git a/epicardium/modules/leds.c b/epicardium/modules/leds.c
index d3d3e0ea..ad08487d 100644
--- a/epicardium/modules/leds.c
+++ b/epicardium/modules/leds.c
@@ -95,21 +95,41 @@ void epic_leds_set_all_hsv(float *pattern_ptr, uint8_t len)
 void epic_leds_dim_top(uint8_t value)
 {
 	leds_set_dim_top(value);
-	if (personal_state_enabled() == 0)
+	if (personal_state_enabled() == 0) {
+		while (hwlock_acquire(HWLOCK_I2C, pdMS_TO_TICKS(1)) < 0) {
+			vTaskDelay(pdMS_TO_TICKS(1));
+		}
+
 		leds_update();
+
+		hwlock_release(HWLOCK_I2C);
+	}
 }
 
 void epic_leds_dim_bottom(uint8_t value)
 {
 	leds_set_dim_bottom(value);
-	if (personal_state_enabled() == 0)
+	if (personal_state_enabled() == 0) {
+		while (hwlock_acquire(HWLOCK_I2C, pdMS_TO_TICKS(1)) < 0) {
+			vTaskDelay(pdMS_TO_TICKS(1));
+		}
+
 		leds_update();
+
+		hwlock_release(HWLOCK_I2C);
+	}
 }
 
 void epic_leds_set_rocket(int led, uint8_t value)
 {
+	while (hwlock_acquire(HWLOCK_I2C, pdMS_TO_TICKS(1)) < 0) {
+		vTaskDelay(pdMS_TO_TICKS(1));
+	}
+
 	value = value > 31 ? 31 : value;
 	pmic_set_led(led, value);
+
+	hwlock_release(HWLOCK_I2C);
 }
 
 int epic_leds_get_rocket(int led)
@@ -126,7 +146,13 @@ int epic_leds_get_rocket(int led)
 
 void epic_set_flashlight(bool power)
 {
+	while (hwlock_acquire(HWLOCK_I2C, pdMS_TO_TICKS(1)) < 0) {
+		vTaskDelay(pdMS_TO_TICKS(1));
+	}
+
 	leds_flashlight(power);
+
+	hwlock_release(HWLOCK_I2C);
 }
 
 void epic_leds_update(void)
@@ -136,7 +162,13 @@ void epic_leds_update(void)
 
 void epic_leds_set_powersave(bool eco)
 {
+	while (hwlock_acquire(HWLOCK_I2C, pdMS_TO_TICKS(1)) < 0) {
+		vTaskDelay(pdMS_TO_TICKS(1));
+	}
+
 	leds_powersave(eco);
+
+	hwlock_release(HWLOCK_I2C);
 }
 
 void epic_leds_set_gamma_table(uint8_t rgb_channel, uint8_t gamma_table[256])
-- 
GitLab