Current driver is assuming that SSI id = SCU id.
But, now, it can get correct SSI/SCU from
rsnd_dai_stream. use it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit
374e5426377604a94d672650ef22dd2b4285de17)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
int byte_per_period;
int next_period_byte;
};
int byte_per_period;
int next_period_byte;
};
+#define rsnd_io_to_mod_ssi(io) ((io)->mod[RSND_MOD_SSI])
+#define rsnd_io_to_mod_scu(io) ((io)->mod[RSND_MOD_SCU])
struct rsnd_dai {
char name[RSND_DAI_NAME_SIZE];
struct rsnd_dai {
char name[RSND_DAI_NAME_SIZE];
struct rsnd_priv *priv);
struct rsnd_mod *rsnd_scu_mod_get(struct rsnd_priv *priv, int id);
unsigned int rsnd_scu_get_ssi_rate(struct rsnd_priv *priv,
struct rsnd_priv *priv);
struct rsnd_mod *rsnd_scu_mod_get(struct rsnd_priv *priv, int id);
unsigned int rsnd_scu_get_ssi_rate(struct rsnd_priv *priv,
- struct rsnd_mod *ssi_mod,
+ struct rsnd_dai_stream *io,
struct snd_pcm_runtime *runtime);
#define rsnd_scu_nr(priv) ((priv)->scu_nr)
struct snd_pcm_runtime *runtime);
#define rsnd_scu_nr(priv) ((priv)->scu_nr)
{
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
{
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
- int id = rsnd_mod_id(mod);
+ struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
+ int ssi_id = rsnd_mod_id(ssi_mod);
u32 convert_rate = rsnd_scu_convert_rate(scu);
if (convert_rate && !rsnd_dai_is_clk_master(rdai)) {
u32 convert_rate = rsnd_scu_convert_rate(scu);
if (convert_rate && !rsnd_dai_is_clk_master(rdai)) {
- rsnd_mod_bset(mod, SSI_MODE0, (1 << id),
- rsnd_scu_hpbif_is_enable(scu) ? 0 : (1 << id));
+ rsnd_mod_bset(mod, SSI_MODE0, (1 << ssi_id),
+ rsnd_scu_hpbif_is_enable(scu) ? 0 : (1 << ssi_id));
- if (rsnd_ssi_is_pin_sharing(rsnd_ssi_mod_get(priv, id))) {
+ if (rsnd_ssi_is_pin_sharing(ssi_mod)) {
case 1:
shift = 0;
break;
case 1:
shift = 0;
break;
}
unsigned int rsnd_scu_get_ssi_rate(struct rsnd_priv *priv,
}
unsigned int rsnd_scu_get_ssi_rate(struct rsnd_priv *priv,
- struct rsnd_mod *ssi_mod,
+ struct rsnd_dai_stream *io,
struct snd_pcm_runtime *runtime)
{
struct rsnd_scu *scu;
unsigned int rate;
struct snd_pcm_runtime *runtime)
{
struct rsnd_scu *scu;
unsigned int rate;
- /* this function is assuming SSI id = SCU id here */
- scu = rsnd_mod_to_scu(rsnd_scu_mod_get(priv, rsnd_mod_id(ssi_mod)));
+ scu = rsnd_mod_to_scu(rsnd_io_to_mod_scu(io));
/*
* return convert rate if SRC is used,
/*
* return convert rate if SRC is used,
struct rsnd_dai *rdai,
struct rsnd_dai_stream *io)
{
struct rsnd_dai *rdai,
struct rsnd_dai_stream *io)
{
+ struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
+
/* enable PIO interrupt */
/* enable PIO interrupt */
- rsnd_mod_write(mod, INT_ENABLE, 0x0f000000);
+ rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0f000000);
1, 2, 4, 8, 16, 6, 12,
};
unsigned int main_rate;
1, 2, 4, 8, 16, 6, 12,
};
unsigned int main_rate;
- unsigned int rate = rsnd_scu_get_ssi_rate(priv, &ssi->mod, runtime);
+ unsigned int rate = rsnd_scu_get_ssi_rate(priv, io, runtime);
/*
* Find best clock, and try to start ADG
/*
* Find best clock, and try to start ADG