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

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

ASoC: rsnd: add common interrupt handler for SSI/SRC/DMA



Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths
if it supports MIXer. In such case, mod <-> io is no longer 1:1
relationship. Then, interrupt handler can't use rsnd_mod_to_io().
This patch adds SSI/SRC/DMA common interrupt handler frame

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: default avatarKeita Kobayashi <keita.kobayashi.ym@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2c0fac19
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -172,6 +172,29 @@ void rsnd_mod_quit(struct rsnd_mod *mod)
		clk_unprepare(mod->clk);
}

void rsnd_mod_interrupt(struct rsnd_mod *mod,
			void (*callback)(struct rsnd_mod *mod,
					 struct rsnd_dai_stream *io))
{
	struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
	struct rsnd_dai_stream *io;
	struct rsnd_dai *rdai;
	int i, j;

	for_each_rsnd_dai(rdai, priv, j) {

		for (i = 0; i < RSND_MOD_MAX; i++) {
			io = &rdai->playback;
			if (mod == io->mod[i])
				callback(mod, io);

			io = &rdai->capture;
			if (mod == io->mod[i])
				callback(mod, io);
		}
	}
}

int rsnd_mod_is_working(struct rsnd_mod *mod)
{
	struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
+3 −0
Original line number Diff line number Diff line
@@ -327,6 +327,9 @@ void rsnd_mod_quit(struct rsnd_mod *mod);
char *rsnd_mod_name(struct rsnd_mod *mod);
int rsnd_mod_is_working(struct rsnd_mod *mod);
struct dma_chan *rsnd_mod_dma_req(struct rsnd_mod *mod);
void rsnd_mod_interrupt(struct rsnd_mod *mod,
			void (*callback)(struct rsnd_mod *mod,
					 struct rsnd_dai_stream *io));

/*
 *	R-Car sound DAI