Hi Hans,
Some BYT/CHT boards (mostly Cherry Trail) use TDM 4 slots 24 bit as
wire format to the codec, rather then standard I2S 2 channel 24 bit.
Add a new m4 file for this. This is a copy of sof-byt-codec.m4 with
the following changes:
@@ -1,4 +1,4 @@
-`# Topology for generic' PLATFORM `board with' CODEC `on SSP' SSP_NUM
+`# Topology for generic' PLATFORM `board with' CODEC `on SSP' SSP_NUM `using TDM 4 slots 24 bit'
# Include topology builder
include(`utils.m4')
@@ -97,8 +97,8 @@
# BE configurations - overrides config in ACPI if present
#
DAI_CONFIG(SSP, SSP_NUM, 0, SSP2-Codec,
- SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
- SSP_CLOCK(bclk, 2400000, codec_slave),
+ SSP_CONFIG(DSP_B, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
+ SSP_CLOCK(bclk, 4800000, codec_slave),
SSP_CLOCK(fsync, 48000, codec_slave),
- SSP_TDM(2, 25, 3, 3),
+ SSP_TDM(4, 25, 3, 3),
SSP_CONFIG_DATA(SSP, SSP_NUM, 24)))
I don't think this change is necessary, the problem is probably that we
still rely on the hard-coded 4 slots in the machine driver which was the
default for the Atom/SST driver.
If I look at the cht_bsw_nau8824.c driver, the only place where there is
a reference to 4 slots is in the cht_codec_init() function.
https://elixir.bootlin.com/linux/latest/source/sound/soc/intel/boards/cht_bsw_nau8824.c#L104
In other drivers, this was moved to the codec_fixup routine which is
overridden/ignored when SOF is used.
see e.g.
https://elixir.bootlin.com/linux/latest/source/sound/soc/intel/boards/cht_bsw_max98090_ti.c
https://elixir.bootlin.com/linux/latest/source/sound/soc/intel/boards/cht_bsw_rt5645.c
If you follow the same pattern that should make this problem go away.
When SOF is used we typically don't have any hard-coded format and
whatever is defined in the topology is propagated to the codec driver.
Hope this helps
-Pierre