提交 db2b4bd0 编写于 作者: D Darren Etheridge 提交者: Dave Airlie

drm/tilcdc: fixing off by one errors found on analyzer

When hooking up to an HDMI analyzer noticed some timings were
off by one.  Referring to the hardware technical reference manual
for the lcd controller some of the timing registers use 0 to
represent 1.  This patch addresses that issue.
Signed-off-by: NDarren Etheridge <detheridge@ti.com>
Acked-by: NRob Clark <robdclark@gmail.com>
Signed-off-by: NDave Airlie <airlied@redhat.com>
上级 4e564346
...@@ -289,17 +289,22 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc, ...@@ -289,17 +289,22 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc,
reg = tilcdc_read(dev, LCDC_RASTER_TIMING_2_REG) & ~0x000fff00; reg = tilcdc_read(dev, LCDC_RASTER_TIMING_2_REG) & ~0x000fff00;
reg |= LCDC_AC_BIAS_FREQUENCY(info->ac_bias) | reg |= LCDC_AC_BIAS_FREQUENCY(info->ac_bias) |
LCDC_AC_BIAS_TRANSITIONS_PER_INT(info->ac_bias_intrpt); LCDC_AC_BIAS_TRANSITIONS_PER_INT(info->ac_bias_intrpt);
/*
* subtract one from hfp, hbp, hsw because the hardware uses
* a value of 0 as 1
*/
if (priv->rev == 2) { if (priv->rev == 2) {
reg |= (hfp & 0x300) >> 8; reg |= ((hfp-1) & 0x300) >> 8;
reg |= (hbp & 0x300) >> 4; reg |= ((hbp-1) & 0x300) >> 4;
reg |= (hsw & 0x3c0) << 21; reg |= ((hsw-1) & 0x3c0) << 21;
} }
tilcdc_write(dev, LCDC_RASTER_TIMING_2_REG, reg); tilcdc_write(dev, LCDC_RASTER_TIMING_2_REG, reg);
reg = (((mode->hdisplay >> 4) - 1) << 4) | reg = (((mode->hdisplay >> 4) - 1) << 4) |
((hbp & 0xff) << 24) | (((hbp-1) & 0xff) << 24) |
((hfp & 0xff) << 16) | (((hfp-1) & 0xff) << 16) |
((hsw & 0x3f) << 10); (((hsw-1) & 0x3f) << 10);
if (priv->rev == 2) if (priv->rev == 2)
reg |= (((mode->hdisplay >> 4) - 1) & 0x40) >> 3; reg |= (((mode->hdisplay >> 4) - 1) & 0x40) >> 3;
tilcdc_write(dev, LCDC_RASTER_TIMING_0_REG, reg); tilcdc_write(dev, LCDC_RASTER_TIMING_0_REG, reg);
...@@ -307,7 +312,7 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc, ...@@ -307,7 +312,7 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc,
reg = ((mode->vdisplay - 1) & 0x3ff) | reg = ((mode->vdisplay - 1) & 0x3ff) |
((vbp & 0xff) << 24) | ((vbp & 0xff) << 24) |
((vfp & 0xff) << 16) | ((vfp & 0xff) << 16) |
((vsw & 0x3f) << 10); (((vsw-1) & 0x3f) << 10);
tilcdc_write(dev, LCDC_RASTER_TIMING_1_REG, reg); tilcdc_write(dev, LCDC_RASTER_TIMING_1_REG, reg);
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册