/* FIXME: it needs SSI_MODE2/3 in the future */
                RSND_GEN_M_REG(SSI_BUSIF_MODE,  0x0,    0x80),
                RSND_GEN_M_REG(SSI_BUSIF_ADINR, 0x4,    0x80),
+               RSND_GEN_M_REG(BUSIF_DALIGN,    0x8,    0x80),
                RSND_GEN_M_REG(SSI_CTRL,        0x10,   0x80),
                RSND_GEN_M_REG(INT_ENABLE,      0x18,   0x80),
        };
 
        RSND_REG_SHARE19,
        RSND_REG_SHARE20,
        RSND_REG_SHARE21,
+       RSND_REG_SHARE22,
 
        RSND_REG_MAX,
 };
 #define RSND_REG_AUDIO_CLK_SEL2                RSND_REG_SHARE19
 #define RSND_REG_CMD_CTRL              RSND_REG_SHARE20
 #define RSND_REG_CMDOUT_TIMSEL         RSND_REG_SHARE21
+#define RSND_REG_BUSIF_DALIGN          RSND_REG_SHARE22
 
 struct rsnd_of_data;
 struct rsnd_priv;
 
                        struct rsnd_dai *rdai,
                        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);
 
        /*
         * DMA settings for SSIU
         */
        if (use_busif) {
+               u32 val = 0x76543210;
+               u32 mask = ~0;
+
                rsnd_mod_write(ssi_mod, SSI_BUSIF_ADINR,
                               rsnd_get_adinr(ssi_mod));
                rsnd_mod_write(ssi_mod, SSI_BUSIF_MODE,  1);
                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;