Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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.
+7 −7
Original line number Diff line number Diff line
@@ -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