Loading drivers/gpu/drm/msm/sde/sde_encoder.c +24 −6 Original line number Diff line number Diff line Loading @@ -80,6 +80,11 @@ /* Maximum number of VSYNC wait attempts for RSC state transition */ #define MAX_RSC_WAIT 5 #define TOPOLOGY_DUALPIPE_MERGE_MODE(x) \ (((x) == SDE_RM_TOPOLOGY_DUALPIPE_DSCMERGE) || \ ((x) == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE) || \ ((x) == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC)) /** * enum sde_enc_rc_events - events for resource control state machine * @SDE_ENC_RC_EVENT_KICKOFF: Loading Loading @@ -3403,13 +3408,14 @@ void sde_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc) static void _sde_encoder_setup_dither(struct sde_encoder_phys *phys) { void *dither_cfg; int ret = 0, rc; int ret = 0, rc, i = 0; size_t len = 0; enum sde_rm_topology_name topology; struct drm_encoder *drm_enc; struct msm_mode_info mode_info; struct msm_display_dsc_info *dsc = NULL; struct sde_encoder_virt *sde_enc; struct sde_hw_pingpong *hw_pp; if (!phys || !phys->connector || !phys->hw_pp || !phys->hw_pp->ops.setup_dither || !phys->parent) Loading @@ -3432,12 +3438,24 @@ static void _sde_encoder_setup_dither(struct sde_encoder_phys *phys) /* disable dither for 10 bpp or 10bpc dsc config */ if (dsc->bpp == 10 || dsc->bpc == 10) { phys->hw_pp->ops.setup_dither(phys->hw_pp, NULL, 0); } else { return; } ret = sde_connector_get_dither_cfg(phys->connector, phys->connector->state, &dither_cfg, &len); if (!ret) phys->hw_pp->ops.setup_dither(phys->hw_pp, dither_cfg, len); if (ret) return; if (TOPOLOGY_DUALPIPE_MERGE_MODE(topology)) { for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) { hw_pp = sde_enc->hw_pp[i]; if (hw_pp) { phys->hw_pp->ops.setup_dither(hw_pp, dither_cfg, len); } } } else { phys->hw_pp->ops.setup_dither(phys->hw_pp, dither_cfg, len); } } Loading Loading
drivers/gpu/drm/msm/sde/sde_encoder.c +24 −6 Original line number Diff line number Diff line Loading @@ -80,6 +80,11 @@ /* Maximum number of VSYNC wait attempts for RSC state transition */ #define MAX_RSC_WAIT 5 #define TOPOLOGY_DUALPIPE_MERGE_MODE(x) \ (((x) == SDE_RM_TOPOLOGY_DUALPIPE_DSCMERGE) || \ ((x) == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE) || \ ((x) == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC)) /** * enum sde_enc_rc_events - events for resource control state machine * @SDE_ENC_RC_EVENT_KICKOFF: Loading Loading @@ -3403,13 +3408,14 @@ void sde_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc) static void _sde_encoder_setup_dither(struct sde_encoder_phys *phys) { void *dither_cfg; int ret = 0, rc; int ret = 0, rc, i = 0; size_t len = 0; enum sde_rm_topology_name topology; struct drm_encoder *drm_enc; struct msm_mode_info mode_info; struct msm_display_dsc_info *dsc = NULL; struct sde_encoder_virt *sde_enc; struct sde_hw_pingpong *hw_pp; if (!phys || !phys->connector || !phys->hw_pp || !phys->hw_pp->ops.setup_dither || !phys->parent) Loading @@ -3432,12 +3438,24 @@ static void _sde_encoder_setup_dither(struct sde_encoder_phys *phys) /* disable dither for 10 bpp or 10bpc dsc config */ if (dsc->bpp == 10 || dsc->bpc == 10) { phys->hw_pp->ops.setup_dither(phys->hw_pp, NULL, 0); } else { return; } ret = sde_connector_get_dither_cfg(phys->connector, phys->connector->state, &dither_cfg, &len); if (!ret) phys->hw_pp->ops.setup_dither(phys->hw_pp, dither_cfg, len); if (ret) return; if (TOPOLOGY_DUALPIPE_MERGE_MODE(topology)) { for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) { hw_pp = sde_enc->hw_pp[i]; if (hw_pp) { phys->hw_pp->ops.setup_dither(hw_pp, dither_cfg, len); } } } else { phys->hw_pp->ops.setup_dither(phys->hw_pp, dither_cfg, len); } } Loading