diff options
Diffstat (limited to 'drivers/gpu/drm/drm_modes.c')
| -rw-r--r-- | drivers/gpu/drm/drm_modes.c | 16 | 
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 53f07ac7c174..ac6a35212501 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -49,13 +49,7 @@   */  void drm_mode_debug_printmodeline(const struct drm_display_mode *mode)  { -	DRM_DEBUG_KMS("Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d " -			"0x%x 0x%x\n", -		mode->base.id, mode->name, mode->vrefresh, mode->clock, -		mode->hdisplay, mode->hsync_start, -		mode->hsync_end, mode->htotal, -		mode->vdisplay, mode->vsync_start, -		mode->vsync_end, mode->vtotal, mode->type, mode->flags); +	DRM_DEBUG_KMS("Modeline " DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));  }  EXPORT_SYMBOL(drm_mode_debug_printmodeline); @@ -165,6 +159,7 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,  	unsigned int vfieldrate, hperiod;  	int hdisplay_rnd, hmargin, vdisplay_rnd, vmargin, vsync;  	int interlace; +	u64 tmp;  	/* allocate the drm_display_mode structure. If failure, we will  	 * return directly @@ -322,8 +317,11 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,  		drm_mode->vsync_end = drm_mode->vsync_start + vsync;  	}  	/* 15/13. Find pixel clock frequency (kHz for xf86) */ -	drm_mode->clock = drm_mode->htotal * HV_FACTOR * 1000 / hperiod; -	drm_mode->clock -= drm_mode->clock % CVT_CLOCK_STEP; +	tmp = drm_mode->htotal; /* perform intermediate calcs in u64 */ +	tmp *= HV_FACTOR * 1000; +	do_div(tmp, hperiod); +	tmp -= drm_mode->clock % CVT_CLOCK_STEP; +	drm_mode->clock = tmp;  	/* 18/16. Find actual vertical frame frequency */  	/* ignore - just set the mode flag for interlaced */  	if (interlaced) {  |