return -EINVAL;
        }
 
+       /* Reset the FIFOs before applying new params */
+       hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
+       hdmi_write(audio, (u8)~HDMI_MC_SWRSTZ_I2SSWRST_REQ, HDMI_MC_SWRSTZ);
+
        inputclkfs      = HDMI_AUD_INPUTCLKFS_64FS;
        conf0           = HDMI_AUD_CONF0_I2S_ALL_ENABLE;
 
        struct dw_hdmi *hdmi = audio->hdmi;
 
        dw_hdmi_audio_disable(hdmi);
-
-       hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
 }
 
 static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
 
        HDMI_MC_CLKDIS_PIXELCLK_DISABLE = 0x1,
 
 /* MC_SWRSTZ field values */
+       HDMI_MC_SWRSTZ_I2SSWRST_REQ = 0x08,
        HDMI_MC_SWRSTZ_TMDSSWRST_REQ = 0x02,
 
 /* MC_FLOWCTRL field values */