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

Commit c17dba8b authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: rsnd: tidyup SSI interrupt enable/disable method



Current SSI doesn't care interrupt "disable" method. And, it is used
when PIO mode only at this point. SSI interrupt will be used for
sound R/L issue workaround when DMA mode too.
This patch tidyup SSI interrupt enable/disable method.

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 05795411
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -432,7 +432,9 @@ int rsnd_src_ssiu_start(struct rsnd_mod *ssi_mod,
			int use_busif);
int rsnd_src_ssiu_stop(struct rsnd_mod *ssi_mod,
		       struct rsnd_dai *rdai);
int rsnd_src_enable_ssi_irq(struct rsnd_mod *ssi_mod,
int rsnd_src_ssi_irq_enable(struct rsnd_mod *ssi_mod,
			    struct rsnd_dai *rdai);
int rsnd_src_ssi_irq_disable(struct rsnd_mod *ssi_mod,
			     struct rsnd_dai *rdai);

#define rsnd_src_nr(priv) ((priv)->src_nr)
+22 −3
Original line number Diff line number Diff line
@@ -185,18 +185,37 @@ int rsnd_src_ssiu_stop(struct rsnd_mod *ssi_mod,
	return 0;
}

int rsnd_src_enable_ssi_irq(struct rsnd_mod *ssi_mod,
int rsnd_src_ssi_irq_enable(struct rsnd_mod *ssi_mod,
			    struct rsnd_dai *rdai)
{
	struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);

	/* enable PIO interrupt if Gen2 */
	if (rsnd_is_gen2(priv))
	if (rsnd_is_gen1(priv))
		return 0;

	/* enable SSI interrupt if Gen2 */
	if (rsnd_ssi_is_dma_mode(ssi_mod))
		rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0e000000);
	else
		rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0f000000);

	return 0;
}

int rsnd_src_ssi_irq_disable(struct rsnd_mod *ssi_mod,
			    struct rsnd_dai *rdai)
{
	struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);

	if (rsnd_is_gen1(priv))
		return 0;

	/* disable SSI interrupt if Gen2 */
	rsnd_mod_write(ssi_mod, INT_ENABLE, 0x00000000);

	return 0;
}

unsigned int rsnd_src_get_ssi_rate(struct rsnd_priv *priv,
				   struct rsnd_dai_stream *io,
				   struct snd_pcm_runtime *runtime)
+4 −2
Original line number Diff line number Diff line
@@ -410,10 +410,10 @@ static int rsnd_ssi_pio_start(struct rsnd_mod *mod,

	rsnd_src_ssiu_start(mod, rdai, 0);

	rsnd_src_enable_ssi_irq(mod, rdai);

	rsnd_ssi_hw_start(ssi, rdai, io);

	rsnd_src_ssi_irq_enable(mod, rdai);

	return 0;
}

@@ -422,6 +422,8 @@ static int rsnd_ssi_pio_stop(struct rsnd_mod *mod,
{
	struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);

	rsnd_src_ssi_irq_disable(mod, rdai);

	rsnd_ssi_hw_stop(ssi, rdai);

	rsnd_src_ssiu_stop(mod, rdai);