|
@@ -110,6 +110,8 @@ int rsnd_src_ssiu_start(struct rsnd_mod *ssi_mod,
|
|
struct rsnd_dai *rdai,
|
|
struct rsnd_dai *rdai,
|
|
int use_busif)
|
|
int use_busif)
|
|
{
|
|
{
|
|
|
|
+ struct rsnd_dai_stream *io = rsnd_mod_to_io(ssi_mod);
|
|
|
|
+ struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
|
|
int ssi_id = rsnd_mod_id(ssi_mod);
|
|
int ssi_id = rsnd_mod_id(ssi_mod);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -146,10 +148,27 @@ int rsnd_src_ssiu_start(struct rsnd_mod *ssi_mod,
|
|
* DMA settings for SSIU
|
|
* DMA settings for SSIU
|
|
*/
|
|
*/
|
|
if (use_busif) {
|
|
if (use_busif) {
|
|
|
|
+ u32 val = 0x76543210;
|
|
|
|
+ u32 mask = ~0;
|
|
|
|
+
|
|
rsnd_mod_write(ssi_mod, SSI_BUSIF_ADINR,
|
|
rsnd_mod_write(ssi_mod, SSI_BUSIF_ADINR,
|
|
rsnd_get_adinr(ssi_mod));
|
|
rsnd_get_adinr(ssi_mod));
|
|
rsnd_mod_write(ssi_mod, SSI_BUSIF_MODE, 1);
|
|
rsnd_mod_write(ssi_mod, SSI_BUSIF_MODE, 1);
|
|
rsnd_mod_write(ssi_mod, SSI_CTRL, 0x1);
|
|
rsnd_mod_write(ssi_mod, SSI_CTRL, 0x1);
|
|
|
|
+
|
|
|
|
+ mask <<= runtime->channels * 4;
|
|
|
|
+ val = val & mask;
|
|
|
|
+
|
|
|
|
+ switch (runtime->sample_bits) {
|
|
|
|
+ case 16:
|
|
|
|
+ val |= 0x67452301 & ~mask;
|
|
|
|
+ break;
|
|
|
|
+ case 32:
|
|
|
|
+ val |= 0x76543210 & ~mask;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ rsnd_mod_write(ssi_mod, BUSIF_DALIGN, val);
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|