Hi Mark
Thank you for your reply
ak4554 is very simple DA/AD converter which has no setting register. But, playback format is SND_SOC_DAIFMT_RIGHT_J, and, capture format is SND_SOC_DAIFMT_LEFT_J on same bit clock, LR clock. Because of that, snd_soc_dai_driver consists from "playback only" and "capture only" here, and it has software base symmetric_rates check.
If the device is hard coded to these formats just use a single DAI without a set_dai_fmt() operation, either the machine can create two links to the DAI or things can be set up without any extra clocks so that both formats are met. Otherwise this looks good apart from the things Lars-Peter already noticed.
OK, then, it can remove self .symmetric_rates check. It works with my current machine.
The image is like this, is it OK ?
CPU-DAI1 (plaback only fmt = RIGHT_J) --+-- ak4554 (it doesn't have set_fmt()) | CPU-DAI2 (capture only fmt = LEFT_J) ---+
Best regards --- Kuninori Morimoto