amdgpu_atombios_scratch_regs_save(adev);
 
-       dce_v10_0_hpd_fini(adev);
-
-       return 0;
+       return dce_v10_0_hw_fini(handle);
 }
 
 static int dce_v10_0_resume(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+       int ret;
 
-       dce_v10_0_init_golden_registers(adev);
+       ret = dce_v10_0_hw_init(handle);
 
        amdgpu_atombios_scratch_regs_restore(adev);
 
-       /* init dig PHYs, disp eng pll */
-       amdgpu_atombios_encoder_init_dig(adev);
-       amdgpu_atombios_crtc_set_disp_eng_pll(adev, adev->clock.default_dispclk);
        /* turn on the BL */
        if (adev->mode_info.bl_encoder) {
                u8 bl_level = amdgpu_display_backlight_get_level(adev,
                                                    bl_level);
        }
 
-       /* initialize hpd */
-       dce_v10_0_hpd_init(adev);
-
-       return 0;
+       return ret;
 }
 
 static bool dce_v10_0_is_idle(void *handle)
 
        dce_v11_0_init_golden_registers(adev);
 
        /* init dig PHYs, disp eng pll */
+       amdgpu_atombios_crtc_powergate_init(adev);
        amdgpu_atombios_encoder_init_dig(adev);
        amdgpu_atombios_crtc_set_disp_eng_pll(adev, adev->clock.default_dispclk);
 
 
        amdgpu_atombios_scratch_regs_save(adev);
 
-       dce_v11_0_hpd_fini(adev);
-
-       return 0;
+       return dce_v11_0_hw_fini(handle);
 }
 
 static int dce_v11_0_resume(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+       int ret;
 
-       dce_v11_0_init_golden_registers(adev);
+       ret = dce_v11_0_hw_init(handle);
 
        amdgpu_atombios_scratch_regs_restore(adev);
 
-       /* init dig PHYs, disp eng pll */
-       amdgpu_atombios_crtc_powergate_init(adev);
-       amdgpu_atombios_encoder_init_dig(adev);
-       amdgpu_atombios_crtc_set_disp_eng_pll(adev, adev->clock.default_dispclk);
        /* turn on the BL */
        if (adev->mode_info.bl_encoder) {
                u8 bl_level = amdgpu_display_backlight_get_level(adev,
                                                    bl_level);
        }
 
-       /* initialize hpd */
-       dce_v11_0_hpd_init(adev);
-
-       return 0;
+       return ret;
 }
 
 static bool dce_v11_0_is_idle(void *handle)
 
 
        amdgpu_atombios_scratch_regs_save(adev);
 
-       dce_v8_0_hpd_fini(adev);
-
-       return 0;
+       return dce_v8_0_hw_fini(handle);
 }
 
 static int dce_v8_0_resume(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+       int ret;
+
+       ret = dce_v8_0_hw_init(handle);
 
        amdgpu_atombios_scratch_regs_restore(adev);
 
-       /* init dig PHYs, disp eng pll */
-       amdgpu_atombios_encoder_init_dig(adev);
-       amdgpu_atombios_crtc_set_disp_eng_pll(adev, adev->clock.default_dispclk);
        /* turn on the BL */
        if (adev->mode_info.bl_encoder) {
                u8 bl_level = amdgpu_display_backlight_get_level(adev,
                                                    bl_level);
        }
 
-       /* initialize hpd */
-       dce_v8_0_hpd_init(adev);
-
-       return 0;
+       return ret;
 }
 
 static bool dce_v8_0_is_idle(void *handle)