diff --git a/msm/dp/dp_panel.c b/msm/dp/dp_panel.c index 3937eda85b9d..407f304369d0 100644 --- a/msm/dp/dp_panel.c +++ b/msm/dp/dp_panel.c @@ -1357,9 +1357,28 @@ static int dp_panel_dsc_prepare_basic_params( u32 ppr_per_slice; u32 slice_caps_1; u32 slice_caps_2; + u32 dsc_version_major, dsc_version_minor; + bool dsc_version_supported = false; - comp_info->dsc_info.config.dsc_version_major = 0x1; - comp_info->dsc_info.config.dsc_version_minor = 0x1; + dsc_version_major = dp_panel->sink_dsc_caps.version & 0xF; + dsc_version_minor = (dp_panel->sink_dsc_caps.version >> 4) & 0xF; + dsc_version_supported = (dsc_version_major == 0x1 && + (dsc_version_minor == 0x1 || dsc_version_minor == 0x2)) + ? true : false; + + DP_DEBUG("DSC version: %d.%d, dpcd value: %x\n", + dsc_version_major, dsc_version_minor, + dp_panel->sink_dsc_caps.version); + + if (!dsc_version_supported) { + dsc_version_major = 1; + dsc_version_minor = 1; + DP_ERR("invalid sink DSC version, fallback to %d.%d\n", + dsc_version_major, dsc_version_minor); + } + + comp_info->dsc_info.config.dsc_version_major = dsc_version_major; + comp_info->dsc_info.config.dsc_version_minor = dsc_version_minor; comp_info->dsc_info.scr_rev = 0x0; comp_info->dsc_info.slice_per_pkt = 0;