Xiubo,
I did a mistake in the v1 of my 'ASoC: simple-card: simplify code': I did not initialize the pointer to the asoc_simple_card_dai_init() function when DT. Then, I fixed that, and the simple card does not work for me.
First, without any 'format' in the DT, I get a fmt for each CPU / CODEC DAI: SND_SOC_DAIFMT_CBS_CFS is always set. Well, some code is executed for nothing, but this is not critical.
The main problem is about sysclk: when there is no clock in the DT, you get the clock of the CPU or CODEC DAI. In my system, two clocks are declared in the controller CPU DAI, but there is no .set_sysclk pointer. So, snd_soc_dai_set_sysclk() returns -EINVAL and the card is not created.
As I don't know why you need these fmt and sysclk, may you have a look at these problems?