Commit 624d1a7c authored by Dmytro Prokopchuk's avatar Dmytro Prokopchuk Committed by Mark Brown

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: default avatarDmytro Prokopchuk <dmytro.prokopchuk@globallogic.com>
Tested-by: default avatarHiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com>
[kuninori: adjusted to upstream]
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c78d42c7
...@@ -134,10 +134,9 @@ static int rsnd_dmaen_prepare(struct rsnd_mod *mod, ...@@ -134,10 +134,9 @@ static int rsnd_dmaen_prepare(struct rsnd_mod *mod,
struct rsnd_dmaen *dmaen = rsnd_dma_to_dmaen(dma); struct rsnd_dmaen *dmaen = rsnd_dma_to_dmaen(dma);
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
if (dmaen->chan) { /* maybe suspended */
dev_err(dev, "it already has dma channel\n"); if (dmaen->chan)
return -EIO; return 0;
}
/* /*
* DMAEngine request uses mutex lock. * DMAEngine request uses mutex lock.
......
...@@ -318,9 +318,8 @@ struct rsnd_mod { ...@@ -318,9 +318,8 @@ struct rsnd_mod {
/* /*
* status * status
* *
* 0xH0000CBA * 0xH0000CB0
* *
* A 0: prepare 1: cleanup
* B 0: init 1: quit * B 0: init 1: quit
* C 0: start 1: stop * C 0: start 1: stop
* *
...@@ -331,9 +330,8 @@ struct rsnd_mod { ...@@ -331,9 +330,8 @@ struct rsnd_mod {
* H 0: hw_params * H 0: hw_params
* H 0: pointer * H 0: pointer
* H 0: prepare * 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_init 4
#define __rsnd_mod_shift_quit 4 #define __rsnd_mod_shift_quit 4
#define __rsnd_mod_shift_start 8 #define __rsnd_mod_shift_start 8
...@@ -345,11 +343,13 @@ struct rsnd_mod { ...@@ -345,11 +343,13 @@ struct rsnd_mod {
#define __rsnd_mod_shift_fallback 28 /* always called */ #define __rsnd_mod_shift_fallback 28 /* always called */
#define __rsnd_mod_shift_hw_params 28 /* always called */ #define __rsnd_mod_shift_hw_params 28 /* always called */
#define __rsnd_mod_shift_pointer 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_probe 0
#define __rsnd_mod_add_remove 0 #define __rsnd_mod_add_remove 0
#define __rsnd_mod_add_prepare 1 #define __rsnd_mod_add_prepare 0
#define __rsnd_mod_add_cleanup -1 #define __rsnd_mod_add_cleanup 0
#define __rsnd_mod_add_init 1 #define __rsnd_mod_add_init 1
#define __rsnd_mod_add_quit -1 #define __rsnd_mod_add_quit -1
#define __rsnd_mod_add_start 1 #define __rsnd_mod_add_start 1
...@@ -363,7 +363,7 @@ struct rsnd_mod { ...@@ -363,7 +363,7 @@ struct rsnd_mod {
#define __rsnd_mod_call_probe 0 #define __rsnd_mod_call_probe 0
#define __rsnd_mod_call_remove 0 #define __rsnd_mod_call_remove 0
#define __rsnd_mod_call_prepare 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_init 0
#define __rsnd_mod_call_quit 1 #define __rsnd_mod_call_quit 1
#define __rsnd_mod_call_start 0 #define __rsnd_mod_call_start 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment