From 2e504e32aed855d4710e03b469d0b8b48c2725eb Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 3 Dec 2009 17:44:37 -0500 Subject: [PATCH] --- yaml --- r: 174495 b: refs/heads/master c: 7ac96a9cb4982140e206bf3b58236efb2498ab3f h: refs/heads/master i: 174493: 26d55fe1e4c1a997935911ad4e7dc1c6374ba255 174491: 267fab63dd1224542ba1aa1be24fb68e9633089e 174487: 1e303c429633470e3a2ccb3d6a3f11d2247fd3d8 174479: b6ff25b224ea209ae787ca16fcb5a334c89ac948 174463: 9aae02c37b978a82c5c902a4583a9548f6382f8f v: v3 --- [refs] | 2 +- trunk/drivers/gpu/drm/drm_modes.c | 28 +++++++++++++++++++++++++++- trunk/include/drm/drm_crtc.h | 7 ++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index d3c1bc69db49..3b5b4c609eac 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9cf00977da092096c7a983276dad8b3002d23a99 +refs/heads/master: 7ac96a9cb4982140e206bf3b58236efb2498ab3f diff --git a/trunk/drivers/gpu/drm/drm_modes.c b/trunk/drivers/gpu/drm/drm_modes.c index 51f677215f1d..6d81a02463a3 100644 --- a/trunk/drivers/gpu/drm/drm_modes.c +++ b/trunk/drivers/gpu/drm/drm_modes.c @@ -553,6 +553,32 @@ int drm_mode_height(struct drm_display_mode *mode) } EXPORT_SYMBOL(drm_mode_height); +/** drm_mode_hsync - get the hsync of a mode + * @mode: mode + * + * LOCKING: + * None. + * + * Return @modes's hsync rate in kHz, rounded to the nearest int. + */ +int drm_mode_hsync(struct drm_display_mode *mode) +{ + unsigned int calc_val; + + if (mode->hsync) + return mode->hsync; + + if (mode->htotal < 0) + return 0; + + calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */ + calc_val += 500; /* round to 1000Hz */ + calc_val /= 1000; /* truncate to kHz */ + + return calc_val; +} +EXPORT_SYMBOL(drm_mode_hsync); + /** * drm_mode_vrefresh - get the vrefresh of a mode * @mode: mode @@ -560,7 +586,7 @@ EXPORT_SYMBOL(drm_mode_height); * LOCKING: * None. * - * Return @mode's vrefresh rate or calculate it if necessary. + * Return @mode's vrefresh rate in Hz or calculate it if necessary. * * FIXME: why is this needed? shouldn't vrefresh be set already? * diff --git a/trunk/include/drm/drm_crtc.h b/trunk/include/drm/drm_crtc.h index d84fba15c9d8..938f327a2a3b 100644 --- a/trunk/include/drm/drm_crtc.h +++ b/trunk/include/drm/drm_crtc.h @@ -123,7 +123,7 @@ struct drm_display_mode { int type; /* Proposed mode values */ - int clock; + int clock; /* in kHz */ int hdisplay; int hsync_start; int hsync_end; @@ -164,8 +164,8 @@ struct drm_display_mode { int *private; int private_flags; - int vrefresh; - float hsync; + int vrefresh; /* in Hz */ + int hsync; /* in kHz */ }; enum drm_connector_status { @@ -681,6 +681,7 @@ extern void drm_mode_validate_size(struct drm_device *dev, extern void drm_mode_prune_invalid(struct drm_device *dev, struct list_head *mode_list, bool verbose); extern void drm_mode_sort(struct list_head *mode_list); +extern int drm_mode_hsync(struct drm_display_mode *mode); extern int drm_mode_vrefresh(struct drm_display_mode *mode); extern void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags);