dev_dbg(dev, "Play (Complete)\n");
  
-       cs35l41_global_enable(dev, reg, cs35l41->hw_cfg.bst_type, 1, NULL,
+       cs35l41_global_enable(dev, reg, cs35l41->hw_cfg.bst_type, 1,
                              cs35l41->firmware_running);
 -      if (cs35l41->firmware_running) {
 -              regmap_multi_reg_write(reg, cs35l41_hda_unmute_dsp,
 -                                     ARRAY_SIZE(cs35l41_hda_unmute_dsp));
 -      } else {
 -              regmap_multi_reg_write(reg, cs35l41_hda_unmute,
 -                                     ARRAY_SIZE(cs35l41_hda_unmute));
 -      }
 +      cs35l41_mute(dev, false);
  }
  
  static void cs35l41_hda_pause_start(struct device *dev)
  
        dev_dbg(dev, "Pause (Start)\n");
  
 -      regmap_multi_reg_write(reg, cs35l41_hda_mute, ARRAY_SIZE(cs35l41_hda_mute));
 +      cs35l41_mute(dev, true);
-       cs35l41_global_enable(dev, reg, cs35l41->hw_cfg.bst_type, 0, NULL,
+       cs35l41_global_enable(dev, reg, cs35l41->hw_cfg.bst_type, 0,
                              cs35l41->firmware_running);
  }
  
 
  
        if (!sdev->dspless_mode_selected)
                iounmap(sdev->bar[HDA_DSP_BAR]);
- 
-       return 0;
 +}
  
 -      iounmap(bus->remap_addr);
 -
 +int hda_dsp_remove_late(struct snd_sof_dev *sdev)
 +{
 +      iounmap(sof_to_bus(sdev)->remap_addr);
        sof_hda_bus_exit(sdev);
 -
        hda_codec_i915_exit(sdev);
 +
 +      return 0;
  }
  
  int hda_power_down_dsp(struct snd_sof_dev *sdev)
 
  /*
   * DSP Core services.
   */
 +int hda_dsp_probe_early(struct snd_sof_dev *sdev);
  int hda_dsp_probe(struct snd_sof_dev *sdev);
- int hda_dsp_remove(struct snd_sof_dev *sdev);
+ void hda_dsp_remove(struct snd_sof_dev *sdev);
 +int hda_dsp_remove_late(struct snd_sof_dev *sdev);
  int hda_dsp_core_power_up(struct snd_sof_dev *sdev, unsigned int core_mask);
  int hda_dsp_core_run(struct snd_sof_dev *sdev, unsigned int core_mask);
  int hda_dsp_enable_core(struct snd_sof_dev *sdev, unsigned int core_mask);
 
        return sof_ops(sdev)->probe(sdev);
  }
  
- static inline int snd_sof_remove(struct snd_sof_dev *sdev)
+ static inline void snd_sof_remove(struct snd_sof_dev *sdev)
  {
        if (sof_ops(sdev)->remove)
-               return sof_ops(sdev)->remove(sdev);
- 
-       return 0;
+               sof_ops(sdev)->remove(sdev);
  }
  
 +static inline int snd_sof_remove_late(struct snd_sof_dev *sdev)
 +{
 +      if (sof_ops(sdev)->remove_late)
 +              return sof_ops(sdev)->remove_late(sdev);
 +
 +      return 0;
 +}
 +
  static inline int snd_sof_shutdown(struct snd_sof_dev *sdev)
  {
        if (sof_ops(sdev)->shutdown)
 
  struct snd_sof_dsp_ops {
  
        /* probe/remove/shutdown */
 +      int (*probe_early)(struct snd_sof_dev *sof_dev); /* optional */
        int (*probe)(struct snd_sof_dev *sof_dev); /* mandatory */
-       int (*remove)(struct snd_sof_dev *sof_dev); /* optional */
+       void (*remove)(struct snd_sof_dev *sof_dev); /* optional */
 +      int (*remove_late)(struct snd_sof_dev *sof_dev); /* optional */
        int (*shutdown)(struct snd_sof_dev *sof_dev); /* optional */
  
        /* DSP core boot / reset */