ASoC: rsnd: don't call clk_get_rate() under atomic context
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 6 Aug 2019 03:45:38 +0000 (12:45 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Oct 2019 11:09:38 +0000 (13:09 +0200)
commit829bebdc1ce6ab89546fdf8255651be6061e07cc
treed384534bffdb8b071fae37468f581966d15118a9
parentf5bef62df82452fd36428e869492ef213985ee29
ASoC: rsnd: don't call clk_get_rate() under atomic context

[ Upstream commit 06e8f5c842f2dbb232897ba967ea7b422745c271 ]

ADG is using clk_get_rate() under atomic context, thus, we might
have scheduling issue.
To avoid this issue, we need to get/keep clk rate under
non atomic context.

We need to handle ADG as special device at Renesas Sound driver.
From SW point of view, we want to impletent it as
rsnd_mod_ops :: prepare, but it makes code just complicate.

To avoid complicated code/patch, this patch adds new clk_rate[] array,
and keep clk IN rate when rsnd_adg_clk_enable() was called.

Reported-by: Leon Kong <Leon.KONG@cn.bosch.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Leon Kong <Leon.KONG@cn.bosch.com>
Link: https://lore.kernel.org/r/87v9vb0xkp.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/sh/rcar/adg.c