aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_modes.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/drm_modes.c')
-rw-r--r--drivers/gpu/drm/drm_modes.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index ab6e70eadc58..49404ce1666e 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -566,7 +566,9 @@ EXPORT_SYMBOL(drm_mode_height);
566 * FIXME: why is this needed? shouldn't vrefresh be set already? 566 * FIXME: why is this needed? shouldn't vrefresh be set already?
567 * 567 *
568 * RETURNS: 568 * RETURNS:
569 * Vertical refresh rate of @mode x 1000. For precision reasons. 569 * Vertical refresh rate. It will be the result of actual value plus 0.5.
570 * If it is 70.288, it will return 70Hz.
571 * If it is 59.6, it will return 60Hz.
570 */ 572 */
571int drm_mode_vrefresh(struct drm_display_mode *mode) 573int drm_mode_vrefresh(struct drm_display_mode *mode)
572{ 574{
@@ -576,14 +578,13 @@ int drm_mode_vrefresh(struct drm_display_mode *mode)
576 if (mode->vrefresh > 0) 578 if (mode->vrefresh > 0)
577 refresh = mode->vrefresh; 579 refresh = mode->vrefresh;
578 else if (mode->htotal > 0 && mode->vtotal > 0) { 580 else if (mode->htotal > 0 && mode->vtotal > 0) {
581 int vtotal;
582 vtotal = mode->vtotal;
579 /* work out vrefresh the value will be x1000 */ 583 /* work out vrefresh the value will be x1000 */
580 calc_val = (mode->clock * 1000); 584 calc_val = (mode->clock * 1000);
581
582 calc_val /= mode->htotal; 585 calc_val /= mode->htotal;
583 calc_val *= 1000; 586 refresh = (calc_val + vtotal / 2) / vtotal;
584 calc_val /= mode->vtotal;
585 587
586 refresh = calc_val;
587 if (mode->flags & DRM_MODE_FLAG_INTERLACE) 588 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
588 refresh *= 2; 589 refresh *= 2;
589 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) 590 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)