On 20/12/2019 16:40, Dmitry Osipenko wrote:
20.12.2019 18:25, Ben Dooks пишет:On 20/12/2019 15:02, Dmitry Osipenko wrote:20.12.2019 17:56, Ben Dooks пишет:On 20/12/2019 14:43, Dmitry Osipenko wrote:20.12.2019 16:57, Jon Hunter пишет:On 20/12/2019 11:38, Ben Dooks wrote:On 20/12/2019 11:30, Jon Hunter wrote:On 25/11/2019 17:28, Dmitry Osipenko wrote:25.11.2019 20:22, Dmitry Osipenko пишет:25.11.2019 13:37, Ben Dooks пишет:On 23/11/2019 21:09, Dmitry Osipenko wrote:18.10.2019 18:48, Ben Dooks пишет:From: Edward Cragg <edward.cragg@xxxxxxxxxxxxxxx> The tegra3 audio can support 24 and 32 bit sample sizes so add the option to the tegra30_i2s_hw_params to configure the S24_LE or S32_LE formats when requested. Signed-off-by: Edward Cragg <edward.cragg@xxxxxxxxxxxxxxx> [ben.dooks@xxxxxxxxxxxxxxx: fixup merge of 24 and 32bit] [ben.dooks@xxxxxxxxxxxxxxx: add pm calls around ytdm config] [ben.dooks@xxxxxxxxxxxxxxx: drop debug printing to dev_dbg] Signed-off-by: Ben Dooks <ben.dooks@xxxxxxxxxxxxxxx> --- squash 5aeca5a055fd ASoC: tegra: i2s: pm_runtime_get_sync() is needed in tdm code ASoC: tegra: i2s: pm_runtime_get_sync() is needed in tdm code --- sound/soc/tegra/tegra30_i2s.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sound/soc/tegra/tegra30_i2s.c b/sound/soc/tegra/tegra30_i2s.c index 73f0dddeaef3..063f34c882af 100644 --- a/sound/soc/tegra/tegra30_i2s.c +++ b/sound/soc/tegra/tegra30_i2s.c @@ -127,7 +127,7 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream, struct device *dev = dai->dev; struct tegra30_i2s *i2s = snd_soc_dai_get_drvdata(dai); unsigned int mask, val, reg; - int ret, sample_size, srate, i2sclock, bitcnt; + int ret, sample_size, srate, i2sclock, bitcnt, audio_bits; struct tegra30_ahub_cif_conf cif_conf; if (params_channels(params) != 2) @@ -137,8 +137,19 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream, switch (params_format(params)) { case SNDRV_PCM_FORMAT_S16_LE: val = TEGRA30_I2S_CTRL_BIT_SIZE_16; + audio_bits = TEGRA30_AUDIOCIF_BITS_16; sample_size = 16; break; + case SNDRV_PCM_FORMAT_S24_LE: + val = TEGRA30_I2S_CTRL_BIT_SIZE_24; + audio_bits = TEGRA30_AUDIOCIF_BITS_24; + sample_size = 24; + break; + case SNDRV_PCM_FORMAT_S32_LE: + val = TEGRA30_I2S_CTRL_BIT_SIZE_32; + audio_bits = TEGRA30_AUDIOCIF_BITS_32; + sample_size = 32; + break; default: return -EINVAL; } @@ -170,8 +181,8 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream, cif_conf.threshold = 0; cif_conf.audio_channels = 2; cif_conf.client_channels = 2; - cif_conf.audio_bits = TEGRA30_AUDIOCIF_BITS_16; - cif_conf.client_bits = TEGRA30_AUDIOCIF_BITS_16; + cif_conf.audio_bits = audio_bits; + cif_conf.client_bits = audio_bits; cif_conf.expand = 0; cif_conf.stereo_conv = 0; cif_conf.replicate = 0; @@ -306,14 +317,18 @@ static const struct snd_soc_dai_driver tegra30_i2s_dai_template = { .channels_min = 2, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_96000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S32_LE | + SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S16_LE, }, .capture = { .stream_name = "Capture", .channels_min = 2, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_96000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S32_LE | + SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S16_LE, }, .ops = &tegra30_i2s_dai_ops, .symmetric_rates = 1,Hello, This patch breaks audio on Tegra30. I don't see errors anywhere, but there is no audio and reverting this patch helps. Please fix it.What is the failure mode? I can try and take a look at this some time this week, but I am not sure if I have any boards with an actual useful audio output?The failure mode is that there no sound. I also noticed that video playback stutters a lot if movie file has audio track, seems something times out during of the audio playback. For now I don't have any more info.Oh, I didn't say how to reproduce it.. for example simply playing big_buck_bunny_720p_h264.mov in MPV has the audio problem. https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_h264.movGiven that the audio drivers uses regmap, it could be good to dump the I2S/AHUB registers while the clip if playing with and without this patch to see the differences. I am curious if the audio is now being played as 24 or 32-bit instead of 16-bit now these are available. You could also dump the hw_params to see the format while playing as well ... $ /proc/asound/<scard-name>/pcm0p/sub0/hw_paramsI suppose it is also possible that the codec isn't properly doing >16 bits and the fact we now offer 24 and 32 could be an issue. I've not got anything with an audio output on it that would be easy to test.I thought I had tested on a Jetson TK1 (Tegra124) but it was sometime back. However, admittedly I may have only done simple 16-bit testing with speaker-test. We do verify that all soundcards are detected and registered as expected during daily testing, but at the moment we don't have anything that verifies actual playback.Please take a look at the attached logs.I wonder if we are falling into FIFO configuration issues with the non-16 bit case. Can you try adding the following two patches?It is much better now! There is no horrible noise and no stuttering, but audio still has a "robotic" effect, like freq isn't correct.I wonder if there's an issue with FIFO stoking? I should also possibly add the correctly stop FIFOs patch as well.I'll be happy to try more patches. Meanwhile sound on v5.5+ is broken and thus the incomplete patches should be reverted.
Have you checked if just removing the 24/32 bits from .formats in the dai template and see if the problem continues? I will try and see if I can find the code that does the fifo level checking and see if the problem is in the FIFO fill or something else in the audio hub setup. -- Ben Dooks http://www.codethink.co.uk/ Senior Engineer Codethink - Providing Genius https://www.codethink.co.uk/privacy.html