diff options
author | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2012-11-14 05:22:52 -0500 |
---|---|---|
committer | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2013-01-24 03:04:09 -0500 |
commit | ebc64e453857e93b230881f48126257be9aa8830 (patch) | |
tree | 8ccb80725d3c273f5579bc1539ca841acd35381f /drivers/gpu/drm/drm_modes.c | |
parent | 790890444f591145d3a00623af461c9006e17d51 (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.c | 37 |
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 | } |
505 | EXPORT_SYMBOL(drm_gtf_mode); | 506 | EXPORT_SYMBOL(drm_gtf_mode); |
506 | 507 | ||
508 | #if IS_ENABLED(CONFIG_VIDEOMODE) | ||
509 | int 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 | } | ||
541 | EXPORT_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 |