/* disp_pm_te_triggered - check clock gating or not. * this function is called in the TE interrupt handler */ void disp_pm_te_triggered(struct display_driver *dispdrv) { te_count++; if (!dispdrv->pm_status.clock_gating_on) return; spin_lock(&dispdrv->pm_status.slock); if (dispdrv->platform_status > DISP_STATUS_PM0 && atomic_read(&dispdrv->pm_status.lock_count) == 0) { if (dispdrv->pm_status.clock_enabled) { if (!dispdrv->pm_status.trigger_masked) enable_mask(dispdrv); } if (dispdrv->pm_status.clock_enabled && MAX_CLK_GATING_COUNT > 0) { if (!dispdrv->pm_status.trigger_masked) { enable_mask(dispdrv); } ++dispdrv->pm_status.clk_idle_count; if (dispdrv->pm_status.clk_idle_count > MAX_CLK_GATING_COUNT) { disp_pm_gate_lock(dispdrv, true); pm_debug("display_block_clock_off +"); queue_kthread_work(&dispdrv->pm_status.control_clock_gating, &dispdrv->pm_status.control_clock_gating_work); } } else { ++dispdrv->pm_status.pwr_idle_count; if (dispdrv->pm_status.power_gating_on && dispdrv->pm_status.pwr_idle_count > MAX_PWR_GATING_COUNT) { queue_kthread_work(&dispdrv->pm_status.control_power_gating, &dispdrv->pm_status.control_power_gating_work); } } } spin_unlock(&dispdrv->pm_status.slock); }
qd_error_t qd_log_entity(qd_entity_t *entity) { qd_error_clear(); char* module = qd_entity_get_string(entity, "module"); QD_ERROR_RET(); sys_mutex_lock(log_source_lock); qd_log_source_t *src = qd_log_source_lh(module); /* The original log source */ free(module); qd_log_source_t copy = *src; /* A copy to modify outside the lock. */ sys_mutex_unlock(log_source_lock); if (qd_entity_has(entity, "enable")) { char *enable = qd_entity_get_string(entity, "enable"); copy.mask = enable_mask(enable); free(enable); } QD_ERROR_RET(); if (qd_entity_has(entity, "timestamp")) copy.timestamp = qd_entity_get_bool(entity, "timestamp"); QD_ERROR_RET(); if (qd_entity_has(entity, "source")) copy.source = qd_entity_get_bool(entity, "source"); QD_ERROR_RET(); if (qd_entity_has(entity, "output")) { log_sink_free_lh(copy.sink); /* DEFAULT source may already have a sink */ char* output = qd_entity_get_string(entity, "output"); QD_ERROR_RET(); copy.sink = log_sink_lh(output); free(output); if (copy.sink->syslog) /* Timestamp off for syslog. */ copy.timestamp = 0; } sys_mutex_lock(log_source_lock); *src = copy; sys_mutex_unlock(log_source_lock); return qd_error_code(); }