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

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
...@@ -191,6 +191,13 @@ int rsnd_io_is_working(struct rsnd_dai_stream *io) ...@@ -191,6 +191,13 @@ int rsnd_io_is_working(struct rsnd_dai_stream *io)
return !!io->substream; 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) int rsnd_get_slot(struct rsnd_dai_stream *io)
{ {
struct rsnd_dai *rdai = rsnd_io_to_rdai(io); struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
...@@ -198,10 +205,17 @@ int rsnd_get_slot(struct rsnd_dai_stream *io) ...@@ -198,10 +205,17 @@ int rsnd_get_slot(struct rsnd_dai_stream *io)
return rdai->slots; 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) int rsnd_get_slot_width(struct rsnd_dai_stream *io)
{ {
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(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 */ /* TDM Extend Mode needs 8ch */
if (chan == 6) if (chan == 6)
...@@ -579,7 +593,7 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai, ...@@ -579,7 +593,7 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
switch (slots) { switch (slots) {
case 6: case 6:
/* TDM Extend Mode */ /* TDM Extend Mode */
rdai->slots = slots; rsnd_set_slot(rdai, slots, 1);
break; break;
default: default:
dev_err(dev, "unsupported TDM slots (%d)\n", slots); dev_err(dev, "unsupported TDM slots (%d)\n", slots);
...@@ -660,7 +674,7 @@ static int rsnd_dai_probe(struct rsnd_priv *priv) ...@@ -660,7 +674,7 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
rdai->playback.rdai = rdai; rdai->playback.rdai = rdai;
rdai->capture.rdai = rdai; rdai->capture.rdai = rdai;
rdai->slots = 2; /* default */ rsnd_set_slot(rdai, 2, 1); /* default */
#define mod_parse(name) \ #define mod_parse(name) \
node = rsnd_##name##_of_node(priv); \ node = rsnd_##name##_of_node(priv); \
......
...@@ -293,8 +293,11 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod, ...@@ -293,8 +293,11 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod,
void (*callback)(struct rsnd_mod *mod, void (*callback)(struct rsnd_mod *mod,
struct rsnd_dai_stream *io)); 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(struct rsnd_dai_stream *io);
int rsnd_get_slot_width(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 * R-Car sound DAI
...@@ -334,6 +337,7 @@ struct rsnd_dai { ...@@ -334,6 +337,7 @@ struct rsnd_dai {
struct rsnd_priv *priv; struct rsnd_priv *priv;
int slots; int slots;
int slots_num;
unsigned int clk_master:1; unsigned int clk_master:1;
unsigned int bit_clk_inv:1; unsigned int bit_clk_inv:1;
......
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