diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/drm_edid.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 2f325bcd0708..fb7cf0e796f6 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -1329,7 +1329,7 @@ static u32 edid_get_quirks(struct edid *edid) | |||
| 1329 | } | 1329 | } |
| 1330 | 1330 | ||
| 1331 | #define MODE_SIZE(m) ((m)->hdisplay * (m)->vdisplay) | 1331 | #define MODE_SIZE(m) ((m)->hdisplay * (m)->vdisplay) |
| 1332 | #define MODE_REFRESH_DIFF(m,r) (abs((m)->vrefresh - target_refresh)) | 1332 | #define MODE_REFRESH_DIFF(c,t) (abs((c) - (t))) |
| 1333 | 1333 | ||
| 1334 | /** | 1334 | /** |
| 1335 | * edid_fixup_preferred - set preferred modes based on quirk list | 1335 | * edid_fixup_preferred - set preferred modes based on quirk list |
| @@ -1344,6 +1344,7 @@ static void edid_fixup_preferred(struct drm_connector *connector, | |||
| 1344 | { | 1344 | { |
| 1345 | struct drm_display_mode *t, *cur_mode, *preferred_mode; | 1345 | struct drm_display_mode *t, *cur_mode, *preferred_mode; |
| 1346 | int target_refresh = 0; | 1346 | int target_refresh = 0; |
| 1347 | int cur_vrefresh, preferred_vrefresh; | ||
| 1347 | 1348 | ||
| 1348 | if (list_empty(&connector->probed_modes)) | 1349 | if (list_empty(&connector->probed_modes)) |
| 1349 | return; | 1350 | return; |
| @@ -1366,10 +1367,14 @@ static void edid_fixup_preferred(struct drm_connector *connector, | |||
| 1366 | if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode)) | 1367 | if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode)) |
| 1367 | preferred_mode = cur_mode; | 1368 | preferred_mode = cur_mode; |
| 1368 | 1369 | ||
| 1370 | cur_vrefresh = cur_mode->vrefresh ? | ||
| 1371 | cur_mode->vrefresh : drm_mode_vrefresh(cur_mode); | ||
| 1372 | preferred_vrefresh = preferred_mode->vrefresh ? | ||
| 1373 | preferred_mode->vrefresh : drm_mode_vrefresh(preferred_mode); | ||
| 1369 | /* At a given size, try to get closest to target refresh */ | 1374 | /* At a given size, try to get closest to target refresh */ |
| 1370 | if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && | 1375 | if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && |
| 1371 | MODE_REFRESH_DIFF(cur_mode, target_refresh) < | 1376 | MODE_REFRESH_DIFF(cur_vrefresh, target_refresh) < |
| 1372 | MODE_REFRESH_DIFF(preferred_mode, target_refresh)) { | 1377 | MODE_REFRESH_DIFF(preferred_vrefresh, target_refresh)) { |
| 1373 | preferred_mode = cur_mode; | 1378 | preferred_mode = cur_mode; |
| 1374 | } | 1379 | } |
| 1375 | } | 1380 | } |
