altos/stm32f1: Grab both TX/RX DMA mutexes while doing I2C
[fw/altos] / src / stm32f1 / ao_dma_stm.c
index d3162d5ba85c163261e4e3bc815cf4f02398c496..45bb88f31609c882487ac2e2eb0219ecbe9b6480 100644 (file)
@@ -66,6 +66,27 @@ void stm_dma1_channel7_isr(void) { ao_dma_isr(STM_DMA_INDEX(7)); }
 static uint8_t ao_dma_active;
 #endif
 
+void
+ao_dma_mutex_get(uint8_t index)
+{
+       if (ao_dma_allocated[index]) {
+               if (ao_dma_mutex[index])
+                       ao_panic(AO_PANIC_DMA);
+               ao_dma_mutex[index] = 0xff;
+       } else
+               ao_mutex_get(&ao_dma_mutex[index]);
+}
+
+void
+ao_dma_mutex_put(uint8_t index)
+{
+       if (ao_dma_allocated[index])
+               ao_dma_mutex[index] = 0;
+       else
+               ao_mutex_put(&ao_dma_mutex[index]);
+}
+
+
 void
 ao_dma_set_transfer(uint8_t            index,
                    volatile void       *peripheral,