aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_modes.c
diff options
context:
space:
mode:
authorSteffen Trumtrar <s.trumtrar@pengutronix.de>2012-11-14 05:22:52 -0500
committerSteffen Trumtrar <s.trumtrar@pengutronix.de>2013-01-24 03:04:09 -0500
commitebc64e453857e93b230881f48126257be9aa8830 (patch)
tree8ccb80725d3c273f5579bc1539ca841acd35381f /drivers/gpu/drm/drm_modes.c
parent790890444f591145d3a00623af461c9006e17d51 (diff)
drm_modes: add videomode helpers
Add conversion from videomode to drm_display_mode Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de> Acked-by: Thierry Reding <thierry.reding@avionic-design.de> Tested-by: Thierry Reding <thierry.reding@avionic-design.de> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Afzal Mohammed <Afzal@ti.com> Tested-by: Rob Clark <robclark@gmail.com> Tested-by: Leela Krishna Amudala <leelakrishna.a@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/drm_modes.c')
-rw-r--r--drivers/gpu/drm/drm_modes.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index d8da30e90db5..9f3f20bde399 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -35,6 +35,7 @@
35#include <linux/export.h> 35#include <linux/export.h>
36#include <drm/drmP.h> 36#include <drm/drmP.h>
37#include <drm/drm_crtc.h> 37#include <drm/drm_crtc.h>
38#include <video/videomode.h>
38 39
39/** 40/**
40 * drm_mode_debug_printmodeline - debug print a mode 41 * drm_mode_debug_printmodeline - debug print a mode
@@ -504,6 +505,42 @@ drm_gtf_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh,
504} 505}
505EXPORT_SYMBOL(drm_gtf_mode); 506EXPORT_SYMBOL(drm_gtf_mode);
506 507
508#if IS_ENABLED(CONFIG_VIDEOMODE)
509int drm_display_mode_from_videomode(const struct videomode *vm,
510 struct drm_display_mode *dmode)
511{
512 dmode->hdisplay = vm->hactive;
513 dmode->hsync_start = dmode->hdisplay + vm->hfront_porch;
514 dmode->hsync_end = dmode->hsync_start + vm->hsync_len;
515 dmode->htotal = dmode->hsync_end + vm->hback_porch;
516
517 dmode->vdisplay = vm->vactive;
518 dmode->vsync_start = dmode->vdisplay + vm->vfront_porch;
519 dmode->vsync_end = dmode->vsync_start + vm->vsync_len;
520 dmode->vtotal = dmode->vsync_end + vm->vback_porch;
521
522 dmode->clock = vm->pixelclock / 1000;
523
524 dmode->flags = 0;
525 if (vm->dmt_flags & VESA_DMT_HSYNC_HIGH)
526 dmode->flags |= DRM_MODE_FLAG_PHSYNC;
527 else if (vm->dmt_flags & VESA_DMT_HSYNC_LOW)
528 dmode->flags |= DRM_MODE_FLAG_NHSYNC;
529 if (vm->dmt_flags & VESA_DMT_VSYNC_HIGH)
530 dmode->flags |= DRM_MODE_FLAG_PVSYNC;
531 else if (vm->dmt_flags & VESA_DMT_VSYNC_LOW)
532 dmode->flags |= DRM_MODE_FLAG_NVSYNC;
533 if (vm->data_flags & DISPLAY_FLAGS_INTERLACED)
534 dmode->flags |= DRM_MODE_FLAG_INTERLACE;
535 if (vm->data_flags & DISPLAY_FLAGS_DOUBLESCAN)
536 dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
537 drm_mode_set_name(dmode);
538
539 return 0;
540}
541EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode);
542#endif
543
507/** 544/**
508 * drm_mode_set_name - set the name on a mode 545 * drm_mode_set_name - set the name on a mode
509 * @mode: name will be set in this mode 546 * @mode: name will be set in this mode