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

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

ASoC: rsnd: add rsnd_set_slot() / rsnd_get_slot_num()



TDM will use 6 or 8 slots on 1 SSI, and Multi channel will use
6 or 8 slots on few SSI (each SSI uses 2 slots).
Thus, this adds new slot control functions which can be prepare
for Multi channel support.

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c140284b
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -191,6 +191,13 @@ int rsnd_io_is_working(struct rsnd_dai_stream *io)
	return !!io->substream;
}

void rsnd_set_slot(struct rsnd_dai *rdai,
		   int slots, int num)
{
	rdai->slots	= slots;
	rdai->slots_num	= num;
}

int rsnd_get_slot(struct rsnd_dai_stream *io)
{
	struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
@@ -198,10 +205,17 @@ int rsnd_get_slot(struct rsnd_dai_stream *io)
	return rdai->slots;
}

int rsnd_get_slot_num(struct rsnd_dai_stream *io)
{
	struct rsnd_dai *rdai = rsnd_io_to_rdai(io);

	return rdai->slots_num;
}

int rsnd_get_slot_width(struct rsnd_dai_stream *io)
{
	struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
	int chan = runtime->channels;
	int chan = runtime->channels / rsnd_get_slot_num(io);

	/* TDM Extend Mode needs 8ch */
	if (chan == 6)
@@ -579,7 +593,7 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
	switch (slots) {
	case 6:
		/* TDM Extend Mode */
		rdai->slots = slots;
		rsnd_set_slot(rdai, slots, 1);
		break;
	default:
		dev_err(dev, "unsupported TDM slots (%d)\n", slots);
@@ -660,7 +674,7 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)

		rdai->playback.rdai		= rdai;
		rdai->capture.rdai		= rdai;
		rdai->slots			= 2; /* default */
		rsnd_set_slot(rdai, 2, 1); /* default */

#define mod_parse(name)							\
node = rsnd_##name##_of_node(priv);					\
+4 −0
Original line number Diff line number Diff line
@@ -293,8 +293,11 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod,
			void (*callback)(struct rsnd_mod *mod,
					 struct rsnd_dai_stream *io));

void rsnd_set_slot(struct rsnd_dai *rdai,
		   int slots, int slots_total);
int rsnd_get_slot(struct rsnd_dai_stream *io);
int rsnd_get_slot_width(struct rsnd_dai_stream *io);
int rsnd_get_slot_num(struct rsnd_dai_stream *io);

/*
 *	R-Car sound DAI
@@ -334,6 +337,7 @@ struct rsnd_dai {
	struct rsnd_priv *priv;

	int slots;
	int slots_num;

	unsigned int clk_master:1;
	unsigned int bit_clk_inv:1;