diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/drm_crtc.c | 2 | ||||
| -rw-r--r-- | linux-core/drm_modes.c | 14 | 
2 files changed, 12 insertions, 4 deletions
diff --git a/linux-core/drm_crtc.c b/linux-core/drm_crtc.c index a099a6dc..f95facce 100644 --- a/linux-core/drm_crtc.c +++ b/linux-core/drm_crtc.c @@ -1085,7 +1085,7 @@ void drm_crtc_convert_to_umode(struct drm_mode_modeinfo *out, struct drm_display  	out->vsync_end = in->vsync_end;  	out->vtotal = in->vtotal;  	out->vscan = in->vscan; -	 +	out->vrefresh = in->vrefresh;  	out->flags = in->flags;  	strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);  	out->name[DRM_DISPLAY_MODE_LEN-1] = 0; diff --git a/linux-core/drm_modes.c b/linux-core/drm_modes.c index 648e85e5..54c25137 100644 --- a/linux-core/drm_modes.c +++ b/linux-core/drm_modes.c @@ -47,7 +47,7 @@ void drm_mode_debug_printmodeline(struct drm_device *dev,  				  struct drm_display_mode *mode)  {  	DRM_DEBUG("Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d\n", -		  mode->mode_id, mode->name, mode->vrefresh / 1000, mode->clock, +		  mode->mode_id, mode->name, mode->vrefresh, mode->clock,  		  mode->hdisplay, mode->hsync_start,  		  mode->hsync_end, mode->htotal,  		  mode->vdisplay, mode->vsync_start, @@ -144,16 +144,24 @@ EXPORT_SYMBOL(drm_mode_height);   * FIXME: why is this needed?   *   * RETURNS: - * Vertical refresh rate of @mode. + * Vertical refresh rate of @mode x 1000. For precision reasons.   */  int drm_mode_vrefresh(struct drm_display_mode *mode)  {  	int refresh = 0; +	unsigned int calc_val;  	if (mode->vrefresh > 0)  		refresh = mode->vrefresh;  	else if (mode->htotal > 0 && mode->vtotal > 0) { -		refresh = ((mode->clock * 1000) * 1000) / mode->htotal / mode->vtotal; +		/* work out vrefresh the value will be x1000 */ +		calc_val = (mode->clock * 1000); + +		calc_val /= mode->htotal; +		calc_val *= 1000; +		calc_val /= mode->vtotal; + +		refresh = calc_val;  		if (mode->flags & V_INTERLACE)  			refresh *= 2;  		if (mode->flags & V_DBLSCAN)  | 
