linux/sound/soc
Katsuhiro Suzuki 2458adb8f9
SoC: simple-card-utils: set 0Hz to sysclk when shutdown
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>
Link: https://lore.kernel.org/r/20190907174501.19833-1-katsuhiro@katsuster.net
Signed-off-by: Mark Brown <broonie@kernel.org>
2019-09-09 10:51:21 +01:00
..
adi treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 177 2019-05-30 11:29:19 -07:00
amd ASoC: amd: use devm_platform_ioremap_resource() to simplify code 2019-09-04 13:48:04 +01:00
atmel ASoC: atmel_ssc_dai: implement left-justified data mode 2019-08-27 20:40:53 +01:00
au1x ASoC: au1x: psc-i2s: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:12:25 +01:00
bcm ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
cirrus ASoC: ep93xx: use devm_platform_ioremap_resource() to simplify code 2019-09-04 13:48:22 +01:00
codecs ASoC: codecs: ad193x: make two arrays static const, makes object smaller 2019-09-09 10:50:51 +01:00
dwc treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
fsl ASoC: imx-audmix: register the card on a proper dev 2019-08-27 11:44:39 +01:00
generic SoC: simple-card-utils: set 0Hz to sysclk when shutdown 2019-09-09 10:51:21 +01:00
hisilicon treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340 2019-06-05 17:37:07 +02:00
img treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
intel ASoC: SOF/Intel: fix selection of SND_INTEL_NHTL 2019-08-30 12:26:53 +01:00
jz4740 Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
kirkwood ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
mediatek ASoC: mediatek: mt8183: fix space issues 2019-08-30 13:02:33 +01:00
meson ASoC: meson: tdmout: add sm1 support 2019-09-05 18:18:07 +01:00
mxs ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
pxa ASoC: mmp-sspa: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:10:54 +01:00
qcom ASoC: qcom: common: Include link-name in error messages 2019-09-05 18:15:39 +01:00
rockchip ASoC: rockchip: ignore 0Hz sysclk 2019-09-09 10:51:06 +01:00
samsung ASoC: samsung: tm2_wm5110: use snd_soc_dai_link_component for aux_dev 2019-08-09 18:12:35 +01:00
sh Merge branch 'asoc-5.3' into asoc-5.4 2019-08-20 18:28:43 +01:00
sirf ASoC: sirf: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:05:39 +01:00
sof ASoC: SOF: imx8: Fix COMPILE_TEST error 2019-09-05 18:18:25 +01:00
spear ASoC: spear: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:06:18 +01:00
sprd ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
sti ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
stm ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
sunxi ASoC: sun4i: Revert A83t description 2019-08-27 19:22:02 +01:00
tegra ASoC: tegra: use devm_platform_ioremap_resource() to simplify code 2019-09-04 13:48:50 +01:00
ti ASoC: ti: davinci-evm: Do not fail if the dai_set_sysclk returns -ENOTSUPP 2019-08-30 12:23:04 +01:00
txx9 Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
uniphier Merge branch 'asoc-5.3' into asoc-5.4 2019-08-20 18:28:43 +01:00
ux500 ASoC: ux500: mop500: consider CPU-Platform possibility 2019-06-28 15:19:55 +01:00
xilinx ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
xtensa ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
zte ASoC: zx-tdm: remove redundant assignment to ts_width on error return path 2019-08-01 13:56:26 +01:00
Kconfig ASoC: remove w90x900/nuc900 platform drivers 2019-08-12 14:00:29 +01:00
Makefile ASoC: remove w90x900/nuc900 platform drivers 2019-08-12 14:00:29 +01:00
soc-ac97.c ASoC: ac97: convert to SPDX identifiers 2018-07-02 10:56:09 +01:00
soc-acpi.c ASoC: soc-acpi: fix implicit header use of module.h/export.h 2019-05-08 18:06:28 +09:00
soc-component.c ASoC: soc-component: add snd_soc_pcm_component_pcm_free() 2019-08-05 16:27:16 +01:00
soc-compress.c ASoC: core: Move pcm_mutex up to card level from snd_soc_pcm_runtime 2019-08-15 15:07:43 +01:00
soc-core.c ASoC: soc-core: add comment to jack at soc_remove_component() 2019-09-04 13:48:58 +01:00
soc-dai.c ASoC: soc-dai: move snd_soc_dai_stream_valid() to soc-dai.c 2019-07-23 18:14:26 +01:00
soc-dapm.c ASoC: soc-core: add snd_soc_dapm_init() 2019-09-02 13:21:20 +01:00
soc-devres.c ASoC: soc-devres.c: convert to SPDX identifiers 2018-07-02 10:55:22 +01:00
soc-generic-dmaengine-pcm.c ASoC: More changes for v5.1 2019-02-28 13:30:55 +01:00
soc-io.c ASoC: soc-io.c: convert to SPDX identifiers 2018-07-02 10:53:55 +01:00
soc-jack.c ASoC: add soc-component.c 2019-08-05 16:16:19 +01:00
soc-ops.c ASoC: Fix UBSAN warning at snd_soc_get/put_volsw_sx() 2018-09-11 11:58:52 +01:00
soc-pcm.c ASoC: core: Move pcm_mutex up to card level from snd_soc_pcm_runtime 2019-08-15 15:07:43 +01:00
soc-topology.c ASoC: soc-topology: use for_each_component_dais() at remove_dai() 2019-08-22 18:31:38 +01:00
soc-utils.c ASoC: add soc-component.c 2019-08-05 16:16:19 +01:00