diff mbox series

[v1.1,26/29] drm/omap: venc: Use drm_display_mode natively

Message ID 20181206162346.20589-1-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show
Series None | expand

Commit Message

Laurent Pinchart Dec. 6, 2018, 4:23 p.m. UTC
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.pinchart@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(-)

Comments

Sebastian Reichel Dec. 9, 2018, 10:27 p.m. UTC | #1
Hi,

On Thu, Dec 06, 2018 at 06:23:46PM +0200, Laurent Pinchart wrote:
> 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.pinchart@ideasonboard.com>
> ---
> Changes since v1:
> 
> - Set mode.crtc_* fields and mode name in venc_check_timings()
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>

-- Sebastian

>  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
diff mbox series

Patch

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)