forked from Minki/linux
bf5e4887ee
So far, the formatters have been reset/enabled using the .prepare() callback. This was done in this callback because walking the formatters use a mutex so it could not be done in .trigger(), which is atomic by default. It turns out there is a problem on capture path of the AXG series. The FIFO may get out of sync with the TDM decoder if the IP are not enabled in a specific order. The FIFO must be enabled before the formatter starts producing data. IOW, we must deal with FE before the BE. The .prepare() callback is called on the BEs before the FE so it is not OK for the AXG. The .trigger() callback order can be configured, and it deals with the FE before the BEs by default. To solve our problem, we just need to start and stop the formatters from the .trigger() callback. It is OK do so now that the links have been made 'nonatomic' in the card driver. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Link: https://lore.kernel.org/r/20211020114217.133153-3-jbrunet@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org> |
||
---|---|---|
.. | ||
aiu-acodec-ctrl.c | ||
aiu-codec-ctrl.c | ||
aiu-encoder-i2s.c | ||
aiu-encoder-spdif.c | ||
aiu-fifo-i2s.c | ||
aiu-fifo-spdif.c | ||
aiu-fifo.c | ||
aiu-fifo.h | ||
aiu.c | ||
aiu.h | ||
axg-card.c | ||
axg-fifo.c | ||
axg-fifo.h | ||
axg-frddr.c | ||
axg-pdm.c | ||
axg-spdifin.c | ||
axg-spdifout.c | ||
axg-tdm-formatter.c | ||
axg-tdm-formatter.h | ||
axg-tdm-interface.c | ||
axg-tdm.h | ||
axg-tdmin.c | ||
axg-tdmout.c | ||
axg-toddr.c | ||
g12a-toacodec.c | ||
g12a-tohdmitx.c | ||
gx-card.c | ||
Kconfig | ||
Makefile | ||
meson-card-utils.c | ||
meson-card.h | ||
meson-codec-glue.c | ||
meson-codec-glue.h | ||
t9015.c |