static void __display_block_clock_on(struct display_driver *dispdrv)
{
	/* DSIM -> MIC -> DECON */
	call_pm_ops(dispdrv, dsi_driver, clk_on, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, clk_on, dispdrv);
#endif
	call_pm_ops(dispdrv, decon_driver, clk_on, dispdrv);
}
static int __display_hibernation_power_on(struct display_driver *dispdrv)
{
	/* already clocks are on */

	/* DSIM -> MIC -> DECON */
	call_pm_ops(dispdrv, dsi_driver, pwr_on, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, pwr_on, dispdrv);
#endif
	call_pm_ops(dispdrv, decon_driver, pwr_on, dispdrv);
	return 0;
}
static int __display_hibernation_power_on(struct display_driver *dispdrv)
{
	/* already clocks are on */
	save_decon_operation_time(OPS_CALL_DISPLAY_POWER_ON);

	/* DSIM -> MIC -> DECON */
	call_pm_ops(dispdrv, dsi_driver, pwr_on, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, pwr_on, dispdrv);
#endif
	call_pm_ops(dispdrv, decon_driver, pwr_on, dispdrv);
	return 0;
}
static int __display_hibernation_power_off(struct display_driver *dispdrv)
{
	call_block_pm_ops(dispdrv, clk_on, dispdrv);

	/* DECON -> MIC -> DSIM */
	call_pm_ops(dispdrv, decon_driver, pwr_off, dispdrv);

#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, pwr_off, dispdrv);
#endif
	call_pm_ops(dispdrv, dsi_driver, pwr_off, dispdrv);

	return 0;
}
static void __display_block_clock_on(struct display_driver *dispdrv)
{
	/* DSIM -> MIC -> DECON -> SMMU */
	call_pm_ops(dispdrv, dsi_driver, clk_on, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, clk_on, dispdrv);
#endif
	call_pm_ops(dispdrv, decon_driver, clk_on, dispdrv);

#ifdef CONFIG_ION_EXYNOS
	if (dispdrv->platform_status > DISP_STATUS_PM0) {
		if (iovmm_activate(dispdrv->decon_driver.sfb->dev) < 0)
			pr_err("%s: failed to reactivate vmm\n", __func__);
	}
#endif
}
static int __display_block_clock_off(struct display_driver *dispdrv)
{
	if (get_display_line_count(dispdrv)) {
		pm_debug("wait until last frame is totally transferred %d:",
				get_display_line_count(dispdrv));
		return -EBUSY;
	}

	/* DECON -> MIC -> DSIM */
	call_pm_ops(dispdrv, decon_driver, clk_off, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, clk_off, dispdrv);
#endif
	call_pm_ops(dispdrv, dsi_driver, clk_off, dispdrv);
	return 0;
}
static int __display_hibernation_power_off(struct display_driver *dispdrv)
{
	save_decon_operation_time(OPS_CALL_DISPLAY_POWER_OFF);

	call_block_pm_ops(dispdrv, clk_on, dispdrv);

	/* DECON -> MIC -> DSIM */
	call_pm_ops(dispdrv, decon_driver, pwr_off, dispdrv);

#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, pwr_off, dispdrv);
#endif
	call_pm_ops(dispdrv, dsi_driver, pwr_off, dispdrv);

	return 0;
}
static int __display_block_clock_off(struct display_driver *dispdrv)
{
	if (get_display_line_count(dispdrv)) {
		pm_debug("wait until last frame is totally transferred %d:",
				get_display_line_count(dispdrv));
		return -EBUSY;
	}

	/* SMMU -> DECON -> MIC -> DSIM */
#ifdef CONFIG_ION_EXYNOS
	if (dispdrv->platform_status > DISP_STATUS_PM0)
		iovmm_deactivate(dispdrv->decon_driver.sfb->dev);
#endif
	call_pm_ops(dispdrv, decon_driver, clk_off, dispdrv);
#ifdef CONFIG_DECON_MIC
	call_pm_ops(dispdrv, mic_driver, clk_off, dispdrv);
#endif
	call_pm_ops(dispdrv, dsi_driver, clk_off, dispdrv);
	return 0;
}