From: Jerome Brunet <jbrunet@baylibre.com> To: Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com> Cc: Jerome Brunet <jbrunet@baylibre.com>, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 0/4] ASoC: meson: tdm fixes Date: Fri, 26 Apr 2024 17:29:37 +0200 [thread overview] Message-ID: <20240426152946.3078805-1-jbrunet@baylibre.com> (raw) 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 Jerome Brunet (4): ASoC: meson: axg-fifo: use threaded irq to check periods ASoC: meson: axg-card: make links nonatomic ASoC: meson: axg-tdm-interface: manage formatters in trigger ASoC: meson: axg-tdm: add continuous clock support sound/soc/meson/axg-card.c | 1 + sound/soc/meson/axg-fifo.c | 29 +++++++++++++-------- sound/soc/meson/axg-tdm-formatter.c | 40 +++++++++++++++++++++++++++++ sound/soc/meson/axg-tdm-interface.c | 38 +++++++++++++++++++-------- sound/soc/meson/axg-tdm.h | 5 ++++ 5 files changed, 93 insertions(+), 20 deletions(-) -- 2.43.0
WARNING: multiple messages have this Message-ID (diff)
From: Jerome Brunet <jbrunet@baylibre.com> To: Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com> Cc: Jerome Brunet <jbrunet@baylibre.com>, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org Subject: [PATCH 0/4] ASoC: meson: tdm fixes Date: Fri, 26 Apr 2024 17:29:37 +0200 [thread overview] Message-ID: <20240426152946.3078805-1-jbrunet@baylibre.com> (raw) 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 Jerome Brunet (4): ASoC: meson: axg-fifo: use threaded irq to check periods ASoC: meson: axg-card: make links nonatomic ASoC: meson: axg-tdm-interface: manage formatters in trigger ASoC: meson: axg-tdm: add continuous clock support sound/soc/meson/axg-card.c | 1 + sound/soc/meson/axg-fifo.c | 29 +++++++++++++-------- sound/soc/meson/axg-tdm-formatter.c | 40 +++++++++++++++++++++++++++++ sound/soc/meson/axg-tdm-interface.c | 38 +++++++++++++++++++-------- sound/soc/meson/axg-tdm.h | 5 ++++ 5 files changed, 93 insertions(+), 20 deletions(-) -- 2.43.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic
next reply other threads:[~2024-04-26 15:29 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-04-26 15:29 Jerome Brunet [this message] 2024-04-26 15:29 ` [PATCH 0/4] ASoC: meson: tdm fixes Jerome Brunet 2024-04-26 15:29 ` [PATCH 1/4] ASoC: meson: axg-fifo: use threaded irq to check periods Jerome Brunet 2024-04-26 15:29 ` Jerome Brunet 2024-04-26 15:29 ` [PATCH 2/4] ASoC: meson: axg-card: make links nonatomic Jerome Brunet 2024-04-26 15:29 ` Jerome Brunet 2024-04-26 15:29 ` [PATCH 3/4] ASoC: meson: axg-tdm-interface: manage formatters in trigger Jerome Brunet 2024-04-26 15:29 ` Jerome Brunet 2024-04-26 15:29 ` [PATCH 4/4] ASoC: meson: axg-tdm: add continuous clock support Jerome Brunet 2024-04-26 15:29 ` Jerome Brunet 2024-05-01 13:43 ` [PATCH 0/4] ASoC: meson: tdm fixes Mark Brown 2024-05-01 13:43 ` Mark Brown -- strict thread matches above, loose matches on Subject: below -- 2020-07-29 15:44 Jerome Brunet 2020-07-29 15:44 ` Jerome Brunet 2020-07-29 15:44 ` Jerome Brunet 2020-07-30 22:28 ` Mark Brown 2020-07-30 22:28 ` Mark Brown 2020-07-30 22:28 ` Mark Brown 2020-08-17 17:48 ` patchwork-bot+linux-amlogic
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20240426152946.3078805-1-jbrunet@baylibre.com \ --to=jbrunet@baylibre.com \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=lgirdwood@gmail.com \ --cc=linux-amlogic@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.