mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-10 20:48:12 +00:00
The probe function puts the device into the runtime PM active state with
only the "iis" bus clock enabled, but it also sets priv->op_clk to the
parent of the RCLK_SRC mux without enabling it. The runtime PM suspend
callback disables both clocks, so the first runtime suspend after probe
disables op_clk once more than it was enabled.
On Exynos5250 Arndale both clocks resolve to the same EXYNOS_I2S_BUS gate,
so this triggers the following warning during boot:
WARNING: drivers/clk/clk.c:1270 at clk_core_disable+0xe4/0x23c, CPU#0: kworker/u8:3/45
i2s_bus already disabled
...
Workqueue: pm pm_runtime_work
Call trace:
...
clk_core_disable from clk_disable+0x28/0x34
clk_disable from i2s_runtime_suspend+0x58/0x68 [snd_soc_i2s]
i2s_runtime_suspend [snd_soc_i2s] from genpd_runtime_suspend+0xc4/0x298
genpd_runtime_suspend from __rpm_callback+0x48/0x18c
__rpm_callback from rpm_callback+0x4c/0x50
rpm_callback from rpm_suspend+0xf4/0x718
rpm_suspend from pm_runtime_work+0x9c/0xa0
...
Fix this by enabling op_clk in probe right after getting it, so the clock
state matches the runtime PM active state, and by disabling it in remove.
Fixes:
|
History
|
|
|---|---|---|
| .. | ||
| aries_wm8994.c | ||
| arndale.c | ||
| bells.c | ||
| dma.h | ||
| dmaengine.c | ||
| i2s-regs.h | ||
| i2s.c | ||
| i2s.h | ||
| idma.c | ||
| idma.h | ||
| Kconfig | ||
| littlemill.c | ||
| lowland.c | ||
| Makefile | ||
| midas_wm1811.c | ||
| odroid.c | ||
| pcm.c | ||
| pcm.h | ||
| smdk_spdif.c | ||
| smdk_wm8994.c | ||
| smdk_wm8994pcm.c | ||
| snow.c | ||
| spdif.c | ||
| spdif.h | ||
| speyside.c | ||
| tm2_wm5110.c | ||
| tobermory.c | ||