Hi Katsuhiro
This patch set 0Hz to sysclk when shutdown the card.
Some codecs set rate constraints that derives from sysclk. This mechanism works correctly if machine drivers give fixed frequency.
But simple-audio and audio-graph card set variable clock rate if 'mclk-fs' property exists. In this case, rate constraints will go bad scenario. For example a codec accepts three limited rates (mclk / 256, mclk / 384, mclk / 512).
Bad scenario as follows (mclk-fs = 256):
Initialize sysclk by correct value (Ex. 12.288MHz)
- Codec set constraints of PCM rate by sysclk 48kHz (1/256), 32kHz (1/384), 24kHz (1/512)
Play 48kHz sound, it's acceptable
Sysclk is not changed
Play 32kHz sound, it's acceptable
Set sysclk to 8.192MHz (= fs * mclk-fs = 32k * 256)
- Codec set constraints of PCM rate by sysclk 32kHz (1/256), 21.33kHz (1/384), 16kHz (1/512)
Play 48kHz again, but it's NOT acceptable because constraints do not allow 48kHz
So codecs treat 0Hz sysclk as signal of applying no constraints to avoid this problem.
Signed-off-by: Katsuhiro Suzuki katsuhiro@katsuster.net
I'm not 100% understand your issue. .hw_params (= set mclk/sysclk) is not called in bad case ?? Or it is called but Codec driver ignores it somehow ??
Thank you for your help !! Best regards --- Kuninori Morimoto