mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
d18ca8635d
When using davinci-mcasp as CPU DAI with simple-card, there are some
conditions that cause simple-card to finish registering a sound card before
davinci-mcasp finishes registering all sound components. This creates a
non-working sound card from userspace with no problem indication apart
from not being able to play/record audio on a PCM stream. The issue
arises during simultaneous probe execution of both drivers. Specifically,
the simple-card driver, awaiting a CPU DAI, proceeds as soon as
davinci-mcasp registers its DAI. However, this process can lead to the
client mutex lock (client_mutex in soc-core.c) being held or davinci-mcasp
being preempted before PCM DMA registration on davinci-mcasp finishes.
This situation occurs when the probes of both drivers run concurrently.
Below is the code path for this condition. To solve the issue, defer
davinci-mcasp CPU DAI registration to the last step in the audio part of
it. This way, simple-card CPU DAI parsing will be deferred until all
audio components are registered.
Fail Code Path:
simple-card.c: probe starts
simple-card.c: simple_dai_link_of: simple_parse_node(..,cpu,..) returns EPROBE_DEFER, no CPU DAI yet
davinci-mcasp.c: probe starts
davinci-mcasp.c: devm_snd_soc_register_component() register CPU DAI
simple-card.c: probes again, finish CPU DAI parsing and call devm_snd_soc_register_card()
simple-card.c: finish probe
davinci-mcasp.c: *dma_pcm_platform_register() register PCM DMA
davinci-mcasp.c: probe finish
Cc: stable@vger.kernel.org
Fixes:
|
||
---|---|---|
.. | ||
ams-delta.c | ||
davinci-evm.c | ||
davinci-i2s.c | ||
davinci-i2s.h | ||
davinci-mcasp.c | ||
davinci-mcasp.h | ||
edma-pcm.c | ||
edma-pcm.h | ||
j721e-evm.c | ||
Kconfig | ||
Makefile | ||
n810.c | ||
omap-abe-twl6040.c | ||
omap-dmic.c | ||
omap-dmic.h | ||
omap-hdmi.c | ||
omap-mcbsp-priv.h | ||
omap-mcbsp-st.c | ||
omap-mcbsp.c | ||
omap-mcbsp.h | ||
omap-mcpdm.c | ||
omap-mcpdm.h | ||
omap-twl4030.c | ||
omap3pandora.c | ||
osk5912.c | ||
rx51.c | ||
sdma-pcm.c | ||
sdma-pcm.h | ||
udma-pcm.c | ||
udma-pcm.h |