Replace internal usage of struct videomode with struct drm_display_mode
in order to avoid converting needlessly between the data structures.

Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
Changes since v1:

- Set mode.crtc_* fields and mode name in venc_check_timings()
---
 drivers/gpu/drm/omapdrm/dss/venc.c | 90 +++++++++++++++---------------
 1 file changed, 44 insertions(+), 46 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c 
b/drivers/gpu/drm/omapdrm/dss/venc.c
index 7bce5898654a..f2cbecfd05b5 100644
--- a/drivers/gpu/drm/omapdrm/dss/venc.c
+++ b/drivers/gpu/drm/omapdrm/dss/venc.c
@@ -267,38 +267,34 @@ enum venc_videomode {
        VENC_MODE_NTSC,
 };
 
-static const struct videomode omap_dss_pal_vm = {
-       .hactive        = 720,
-       .vactive        = 574,
-       .pixelclock     = 13500000,
-       .hsync_len      = 64,
-       .hfront_porch   = 12,
-       .hback_porch    = 68,
-       .vsync_len      = 5,
-       .vfront_porch   = 5,
-       .vback_porch    = 41,
-
-       .flags          = DISPLAY_FLAGS_INTERLACED | DISPLAY_FLAGS_HSYNC_LOW |
-                         DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_DE_HIGH |
-                         DISPLAY_FLAGS_PIXDATA_POSEDGE |
-                         DISPLAY_FLAGS_SYNC_NEGEDGE,
+static const struct drm_display_mode omap_dss_pal_mode = {
+       .hdisplay       = 720,
+       .hsync_start    = 732,
+       .hsync_end      = 796,
+       .htotal         = 864,
+       .vdisplay       = 574,
+       .vsync_start    = 579,
+       .vsync_end      = 584,
+       .vtotal         = 625,
+       .clock          = 13500,
+
+       .flags          = DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_NHSYNC |
+                         DRM_MODE_FLAG_NVSYNC,
 };
 
-static const struct videomode omap_dss_ntsc_vm = {
-       .hactive        = 720,
-       .vactive        = 482,
-       .pixelclock     = 13500000,
-       .hsync_len      = 64,
-       .hfront_porch   = 16,
-       .hback_porch    = 58,
-       .vsync_len      = 6,
-       .vfront_porch   = 6,
-       .vback_porch    = 31,
-
-       .flags          = DISPLAY_FLAGS_INTERLACED | DISPLAY_FLAGS_HSYNC_LOW |
-                         DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_DE_HIGH |
-                         DISPLAY_FLAGS_PIXDATA_POSEDGE |
-                         DISPLAY_FLAGS_SYNC_NEGEDGE,
+static const struct drm_display_mode omap_dss_ntsc_mode = {
+       .hdisplay       = 720,
+       .hsync_start    = 736,
+       .hsync_end      = 800,
+       .htotal         = 858,
+       .vdisplay       = 482,
+       .vsync_start    = 488,
+       .vsync_end      = 494,
+       .vtotal         = 525,
+       .clock          = 13500,
+
+       .flags          = DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_NHSYNC |
+                         DRM_MODE_FLAG_NVSYNC,
 };
 
 struct venc_device {
@@ -521,21 +517,19 @@ static void venc_display_disable(struct omap_dss_device 
*dssdev)
 static int venc_get_modes(struct omap_dss_device *dssdev,
                          struct drm_connector *connector)
 {
-       static const struct videomode *modes[] = {
-               &omap_dss_pal_vm,
-               &omap_dss_ntsc_vm,
+       static const struct drm_display_mode *modes[] = {
+               &omap_dss_pal_mode,
+               &omap_dss_ntsc_mode,
        };
        unsigned int i;
 
        for (i = 0; i < ARRAY_SIZE(modes); ++i) {
                struct drm_display_mode *mode;
 
-               mode = drm_mode_create(connector->dev);
+               mode = drm_mode_duplicate(connector->dev, modes[i]);
                if (!mode)
                        return i;
 
-               drm_display_mode_from_videomode(modes[i], mode);
-
                mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
                drm_mode_set_name(mode);
                drm_mode_probed_add(connector, mode);
@@ -549,14 +543,14 @@ static enum venc_videomode venc_get_videomode(const 
struct drm_display_mode *mod
        if (!(mode->flags & DRM_MODE_FLAG_INTERLACE))
                return VENC_MODE_UNKNOWN;
 
-       if (mode->clock == omap_dss_pal_vm.pixelclock / 1000 &&
-           mode->hdisplay == omap_dss_pal_vm.hactive &&
-           mode->vdisplay == omap_dss_pal_vm.vactive)
+       if (mode->clock == omap_dss_pal_mode.clock &&
+           mode->hdisplay == omap_dss_pal_mode.hdisplay &&
+           mode->vdisplay == omap_dss_pal_mode.vdisplay)
                return VENC_MODE_PAL;
 
-       if (mode->clock == omap_dss_ntsc_vm.pixelclock / 1000 &&
-           mode->hdisplay == omap_dss_ntsc_vm.hactive &&
-           mode->vdisplay == omap_dss_ntsc_vm.vactive)
+       if (mode->clock == omap_dss_ntsc_mode.clock &&
+           mode->hdisplay == omap_dss_ntsc_mode.hdisplay &&
+           mode->vdisplay == omap_dss_ntsc_mode.vdisplay)
                return VENC_MODE_NTSC;
 
        return VENC_MODE_UNKNOWN;
@@ -597,16 +591,20 @@ static int venc_check_timings(struct omap_dss_device 
*dssdev,
 
        switch (venc_get_videomode(mode)) {
        case VENC_MODE_PAL:
-               drm_display_mode_from_videomode(&omap_dss_pal_vm, mode);
-               return 0;
+               drm_mode_copy(mode, &omap_dss_pal_mode);
+               break;
 
        case VENC_MODE_NTSC:
-               drm_display_mode_from_videomode(&omap_dss_ntsc_vm, mode);
-               return 0;
+               drm_mode_copy(mode, &omap_dss_ntsc_mode);
+               break;
 
        default:
                return -EINVAL;
        }
+
+       drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+       drm_mode_set_name(mode);
+       return 0;
 }
 
 static int venc_dump_regs(struct seq_file *s, void *p)
-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to