30a9346373
Previously, we depended on allocated channels to always be "dma_channel_enabled". However, (A) sometimes, many operations would take place between find_free_audio_dma_channel and audio_dma_enable_channel, and (B) some debugging I did led me to believe that "dma_channel_enabled" would become false when the hardware ended a scheduled DMA transaction, but while a CP object would still think it owned the DMA channel. ((B) is not documented in the datasheet and I am not 100% convinced that my debugging session was not simply missing where we were disabling the channel, but in either case, it shows a need to directly track allocated separately from enabled) Therefore, * Add audio_dma_{allocate,free}_channel. * audio_dma_free_channel implies audio_dma_disable_channel * track via a new array audio_dma_allocated[] * clear all allocated flags on soft-reboot * Convert find_free_audio_dma_channel to audio_dma_allocate_channel * use audio_dma_allocated[] instead of dma_channel_enabled() to check availability * remove find_free_audio_dma_channel * For each one, find a matching audio_dma_disable_channel to convert to audio_dma_free_channel Closes: #2058 |
||
---|---|---|
.. | ||
__init__.c | ||
I2SOut.c | ||
I2SOut.h | ||
PDMIn.c | ||
PDMIn.h |