/* disp_pm_add_refcount - it is called in the early start of the * update_reg_handler */ int disp_pm_add_refcount(struct display_driver *dispdrv) { unsigned long flags; if (dispdrv->platform_status == DISP_STATUS_PM0) return 0; if (!dispdrv->pm_status.clock_gating_on) return 0; if (dispdrv->decon_driver.sfb->power_state == POWER_DOWN) return 0; init_gating_idle_count(dispdrv); flush_kthread_worker(&dispdrv->pm_status.control_clock_gating); flush_kthread_worker(&dispdrv->pm_status.control_power_gating); if (dispdrv->decon_driver.sfb->power_state == POWER_HIBER_DOWN) display_hibernation_power_on(dispdrv); display_block_clock_on(dispdrv); spin_lock_irqsave(&dispdrv->pm_status.slock, flags); if (dispdrv->pm_status.trigger_masked) { disable_mask(dispdrv); } spin_unlock_irqrestore(&dispdrv->pm_status.slock, flags); return 0; }
static void decon_power_gating_handler(struct kthread_work *work) { struct display_driver *dispdrv = get_display_driver(); if (dispdrv->pm_status.pwr_idle_count > MAX_PWR_GATING_COUNT) { if (!check_camera_is_running()) { display_hibernation_power_off(dispdrv); init_gating_idle_count(dispdrv); } } else if (dispdrv->decon_driver.sfb->power_state == POWER_HIBER_DOWN) { display_hibernation_power_on(dispdrv); } }
/* disp_pm_add_refcount - it is called in the early start of the * update_reg_handler */ int disp_pm_add_refcount(struct display_driver *dispdrv) { if (dispdrv->platform_status == DISP_STATUS_PM0) return 0; if (!dispdrv->pm_status.clock_gating_on) return 0; if (dispdrv->decon_driver.sfb->power_state == POWER_DOWN) return 0; init_gating_idle_count(dispdrv); flush_kthread_worker(&dispdrv->pm_status.control_power_gating); if (dispdrv->decon_driver.sfb->power_state == POWER_HIBER_DOWN) { request_dynamic_hotplug(false); display_hibernation_power_on(dispdrv); } display_block_clock_on(dispdrv); return 0; }