linux-stable/sound/soc/meson
Mark Brown c5782bb546
ASoC: meson: tdm fixes
Merge series from Jerome Brunet <jbrunet@baylibre.com>:

This patchset fixes 2 problems on TDM which both find a solution
by properly implementing the .trigger() callback for the TDM backend.

ATM, enabling the TDM formatters is done by the .prepare() callback
because handling the formatter is slow due to necessary calls to CCF.

The first problem affects the TDMIN. Because .prepare() is called on DPCM
backend first, the formatter are started before the FIFOs and this may
cause a random channel shifts if the TDMIN use multiple lanes with more
than 2 slots per lanes. Using trigger() allows to set the FE/BE order,
solving the problem.

There has already been an attempt to fix this 3y ago [1] and reverted [2]
It triggered a 'sleep in irq' error on the period IRQ. The solution is
to just use the bottom half of threaded IRQ. This is patch #1. Patch #2
and #3 remain mostly the same as 3y ago.

For TDMOUT, the problem is on pause. ATM pause only stops the FIFO and
the TDMOUT just starves. When it does, it will actually repeat the last
sample continuously. Depending on the platform, if there is no high-pass
filter on the analog path, this may translate to a constant position of
the speaker membrane. There is no audible glitch but it may damage the
speaker coil.

Properly stopping the TDMOUT in pause solves the problem. There is
behaviour change associated with that fix. Clocks used to be continuous
on pause because of the problem above. They will now be gated on pause by
default, as they should. The last change introduce the proper support for
continuous clocks, if needed.

[1]: https://lore.kernel.org/linux-amlogic/20211020114217.133153-1-jbrunet@baylibre.com
[2]: https://lore.kernel.org/linux-amlogic/20220421155725.2589089-1-narmstrong@baylibre.com
2024-04-30 23:36:23 +09:00
..
Kconfig ASoC: meson: cards: select SND_DYNAMIC_MINORS 2024-04-29 23:48:55 +09:00
Makefile
aiu-acodec-ctrl.c ASoC: meson: merge DAI call back functions into ops 2023-08-14 13:10:20 +01:00
aiu-codec-ctrl.c ASoC: meson: merge DAI call back functions into ops 2023-08-14 13:10:20 +01:00
aiu-encoder-i2s.c ASoC: meson: Rename set_fmt_new back to set_fmt 2022-06-06 12:34:06 +01:00
aiu-encoder-spdif.c ASoC: meson: aiu: Fix spelling mistake "Unsupport" -> "Unsupported" 2021-09-27 13:01:07 +01:00
aiu-fifo-i2s.c ASoC: meson: merge DAI call back functions into ops 2023-08-14 13:10:20 +01:00
aiu-fifo-spdif.c ASoC: meson: merge DAI call back functions into ops 2023-08-14 13:10:20 +01:00
aiu-fifo.c ASoC: meson: convert not to use asoc_xxx() 2023-09-25 14:16:28 +02:00
aiu-fifo.h
aiu.c ASoC: meson: aiu: fix function pointer type mismatch 2024-02-14 00:43:30 +00:00
aiu.h ASoC: meson: aiu: fix function pointer type mismatch 2024-02-14 00:43:30 +00:00
axg-card.c ASoC: meson: axg-card: make links nonatomic 2024-04-29 23:48:49 +09:00
axg-fifo.c ASoC: meson: axg-fifo: use threaded irq to check periods 2024-04-29 23:48:48 +09:00
axg-fifo.h ASoC: meson: axg-fifo: use FIELD helpers 2024-02-27 18:43:22 +00:00
axg-frddr.c ASoC: meson: axg-fifo: use FIELD helpers 2024-02-27 18:43:22 +00:00
axg-pdm.c ASoC: meson: merge DAI call back functions into ops 2023-08-14 13:10:20 +01:00
axg-spdifin.c ASoC: meson: axg-spdifin: use max width for rate detection 2024-02-26 14:03:16 +00:00
axg-spdifout.c ASoC: meson: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:28 +01:00
axg-tdm-formatter.c ASoC: meson: axg-tdm: add continuous clock support 2024-04-29 23:48:50 +09:00
axg-tdm-formatter.h
axg-tdm-interface.c ASoC: meson: axg-tdm: add continuous clock support 2024-04-29 23:48:50 +09:00
axg-tdm.h ASoC: meson: axg-tdm: add continuous clock support 2024-04-29 23:48:50 +09:00
axg-tdmin.c ASoC: meson: use helper function 2023-01-31 11:05:03 +00:00
axg-tdmout.c ASoC: meson: use helper function 2023-01-31 11:05:03 +00:00
axg-toddr.c ASoC: meson: axg-fifo: use FIELD helpers 2024-02-27 18:43:22 +00:00
g12a-toacodec.c ASoC: meson: g12a-toacodec: Fix event generation 2024-01-03 18:37:01 +00:00
g12a-tohdmitx.c ASoC: meson: g12a-tohdmitx: Fix event generation for S/PDIF mux 2024-01-03 18:37:02 +00:00
gx-card.c ASoC: meson: Make meson_card_remove() return void 2023-10-23 13:29:46 +01:00
meson-card-utils.c ASoC: meson: Make meson_card_remove() return void 2023-10-23 13:29:46 +01:00
meson-card.h ASoC: meson: Make meson_card_remove() return void 2023-10-23 13:29:46 +01:00
meson-codec-glue.c ASoC: meson: convert not to use asoc_xxx() 2023-09-25 14:16:28 +02:00
meson-codec-glue.h
t9015.c ASoC: meson: t9015: fix function pointer type mismatch 2024-02-14 00:43:31 +00:00