Skip to content
This repository was archived by the owner on Jan 17, 2019. It is now read-only.
This repository was archived by the owner on Jan 17, 2019. It is now read-only.

topology PCM configurations are inconsistent - limited to 48kHz #60

@plbossart

Description

@plbossart

When I tried to support 192kHz on the Hifiberry with the following diff

diff --git a/topology/sof-apl-pcm512x.m4 b/topology/sof-apl-pcm512x.m4
index cf85337..b043da7 100644
--- a/topology/sof-apl-pcm512x.m4
+++ b/topology/sof-apl-pcm512x.m4
@@ -24,21 +24,21 @@ include(`platform/intel/bxt.m4')
 #
 
 # Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s32le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
+# Schedule 192 frames per 1000us deadline on core 0 with priority 0
 PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
        1, 0, 2, s32le,
-       48, 1000, 0, 0)
+       192, 1000, 0, 0)
 
 #
 # DAIs configuration
 #
 
 # playback DAI is SSP5 using 2 periods
-# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
+# Buffers use s24le format, with 192 frame per 1000us on core 0 with priority 0
 DAI_ADD(sof/pipe-dai-playback.m4,
        1, SSP, 5, SSP5-Codec,
        PIPELINE_SOURCE_1, 2, s24le,
-       48, 1000, 0, 0)
+       192, 1000, 0, 0)
 
 # PCM Low Latency, id 0
 PCM_PLAYBACK_ADD(Port5, 0, PIPELINE_PCM_1)
@@ -49,7 +49,7 @@ PCM_PLAYBACK_ADD(Port5, 0, PIPELINE_PCM_1)
 
 DAI_CONFIG(SSP, 5, 0, SSP5-Codec,
        SSP_CONFIG(I2S, SSP_CLOCK(mclk, 24576000, codec_mclk_in),
-               SSP_CLOCK(bclk, 3072000, codec_slave),
-               SSP_CLOCK(fsync, 48000, codec_slave),
+               SSP_CLOCK(bclk, 12288000, codec_slave),
+               SSP_CLOCK(fsync, 192000, codec_slave),
                SSP_TDM(2, 32, 3, 3),
                SSP_CONFIG_DATA(SSP, 5, 24)))

I had the following error with aplay:
root@ubilinux4:~# aplay -Dhw:0,0 -c2 -r192000 -f S16_LE aa_left.pcm
Playing raw data 'aa_left.pcm' : Signed 16 bit Little Endian, Rate 192000 Hz, Stereo
Warning: rate is not accurate (requested = 192000Hz, got = 48000Hz)
please, try the plug plugin

Indeed the .conf file has limitations to 48kHz:

SectionPCMCapabilities."Passthrough Playback 0" {

	formats "S32_LE,S24_LE,S16_LE"
	rate_min "48000"
	rate_max "48000"
	channels_min "2"
	channels_max "8"

the root cause is that the PCM formats are defined by PCM_CAPABILITIES macro, which isn't used consistently:

grep --color -nH -e PCM_CAPABILITIES *.m4
pipe-low-latency-capture.m4:67:PCM_CAPABILITIES(Low Latency Capture PCM_ID, `S32_LE,S24_LE,S16_LE', 48000, 48000, 2, 4, 2, 4, 192, 16384, 65536, 65536)
pipe-low-latency-playback.m4:118:PCM_CAPABILITIES(Low Latency Playback PCM_ID, `S32_LE,S24_LE,S16_LE', 48000, 48000, 2, 2, 2, 16, 192, 16384, 65536, 65536)
pipe-passthrough-capture.m4:47:PCM_CAPABILITIES(Passthrough Capture PCM_ID, COMP_FORMAT_NAME(PIPELINE_FORMAT), 8000, 192000, 1, 16, 2, 16, 192, 16384, 65536, 65536)
pipe-passthrough-playback.m4:47:PCM_CAPABILITIES(Passthrough Playback PCM_ID, COMP_FORMAT_NAME(PIPELINE_FORMAT), 48000, 48000, 2, 4, 2, 16, 192, 16384, 65536, 65536)
pipe-pcm-media.m4:98:PCM_CAPABILITIES(Media Playback PCM_ID, `S32_LE,S24_LE,S16_LE', 8000, 192000, 2, 2, 2, 32, 192, 262144, 8388608, 8388608)
pipe-src-capture.m4:64:PCM_CAPABILITIES(Passthrough Capture PCM_ID, `S32_LE,S24_LE,S16_LE', 8000, 96000, 2, 4, 2, 16, 192, 16384, 65536, 65536)
pipe-src-playback.m4:64:PCM_CAPABILITIES(Passthrough Playback PCM_ID, `S32_LE,S24_LE,S16_LE', 8000, 96000, 2, 4, 2, 16, 192, 16384, 65536, 65536)
pipe-volume-capture.m4:69:PCM_CAPABILITIES(Passthrough Capture PCM_ID, `S32_LE,S24_LE,S16_LE', 48000, 48000, 2, 8, 2, 16, 192, 16384, 65536, 65536)
pipe-volume-playback.m4:70:PCM_CAPABILITIES(Passthrough Playback PCM_ID, `S32_LE,S24_LE,S16_LE', 48000, 48000, 2, 8, 2, 16, 192, 16384, 65536, 65536)

For passthrough or low-latency pipelines, the PCM format should be aligned with the pipeline/dai definitions.

Metadata

Metadata

Assignees

Labels

P2Critical bugs or normal featuresbugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions