summaryrefslogtreecommitdiff
path: root/src/drivers/display.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-29 15:17:10 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-29 15:17:32 +1000
commitba940baa0aff05ad26d265f32f1d185a1f410373 (patch)
treeaca7e4ef8049039b7eb92160732d711db15873cf /src/drivers/display.cpp
parentc53802f308f57f0d829f5a02baf9e9fe8219c301 (diff)
downloadtangara-fw-ba940baa0aff05ad26d265f32f1d185a1f410373.tar.gz
Add a lock around the SPI bus
This seems to have been the cause of recurring deadlocks that have been difficult to repo.
Diffstat (limited to 'src/drivers/display.cpp')
-rw-r--r--src/drivers/display.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/drivers/display.cpp b/src/drivers/display.cpp
index 48310074..a06320f4 100644
--- a/src/drivers/display.cpp
+++ b/src/drivers/display.cpp
@@ -34,6 +34,7 @@
#include "gpios.hpp"
#include "misc/lv_color.h"
#include "soc/soc.h"
+#include "spi.hpp"
#include "tasks.hpp"
static const char* kTag = "DISPLAY";
@@ -267,8 +268,12 @@ void Display::SendTransaction(TransactionType type,
gpio_set_level(kDisplayDr, type);
- // TODO(jacqueline): Handle these errors.
- esp_err_t ret = spi_device_transmit(handle_, &sTransaction);
+ esp_err_t ret;
+ {
+ auto lock = drivers::acquire_spi();
+ // TODO(jacqueline): Handle these errors.
+ ret = spi_device_transmit(handle_, &sTransaction);
+ }
ESP_ERROR_CHECK(ret);
}