drm/amdgpu: sort probed modes before adding common modes
[Why] There are monitors which can have more than one preferred mode set. There are chances in these monitors that if common modes are added in function amdgpu_dm_connector_add_common_modes(), these common modes can be calculated with different preferred mode than the one used in function decide_crtc_timing_for_drm_display_mode(). The preferred mode can be different because after common modes are added, the mode list is sorted and this changes the order of preferred modes in the list. The first mode in the list with preferred flag set is selected as preferred mode. Due to this the preferred mode selected varies. If same preferred mode is not selected in common mode calculation and crtc timing, then during mode set instead of setting preferred timing, common mode timing will be applied which can cause "out of range" message in the monitor with monitor blanking out. [How] Sort the modes before adding common modes. The same sorting function is called during common mode addition and deciding crtc timing. Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohanmarimuthu@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
42ba01fc30
commit
f1e5e91302
@ -4588,6 +4588,15 @@ static void amdgpu_dm_connector_ddc_get_modes(struct drm_connector *connector,
|
||||
amdgpu_dm_connector->num_modes =
|
||||
drm_add_edid_modes(connector, edid);
|
||||
|
||||
/* sorting the probed modes before calling function
|
||||
* amdgpu_dm_get_native_mode() since EDID can have
|
||||
* more than one preferred mode. The modes that are
|
||||
* later in the probed mode list could be of higher
|
||||
* and preferred resolution. For example, 3840x2160
|
||||
* resolution in base EDID preferred timing and 4096x2160
|
||||
* preferred resolution in DID extension block later.
|
||||
*/
|
||||
drm_mode_sort(&connector->probed_modes);
|
||||
amdgpu_dm_get_native_mode(connector);
|
||||
} else {
|
||||
amdgpu_dm_connector->num_modes = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user