static int cs35l41_smart_amp(struct cs35l41_hda *cs35l41)
 {
+       unsigned int fw_status;
        __be32 halo_sts;
        int ret;
 
                goto clean_dsp;
        }
 
+       ret = regmap_read(cs35l41->regmap, CS35L41_DSP_MBOX_2, &fw_status);
+       if (ret < 0) {
+               dev_err(cs35l41->dev,
+                       "Failed to read firmware status: %d\n", ret);
+               goto clean_dsp;
+       }
+
+       switch (fw_status) {
+       case CSPL_MBOX_STS_RUNNING:
+       case CSPL_MBOX_STS_PAUSED:
+               break;
+       default:
+               dev_err(cs35l41->dev, "Firmware status is invalid: %u\n",
+                       fw_status);
+               goto clean_dsp;
+       }
+
        ret = cs35l41_set_cspl_mbox_cmd(cs35l41->dev, cs35l41->regmap, CSPL_MBOX_CMD_PAUSE);
        if (ret) {
                dev_err(cs35l41->dev, "Error waiting for DSP to pause: %u\n", ret);