aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc
diff options
context:
space:
mode:
authorDarren Etheridge <detheridge@ti.com>2013-06-21 14:52:24 -0400
committerDave Airlie <airlied@redhat.com>2013-06-27 19:12:32 -0400
commitdb2b4bd09b43fc27ecd097e193f1135f5e40d347 (patch)
tree3a361d72b15f02c36a4941adbc94cd13394f8fc8 /drivers/gpu/drm/tilcdc
parent4e5643468715260209e42b715e8cd9643456d2bd (diff)
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: Darren Etheridge <detheridge@ti.com> Acked-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/tilcdc')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_crtc.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index b5b865f4f92b..086e52af1bc7 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -289,17 +289,22 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc,
289 reg = tilcdc_read(dev, LCDC_RASTER_TIMING_2_REG) & ~0x000fff00; 289 reg = tilcdc_read(dev, LCDC_RASTER_TIMING_2_REG) & ~0x000fff00;
290 reg |= LCDC_AC_BIAS_FREQUENCY(info->ac_bias) | 290 reg |= LCDC_AC_BIAS_FREQUENCY(info->ac_bias) |
291 LCDC_AC_BIAS_TRANSITIONS_PER_INT(info->ac_bias_intrpt); 291 LCDC_AC_BIAS_TRANSITIONS_PER_INT(info->ac_bias_intrpt);
292
293 /*
294 * subtract one from hfp, hbp, hsw because the hardware uses
295 * a value of 0 as 1
296 */
292 if (priv->rev == 2) { 297 if (priv->rev == 2) {
293 reg |= (hfp & 0x300) >> 8; 298 reg |= ((hfp-1) & 0x300) >> 8;
294 reg |= (hbp & 0x300) >> 4; 299 reg |= ((hbp-1) & 0x300) >> 4;
295 reg |= (hsw & 0x3c0) << 21; 300 reg |= ((hsw-1) & 0x3c0) << 21;
296 } 301 }
297 tilcdc_write(dev, LCDC_RASTER_TIMING_2_REG, reg); 302 tilcdc_write(dev, LCDC_RASTER_TIMING_2_REG, reg);
298 303
299 reg = (((mode->hdisplay >> 4) - 1) << 4) | 304 reg = (((mode->hdisplay >> 4) - 1) << 4) |
300 ((hbp & 0xff) << 24) | 305 (((hbp-1) & 0xff) << 24) |
301 ((hfp & 0xff) << 16) | 306 (((hfp-1) & 0xff) << 16) |
302 ((hsw & 0x3f) << 10); 307 (((hsw-1) & 0x3f) << 10);
303 if (priv->rev == 2) 308 if (priv->rev == 2)
304 reg |= (((mode->hdisplay >> 4) - 1) & 0x40) >> 3; 309 reg |= (((mode->hdisplay >> 4) - 1) & 0x40) >> 3;
305 tilcdc_write(dev, LCDC_RASTER_TIMING_0_REG, reg); 310 tilcdc_write(dev, LCDC_RASTER_TIMING_0_REG, reg);
@@ -307,7 +312,7 @@ static int tilcdc_crtc_mode_set(struct drm_crtc *crtc,
307 reg = ((mode->vdisplay - 1) & 0x3ff) | 312 reg = ((mode->vdisplay - 1) & 0x3ff) |
308 ((vbp & 0xff) << 24) | 313 ((vbp & 0xff) << 24) |
309 ((vfp & 0xff) << 16) | 314 ((vfp & 0xff) << 16) |
310 ((vsw & 0x3f) << 10); 315 (((vsw-1) & 0x3f) << 10);
311 tilcdc_write(dev, LCDC_RASTER_TIMING_1_REG, reg); 316 tilcdc_write(dev, LCDC_RASTER_TIMING_1_REG, reg);
312 317
313 /* 318 /*