{
 }
 
+static void hifier_resume(struct oxygen *chip)
+{
+       hifier_registers_init(chip);
+}
+
 static void set_ak4396_params(struct oxygen *chip,
                               struct snd_pcm_hw_params *params)
 {
        .init = hifier_init,
        .control_filter = hifier_control_filter,
        .cleanup = hifier_cleanup,
-       .resume = hifier_registers_init,
+       .resume = hifier_resume,
        .set_dac_params = set_ak4396_params,
        .set_adc_params = set_cs5340_params,
        .update_dac_volume = update_ak4396_volume,
 
        wm8785_registers_init(chip);
 }
 
+static void meridian_resume(struct oxygen *chip)
+{
+       ak4396_registers_init(chip);
+}
+
 static void set_ak4396_params(struct oxygen *chip,
                              struct snd_pcm_hw_params *params)
 {
 {
        if (driver_data == MODEL_MERIDIAN) {
                chip->model.init = meridian_init;
-               chip->model.resume = ak4396_registers_init;
+               chip->model.resume = meridian_resume;
                chip->model.set_adc_params = set_ak5385_params;
                chip->model.device_config = PLAYBACK_0_TO_I2S |
                                            PLAYBACK_1_TO_SPDIF |
 
        snd_component_add(chip->card, "CS5361");
 }
 
-static void xonar_cleanup(struct oxygen *chip)
+static void xonar_disable_output(struct oxygen *chip)
 {
        struct xonar_data *data = chip->model_data;
 
        oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, data->output_enable_bit);
 }
 
+static void xonar_d2_cleanup(struct oxygen *chip)
+{
+       xonar_disable_output(chip);
+}
+
 static void xonar_d1_cleanup(struct oxygen *chip)
 {
-       xonar_cleanup(chip);
+       xonar_disable_output(chip);
        cs4362a_write(chip, 0x01, CS4362A_PDN | CS4362A_CPEN);
        oxygen_clear_bits8(chip, OXYGEN_FUNCTION, OXYGEN_FUNCTION_RESET_CODEC);
 }
 
+static void xonar_d2_suspend(struct oxygen *chip)
+{
+       xonar_d2_cleanup(chip);
+}
+
+static void xonar_d1_suspend(struct oxygen *chip)
+{
+       xonar_d1_cleanup(chip);
+}
+
 static void xonar_d2_resume(struct oxygen *chip)
 {
        pcm1796_init(chip);
        .init = xonar_d2_init,
        .control_filter = xonar_d2_control_filter,
        .mixer_init = xonar_d2_mixer_init,
-       .cleanup = xonar_cleanup,
-       .suspend = xonar_cleanup,
+       .cleanup = xonar_d2_cleanup,
+       .suspend = xonar_d2_suspend,
        .resume = xonar_d2_resume,
        .set_dac_params = set_pcm1796_params,
        .set_adc_params = set_cs53x1_params,
        .control_filter = xonar_d1_control_filter,
        .mixer_init = xonar_d1_mixer_init,
        .cleanup = xonar_d1_cleanup,
-       .suspend = xonar_d1_cleanup,
+       .suspend = xonar_d1_suspend,
        .resume = xonar_d1_resume,
        .set_dac_params = set_cs43xx_params,
        .set_adc_params = set_cs53x1_params,