On Thu 21 Apr 2022 at 17:57, Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: > This reverts commit bf5e4887eeddb48480568466536aa08ec7f179a5 because > the following and required commit e138233e56e9829e65b6293887063a1a3ccb2d68 > causes the following system crash when using audio: > BUG: sleeping function called from invalid context at kernel/locking/mutex.c:282 > > Reported-by: Dmitry Shmidt <dimitrysh@xxxxxxxxxx> > Signed-off-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> For both: Acked-by: Jerome Brunet <jbrunet@xxxxxxxxxxxx> The main reason for the this was to be able to configure the start order between the DPCM Backend and Frontend. Only the trigger() callback has that capability for now. This HW require the BE to start before FE, otherwise channels get randomly shifted in the output stream if there is more than 2 slots on the link, mainly on the capture path. This HW require mutexes to handle the TDM formatters (because it uses the CCF API). This why I moved to non-atomic to use trigger(), forgetting that doing so would make period_elapsed() take a mutex from the IRQ ... :/ To properly fix this, I'll need to extend ASoC so the prepare() callback BE/FE call order can also be configured.