From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonyoung Shim Date: Thu, 08 Mar 2012 13:05:50 +0000 Subject: Re: [PATCH] drm: exynos: Fix fb_videomode <-> drm_mode_modeinfo conversion Message-Id: <4F58AEAE.4080601@samsung.com> List-Id: References: <1331206495-3853-1-git-send-email-laurent.pinchart@ideasonboard.com> In-Reply-To: <1331206495-3853-1-git-send-email-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Laurent Pinchart Cc: Inki Dae , linux-fbdev@vger.kernel.org, Seung-Woo Kim , Kyungmin Park , dri-devel@lists.freedesktop.org On 03/08/2012 08:34 PM, Laurent Pinchart wrote: > The fb_videomode structure stores the front porch and back porch in the > right_margin and left_margin fields respectively. right_margin should > thus be computed with hsync_start - hdisplay, and left_margin with > htotal - hsync_end. The same holds for the vertical direction. > > Active Front Sync Back > Region Porch Porch > <-------------------><----------------><-------------><----------------> > > //////////////////| > ////////////////// | > ////////////////// |.................. .................. > _______________ > > <------ xres -------><- right_margin -><- hsync_len -><- left_margin --> > > <---- hdisplay -----> > <------------ hsync_start ------------> > <--------------------- hsync_end --------------------> > <--------------------------------- htotal -----------------------------> > > Fix the fb_videomode<-> drm_mode_modeinfo conversion functions > accordingly. > > Signed-off-by: Laurent Pinchart > --- > drivers/gpu/drm/exynos/exynos_drm_connector.c | 16 ++++++++-------- > 1 files changed, 8 insertions(+), 8 deletions(-) > > While trying to understand how the fb_videomode and drm_mode_modeinfo fields > map to each other, I found what might be a bug in the Exynos DRM driver. Could > you please check and confirm that my understanding is correct ? Good catch. You can refer Documentation/fb/framebuffer.txt to know in detail. Acked-by: Joonyoung Shim Thanks. > diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c b/drivers/gpu/drm/exynos/exynos_drm_connector.c > index d620b07..7bb1dca 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_connector.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c > @@ -52,14 +52,14 @@ convert_to_display_mode(struct drm_display_mode *mode, > mode->vrefresh = timing->refresh; > > mode->hdisplay = timing->xres; > - mode->hsync_start = mode->hdisplay + timing->left_margin; > + mode->hsync_start = mode->hdisplay + timing->right_margin; > mode->hsync_end = mode->hsync_start + timing->hsync_len; > - mode->htotal = mode->hsync_end + timing->right_margin; > + mode->htotal = mode->hsync_end + timing->left_margin; > > mode->vdisplay = timing->yres; > - mode->vsync_start = mode->vdisplay + timing->upper_margin; > + mode->vsync_start = mode->vdisplay + timing->lower_margin; > mode->vsync_end = mode->vsync_start + timing->vsync_len; > - mode->vtotal = mode->vsync_end + timing->lower_margin; > + mode->vtotal = mode->vsync_end + timing->upper_margin; > > if (timing->vmode& FB_VMODE_INTERLACED) > mode->flags |= DRM_MODE_FLAG_INTERLACE; > @@ -81,14 +81,14 @@ convert_to_video_timing(struct fb_videomode *timing, > timing->refresh = drm_mode_vrefresh(mode); > > timing->xres = mode->hdisplay; > - timing->left_margin = mode->hsync_start - mode->hdisplay; > + timing->right_margin = mode->hsync_start - mode->hdisplay; > timing->hsync_len = mode->hsync_end - mode->hsync_start; > - timing->right_margin = mode->htotal - mode->hsync_end; > + timing->left_margin = mode->htotal - mode->hsync_end; > > timing->yres = mode->vdisplay; > - timing->upper_margin = mode->vsync_start - mode->vdisplay; > + timing->lower_margin = mode->vsync_start - mode->vdisplay; > timing->vsync_len = mode->vsync_end - mode->vsync_start; > - timing->lower_margin = mode->vtotal - mode->vsync_end; > + timing->upper_margin = mode->vtotal - mode->vsync_end; > > if (mode->flags& DRM_MODE_FLAG_INTERLACE) > timing->vmode = FB_VMODE_INTERLACED; From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonyoung Shim Subject: Re: [PATCH] drm: exynos: Fix fb_videomode <-> drm_mode_modeinfo conversion Date: Thu, 08 Mar 2012 22:05:50 +0900 Message-ID: <4F58AEAE.4080601@samsung.com> References: <1331206495-3853-1-git-send-email-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 6F7FAA0CCD for ; Thu, 8 Mar 2012 05:15:36 -0800 (PST) Received: from epcpsbgm2.samsung.com (mailout1.samsung.com [203.254.224.24]) by mailout1.samsung.com (Oracle Communications Messaging Exchange Server 7u4-19.01 64bit (built Sep 7 2010)) with ESMTP id <0M0K002FGHP8ORD0@mailout1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 08 Mar 2012 22:05:32 +0900 (KST) Received: from [165.213.219.123] by mmp1.samsung.com (Oracle Communications Messaging Exchange Server 7u4-19.01 64bit (built Sep 7 2010)) with ESMTPA id <0M0K00B3UHP8M680@mmp1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 08 Mar 2012 22:05:32 +0900 (KST) In-reply-to: <1331206495-3853-1-git-send-email-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Laurent Pinchart Cc: Inki Dae , linux-fbdev@vger.kernel.org, Seung-Woo Kim , Kyungmin Park , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On 03/08/2012 08:34 PM, Laurent Pinchart wrote: > The fb_videomode structure stores the front porch and back porch in the > right_margin and left_margin fields respectively. right_margin should > thus be computed with hsync_start - hdisplay, and left_margin with > htotal - hsync_end. The same holds for the vertical direction. > > Active Front Sync Back > Region Porch Porch > <-------------------><----------------><-------------><----------------> > > //////////////////| > ////////////////// | > ////////////////// |.................. .................. > _______________ > > <------ xres -------><- right_margin -><- hsync_len -><- left_margin --> > > <---- hdisplay -----> > <------------ hsync_start ------------> > <--------------------- hsync_end --------------------> > <--------------------------------- htotal -----------------------------> > > Fix the fb_videomode<-> drm_mode_modeinfo conversion functions > accordingly. > > Signed-off-by: Laurent Pinchart > --- > drivers/gpu/drm/exynos/exynos_drm_connector.c | 16 ++++++++-------- > 1 files changed, 8 insertions(+), 8 deletions(-) > > While trying to understand how the fb_videomode and drm_mode_modeinfo fields > map to each other, I found what might be a bug in the Exynos DRM driver. Could > you please check and confirm that my understanding is correct ? Good catch. You can refer Documentation/fb/framebuffer.txt to know in detail. Acked-by: Joonyoung Shim Thanks. > diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c b/drivers/gpu/drm/exynos/exynos_drm_connector.c > index d620b07..7bb1dca 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_connector.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c > @@ -52,14 +52,14 @@ convert_to_display_mode(struct drm_display_mode *mode, > mode->vrefresh = timing->refresh; > > mode->hdisplay = timing->xres; > - mode->hsync_start = mode->hdisplay + timing->left_margin; > + mode->hsync_start = mode->hdisplay + timing->right_margin; > mode->hsync_end = mode->hsync_start + timing->hsync_len; > - mode->htotal = mode->hsync_end + timing->right_margin; > + mode->htotal = mode->hsync_end + timing->left_margin; > > mode->vdisplay = timing->yres; > - mode->vsync_start = mode->vdisplay + timing->upper_margin; > + mode->vsync_start = mode->vdisplay + timing->lower_margin; > mode->vsync_end = mode->vsync_start + timing->vsync_len; > - mode->vtotal = mode->vsync_end + timing->lower_margin; > + mode->vtotal = mode->vsync_end + timing->upper_margin; > > if (timing->vmode& FB_VMODE_INTERLACED) > mode->flags |= DRM_MODE_FLAG_INTERLACE; > @@ -81,14 +81,14 @@ convert_to_video_timing(struct fb_videomode *timing, > timing->refresh = drm_mode_vrefresh(mode); > > timing->xres = mode->hdisplay; > - timing->left_margin = mode->hsync_start - mode->hdisplay; > + timing->right_margin = mode->hsync_start - mode->hdisplay; > timing->hsync_len = mode->hsync_end - mode->hsync_start; > - timing->right_margin = mode->htotal - mode->hsync_end; > + timing->left_margin = mode->htotal - mode->hsync_end; > > timing->yres = mode->vdisplay; > - timing->upper_margin = mode->vsync_start - mode->vdisplay; > + timing->lower_margin = mode->vsync_start - mode->vdisplay; > timing->vsync_len = mode->vsync_end - mode->vsync_start; > - timing->lower_margin = mode->vtotal - mode->vsync_end; > + timing->upper_margin = mode->vtotal - mode->vsync_end; > > if (mode->flags& DRM_MODE_FLAG_INTERLACE) > timing->vmode = FB_VMODE_INTERLACED;