mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
ASoC: rsnd: fixup SSI clock during suspend/resume modes
Prepare <-> Cleanup functions pair has balanced calls. But in case of suspend mode no call to rsnd_soc_dai_shutdown() function, so cleanup isn't called. OTOH during resume mode function rsnd_soc_dai_prepare() is called, but calling rsnd_ssi_prepare() is skipped (rsnd_status_update() returns zero, bacause was not cleanup before). We need to call rsnd_ssi_prepare(), because it enables SSI clocks by calling rsnd_ssi_master_clk_start(). This patch allows to call prepare/cleanup functions always. Signed-off-by: Dmytro Prokopchuk <dmytro.prokopchuk@globallogic.com> Tested-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> [kuninori: adjusted to upstream] Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
c78d42c7fb
commit
624d1a7cd8
@ -134,10 +134,9 @@ static int rsnd_dmaen_prepare(struct rsnd_mod *mod,
|
||||
struct rsnd_dmaen *dmaen = rsnd_dma_to_dmaen(dma);
|
||||
struct device *dev = rsnd_priv_to_dev(priv);
|
||||
|
||||
if (dmaen->chan) {
|
||||
dev_err(dev, "it already has dma channel\n");
|
||||
return -EIO;
|
||||
}
|
||||
/* maybe suspended */
|
||||
if (dmaen->chan)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* DMAEngine request uses mutex lock.
|
||||
|
@ -318,9 +318,8 @@ struct rsnd_mod {
|
||||
/*
|
||||
* status
|
||||
*
|
||||
* 0xH0000CBA
|
||||
* 0xH0000CB0
|
||||
*
|
||||
* A 0: prepare 1: cleanup
|
||||
* B 0: init 1: quit
|
||||
* C 0: start 1: stop
|
||||
*
|
||||
@ -331,9 +330,8 @@ struct rsnd_mod {
|
||||
* H 0: hw_params
|
||||
* H 0: pointer
|
||||
* H 0: prepare
|
||||
* H 0: cleanup
|
||||
*/
|
||||
#define __rsnd_mod_shift_prepare 0
|
||||
#define __rsnd_mod_shift_cleanup 0
|
||||
#define __rsnd_mod_shift_init 4
|
||||
#define __rsnd_mod_shift_quit 4
|
||||
#define __rsnd_mod_shift_start 8
|
||||
@ -345,11 +343,13 @@ struct rsnd_mod {
|
||||
#define __rsnd_mod_shift_fallback 28 /* always called */
|
||||
#define __rsnd_mod_shift_hw_params 28 /* always called */
|
||||
#define __rsnd_mod_shift_pointer 28 /* always called */
|
||||
#define __rsnd_mod_shift_prepare 28 /* always called */
|
||||
#define __rsnd_mod_shift_cleanup 28 /* always called */
|
||||
|
||||
#define __rsnd_mod_add_probe 0
|
||||
#define __rsnd_mod_add_remove 0
|
||||
#define __rsnd_mod_add_prepare 1
|
||||
#define __rsnd_mod_add_cleanup -1
|
||||
#define __rsnd_mod_add_prepare 0
|
||||
#define __rsnd_mod_add_cleanup 0
|
||||
#define __rsnd_mod_add_init 1
|
||||
#define __rsnd_mod_add_quit -1
|
||||
#define __rsnd_mod_add_start 1
|
||||
@ -363,7 +363,7 @@ struct rsnd_mod {
|
||||
#define __rsnd_mod_call_probe 0
|
||||
#define __rsnd_mod_call_remove 0
|
||||
#define __rsnd_mod_call_prepare 0
|
||||
#define __rsnd_mod_call_cleanup 1
|
||||
#define __rsnd_mod_call_cleanup 0
|
||||
#define __rsnd_mod_call_init 0
|
||||
#define __rsnd_mod_call_quit 1
|
||||
#define __rsnd_mod_call_start 0
|
||||
|
Loading…
Reference in New Issue
Block a user