aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Longerbeam <slongerbeam@gmail.com>2014-12-18 21:00:22 -0500
committerPhilipp Zabel <p.zabel@pengutronix.de>2015-01-07 13:15:02 -0500
commitd490f455f4ac3d97fbf109deae1e017b26acffda (patch)
treefbc74071bf55874018edc4a704f1f79c01857b35
parent73099f12b0d2ad583333fc3df0862a47f95ec4f4 (diff)
drm_modes: add drm_display_mode_to_videomode
Add conversion from drm_display_mode to videomode. Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r--drivers/gpu/drm/drm_modes.c40
-rw-r--r--include/drm/drm_modes.h2
2 files changed, 42 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 6d8b941c8200..9731aeba40a6 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -615,6 +615,46 @@ void drm_display_mode_from_videomode(const struct videomode *vm,
615} 615}
616EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode); 616EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode);
617 617
618/**
619 * drm_display_mode_to_videomode - fill in @vm using @dmode,
620 * @dmode: drm_display_mode structure to use as source
621 * @vm: videomode structure to use as destination
622 *
623 * Fills out @vm using the display mode specified in @dmode.
624 */
625void drm_display_mode_to_videomode(const struct drm_display_mode *dmode,
626 struct videomode *vm)
627{
628 vm->hactive = dmode->hdisplay;
629 vm->hfront_porch = dmode->hsync_start - dmode->hdisplay;
630 vm->hsync_len = dmode->hsync_end - dmode->hsync_start;
631 vm->hback_porch = dmode->htotal - dmode->hsync_end;
632
633 vm->vactive = dmode->vdisplay;
634 vm->vfront_porch = dmode->vsync_start - dmode->vdisplay;
635 vm->vsync_len = dmode->vsync_end - dmode->vsync_start;
636 vm->vback_porch = dmode->vtotal - dmode->vsync_end;
637
638 vm->pixelclock = dmode->clock * 1000;
639
640 vm->flags = 0;
641 if (dmode->flags & DRM_MODE_FLAG_PHSYNC)
642 vm->flags |= DISPLAY_FLAGS_HSYNC_HIGH;
643 else if (dmode->flags & DRM_MODE_FLAG_NHSYNC)
644 vm->flags |= DISPLAY_FLAGS_HSYNC_LOW;
645 if (dmode->flags & DRM_MODE_FLAG_PVSYNC)
646 vm->flags |= DISPLAY_FLAGS_VSYNC_HIGH;
647 else if (dmode->flags & DRM_MODE_FLAG_NVSYNC)
648 vm->flags |= DISPLAY_FLAGS_VSYNC_LOW;
649 if (dmode->flags & DRM_MODE_FLAG_INTERLACE)
650 vm->flags |= DISPLAY_FLAGS_INTERLACED;
651 if (dmode->flags & DRM_MODE_FLAG_DBLSCAN)
652 vm->flags |= DISPLAY_FLAGS_DOUBLESCAN;
653 if (dmode->flags & DRM_MODE_FLAG_DBLCLK)
654 vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
655}
656EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
657
618#ifdef CONFIG_OF 658#ifdef CONFIG_OF
619/** 659/**
620 * of_get_drm_display_mode - get a drm_display_mode from devicetree 660 * of_get_drm_display_mode - get a drm_display_mode from devicetree
diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
index 91d0582f924e..321ae6411546 100644
--- a/include/drm/drm_modes.h
+++ b/include/drm/drm_modes.h
@@ -197,6 +197,8 @@ struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
197 int GTF_K, int GTF_2J); 197 int GTF_K, int GTF_2J);
198void drm_display_mode_from_videomode(const struct videomode *vm, 198void drm_display_mode_from_videomode(const struct videomode *vm,
199 struct drm_display_mode *dmode); 199 struct drm_display_mode *dmode);
200void drm_display_mode_to_videomode(const struct drm_display_mode *dmode,
201 struct videomode *vm);
200int of_get_drm_display_mode(struct device_node *np, 202int of_get_drm_display_mode(struct device_node *np,
201 struct drm_display_mode *dmode, 203 struct drm_display_mode *dmode,
202 int index); 204 int index);