From f11da41a6e1f7e428d00946efae5bd6d40f38ecc Mon Sep 17 00:00:00 2001 From: Lei Chen Date: Wed, 5 Aug 2020 16:19:46 +0800 Subject: [PATCH] disp: msm: sde: add a property to control display input touch event Display input touch event is replaced with IOCTL in performance HAL to early wake up DSI clock. Add a property to enable/disable display input touch event for backward compatibility. Change-Id: Ib6b9123d726e79a2927b05d1ef77c343f01d0c5e Signed-off-by: Lei Chen --- msm/sde/sde_encoder.c | 11 ++++++++--- msm/sde/sde_encoder.h | 1 + msm/sde/sde_hw_catalog.c | 5 +++++ msm/sde/sde_hw_catalog.h | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 15993aa272..c9b0a34097 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2403,7 +2403,8 @@ static void _sde_encoder_input_handler_register( struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); int rc; - if (!sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) + if (!sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE) || + !sde_enc->input_event_enabled) return; if (sde_enc->input_handler && !sde_enc->input_handler->private) { @@ -2424,7 +2425,8 @@ static void _sde_encoder_input_handler_unregister( { struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); - if (!sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) + if (!sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE) || + !sde_enc->input_event_enabled) return; if (sde_enc->input_handler && sde_enc->input_handler->private) { @@ -4677,6 +4679,8 @@ static int sde_encoder_setup_display(struct sde_encoder_virt *sde_enc, (disp_info->capabilities & MSM_DISPLAY_CAP_VID_MODE)) sde_enc->idle_pc_enabled = sde_kms->catalog->has_idle_pc; + sde_enc->input_event_enabled = sde_kms->catalog->wakeup_with_touch; + mutex_lock(&sde_enc->enc_lock); for (i = 0; i < disp_info->num_of_h_tiles && !ret; i++) { /* @@ -4843,7 +4847,8 @@ struct drm_encoder *sde_encoder_init_with_ops( sde_enc->rsc_client = NULL; } - if (disp_info->capabilities & MSM_DISPLAY_CAP_CMD_MODE) { + if (disp_info->capabilities & MSM_DISPLAY_CAP_CMD_MODE && + sde_enc->input_event_enabled) { ret = _sde_encoder_input_handler(sde_enc); if (ret) SDE_ERROR( diff --git a/msm/sde/sde_encoder.h b/msm/sde/sde_encoder.h index adbc63b742..bcde2bada5 100644 --- a/msm/sde/sde_encoder.h +++ b/msm/sde/sde_encoder.h @@ -232,6 +232,7 @@ struct sde_encoder_virt { u32 misr_frame_count; bool idle_pc_enabled; + bool input_event_enabled; struct mutex rc_lock; enum sde_enc_rc_states rc_state; struct kthread_delayed_work delayed_off_work; diff --git a/msm/sde/sde_hw_catalog.c b/msm/sde/sde_hw_catalog.c index 0d1be9120b..8d35877541 100644 --- a/msm/sde/sde_hw_catalog.c +++ b/msm/sde/sde_hw_catalog.c @@ -194,6 +194,7 @@ enum sde_prop { DIM_LAYER, SMART_DMA_REV, IDLE_PC, + WAKEUP_WITH_TOUCH, DEST_SCALER, SMART_PANEL_ALIGN_MODE, MACROTILE_MODE, @@ -560,6 +561,8 @@ static struct sde_prop_type sde_prop[] = { {DIM_LAYER, "qcom,sde-has-dim-layer", false, PROP_TYPE_BOOL}, {SMART_DMA_REV, "qcom,sde-smart-dma-rev", false, PROP_TYPE_STRING}, {IDLE_PC, "qcom,sde-has-idle-pc", false, PROP_TYPE_BOOL}, + {WAKEUP_WITH_TOUCH, "qcom,sde-wakeup-with-touch", false, + PROP_TYPE_BOOL}, {DEST_SCALER, "qcom,sde-has-dest-scaler", false, PROP_TYPE_BOOL}, {SMART_PANEL_ALIGN_MODE, "qcom,sde-smart-panel-align-mode", false, PROP_TYPE_U32}, @@ -3741,6 +3744,8 @@ static void _sde_top_parse_dt_helper(struct sde_mdss_cfg *cfg, cfg->has_src_split = PROP_VALUE_ACCESS(props->values, SRC_SPLIT, 0); cfg->has_dim_layer = PROP_VALUE_ACCESS(props->values, DIM_LAYER, 0); cfg->has_idle_pc = PROP_VALUE_ACCESS(props->values, IDLE_PC, 0); + cfg->wakeup_with_touch = PROP_VALUE_ACCESS(props->values, + WAKEUP_WITH_TOUCH, 0); cfg->pipe_order_type = PROP_VALUE_ACCESS(props->values, PIPE_ORDER_VERSION, 0); cfg->has_base_layer = PROP_VALUE_ACCESS(props->values, BASE_LAYER, 0); diff --git a/msm/sde/sde_hw_catalog.h b/msm/sde/sde_hw_catalog.h index 1226455a32..d674635e97 100644 --- a/msm/sde/sde_hw_catalog.h +++ b/msm/sde/sde_hw_catalog.h @@ -1396,6 +1396,7 @@ struct sde_perf_cfg { * @ubwc_version UBWC feature version (0x0 for not supported) * @ubwc_bw_calc_version indicate how UBWC BW has to be calculated * @has_idle_pc indicate if idle power collapse feature is supported + * @wakeup_with_touch indicate early wake up display with input touch event * @has_hdr HDR feature support * @has_hdr_plus HDR10+ feature support * @dma_formats Supported formats for dma pipe @@ -1474,6 +1475,7 @@ struct sde_mdss_cfg { u32 ubwc_version; u32 ubwc_bw_calc_version; bool has_idle_pc; + bool wakeup_with_touch; u32 vbif_qos_nlvl; u32 ts_prefill_rev; u32 true_inline_rot_rev;