From c0ba5e0c0d43ba8800feaf7f4a3f8b3a0637d849 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Sat, 24 Aug 2019 20:25:31 +0200
Subject: [PATCH] fix(max30001): Initialize mutex before RTOS startup

Signed-off-by: Rahix <rahix@rahix.de>
---
 epicardium/modules/hardware.c | 5 +++++
 epicardium/modules/max30001.c | 6 +++++-
 epicardium/modules/modules.h  | 2 ++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c
index 91a87471..17c70721 100644
--- a/epicardium/modules/hardware.c
+++ b/epicardium/modules/hardware.c
@@ -182,6 +182,11 @@ int hardware_early_init(void)
 	 */
 	dispatcher_mutex_init();
 
+	/*
+	 * MAX30001 mutex init
+	 */
+	max30001_mutex_init();
+
 	return 0;
 }
 
diff --git a/epicardium/modules/max30001.c b/epicardium/modules/max30001.c
index 5cc3ef36..811af4bf 100644
--- a/epicardium/modules/max30001.c
+++ b/epicardium/modules/max30001.c
@@ -370,10 +370,14 @@ static void max300001_interrupt_callback(void *_)
 }
 /* }}} */
 
+void max30001_mutex_init(void)
+{
+	max30001_mutex = xSemaphoreCreateMutexStatic(&max30001_mutex_data);
+}
+
 void vMAX30001Task(void *pvParameters)
 {
 	max30001_task_id = xTaskGetCurrentTaskHandle();
-	max30001_mutex   = xSemaphoreCreateMutexStatic(&max30001_mutex_data);
 
 	int lockret = hwlock_acquire(HWLOCK_SPI_ECG, pdMS_TO_TICKS(100));
 	if (lockret < 0) {
diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h
index 87124144..98b0d5e9 100644
--- a/epicardium/modules/modules.h
+++ b/epicardium/modules/modules.h
@@ -92,7 +92,9 @@ void disp_forcelock();
 #define BHI160_MUTEX_WAIT_MS          50
 void vBhi160Task(void *pvParameters);
 
+/* ---------- MAX30001 ----------------------------------------------------- */
 #define MAX30001_MUTEX_WAIT_MS          50
 void vMAX30001Task(void *pvParameters);
+void max30001_mutex_init(void);
 
 #endif /* MODULES_H */
-- 
GitLab