]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/libdrm.git/commitdiff
radeon: rmx_fixup() fixes for legacy chips
authorAlex Deucher <alexdeucher@gmail.com>
Fri, 19 Sep 2008 15:19:00 +0000 (11:19 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Fri, 19 Sep 2008 15:19:00 +0000 (11:19 -0400)
linux-core/radeon_encoders.c

index 98be7057a4f72386a0f600f33e063c44473c4d01..03878609a33b88b0d031d790bfd3428d431ae2b9 100644 (file)
@@ -35,47 +35,50 @@ void radeon_rmx_mode_fixup(struct drm_encoder *encoder,
                           struct drm_display_mode *adjusted_mode)
 {
        struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+       struct drm_device *dev = encoder->dev;
+       struct drm_radeon_private *dev_priv = dev->dev_private;
+
        if (mode->hdisplay < radeon_encoder->panel_xres ||
            mode->vdisplay < radeon_encoder->panel_yres) {
                radeon_encoder->flags |= RADEON_USE_RMX;
-               adjusted_mode->hdisplay = radeon_encoder->panel_xres;
-               adjusted_mode->vdisplay = radeon_encoder->panel_yres;
-               adjusted_mode->htotal = radeon_encoder->panel_xres + radeon_encoder->hblank;
-               adjusted_mode->hsync_start = radeon_encoder->panel_xres + radeon_encoder->hoverplus;
-               adjusted_mode->hsync_end = adjusted_mode->hsync_start + radeon_encoder->hsync_width;
-               adjusted_mode->vtotal = radeon_encoder->panel_yres + radeon_encoder->vblank;
-               adjusted_mode->vsync_start = radeon_encoder->panel_yres + radeon_encoder->voverplus;
-               adjusted_mode->vsync_end = adjusted_mode->vsync_start + radeon_encoder->vsync_width;
-               /* update crtc values */
-               drm_mode_set_crtcinfo(adjusted_mode, CRTC_INTERLACE_HALVE_V);
-               /* adjust crtc values */
-               adjusted_mode->crtc_hdisplay = radeon_encoder->panel_xres;
-               adjusted_mode->crtc_vdisplay = radeon_encoder->panel_yres;
-               adjusted_mode->crtc_htotal = adjusted_mode->crtc_hdisplay + radeon_encoder->hblank;
-               adjusted_mode->crtc_hsync_start = adjusted_mode->crtc_hdisplay + radeon_encoder->hoverplus;
-               adjusted_mode->crtc_hsync_end = adjusted_mode->crtc_hsync_start + radeon_encoder->hsync_width;
-               adjusted_mode->crtc_vtotal = adjusted_mode->crtc_vdisplay + radeon_encoder->vblank;
-               adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + radeon_encoder->voverplus;
-               adjusted_mode->crtc_vsync_end = adjusted_mode->crtc_vsync_start + radeon_encoder->vsync_width;
-       } else {
-               adjusted_mode->htotal = radeon_encoder->panel_xres + radeon_encoder->hblank;
-               adjusted_mode->hsync_start = radeon_encoder->panel_xres + radeon_encoder->hoverplus;
-               adjusted_mode->hsync_end = adjusted_mode->hsync_start + radeon_encoder->hsync_width;
-               adjusted_mode->vtotal = radeon_encoder->panel_yres + radeon_encoder->vblank;
-               adjusted_mode->vsync_start = radeon_encoder->panel_yres + radeon_encoder->voverplus;
-               adjusted_mode->vsync_end = adjusted_mode->vsync_start + radeon_encoder->vsync_width;
-               /* update crtc values */
-               drm_mode_set_crtcinfo(adjusted_mode, CRTC_INTERLACE_HALVE_V);
-               /* adjust crtc values */
-               adjusted_mode->crtc_htotal = adjusted_mode->crtc_hdisplay + radeon_encoder->hblank;
-               adjusted_mode->crtc_hsync_start = adjusted_mode->crtc_hdisplay + radeon_encoder->hoverplus;
-               adjusted_mode->crtc_hsync_end = adjusted_mode->crtc_hsync_start + radeon_encoder->hsync_width;
-               adjusted_mode->crtc_vtotal = adjusted_mode->crtc_vdisplay + radeon_encoder->vblank;
-               adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + radeon_encoder->voverplus;
-               adjusted_mode->crtc_vsync_end = adjusted_mode->crtc_vsync_start + radeon_encoder->vsync_width;
+               if (radeon_is_avivo(dev_priv)) {
+                       adjusted_mode->hdisplay = radeon_encoder->panel_xres;
+                       adjusted_mode->vdisplay = radeon_encoder->panel_yres;
+                       adjusted_mode->htotal = radeon_encoder->panel_xres + radeon_encoder->hblank;
+                       adjusted_mode->hsync_start = radeon_encoder->panel_xres + radeon_encoder->hoverplus;
+                       adjusted_mode->hsync_end = adjusted_mode->hsync_start + radeon_encoder->hsync_width;
+                       adjusted_mode->vtotal = radeon_encoder->panel_yres + radeon_encoder->vblank;
+                       adjusted_mode->vsync_start = radeon_encoder->panel_yres + radeon_encoder->voverplus;
+                       adjusted_mode->vsync_end = adjusted_mode->vsync_start + radeon_encoder->vsync_width;
+                       /* update crtc values */
+                       drm_mode_set_crtcinfo(adjusted_mode, CRTC_INTERLACE_HALVE_V);
+                       /* adjust crtc values */
+                       adjusted_mode->crtc_hdisplay = radeon_encoder->panel_xres;
+                       adjusted_mode->crtc_vdisplay = radeon_encoder->panel_yres;
+                       adjusted_mode->crtc_htotal = adjusted_mode->crtc_hdisplay + radeon_encoder->hblank;
+                       adjusted_mode->crtc_hsync_start = adjusted_mode->crtc_hdisplay + radeon_encoder->hoverplus;
+                       adjusted_mode->crtc_hsync_end = adjusted_mode->crtc_hsync_start + radeon_encoder->hsync_width;
+                       adjusted_mode->crtc_vtotal = adjusted_mode->crtc_vdisplay + radeon_encoder->vblank;
+                       adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + radeon_encoder->voverplus;
+                       adjusted_mode->crtc_vsync_end = adjusted_mode->crtc_vsync_start + radeon_encoder->vsync_width;
+               } else {
+                       adjusted_mode->htotal = radeon_encoder->panel_xres + radeon_encoder->hblank;
+                       adjusted_mode->hsync_start = radeon_encoder->panel_xres + radeon_encoder->hoverplus;
+                       adjusted_mode->hsync_end = adjusted_mode->hsync_start + radeon_encoder->hsync_width;
+                       adjusted_mode->vtotal = radeon_encoder->panel_yres + radeon_encoder->vblank;
+                       adjusted_mode->vsync_start = radeon_encoder->panel_yres + radeon_encoder->voverplus;
+                       adjusted_mode->vsync_end = adjusted_mode->vsync_start + radeon_encoder->vsync_width;
+                       /* update crtc values */
+                       drm_mode_set_crtcinfo(adjusted_mode, CRTC_INTERLACE_HALVE_V);
+                       /* adjust crtc values */
+                       adjusted_mode->crtc_htotal = adjusted_mode->crtc_hdisplay + radeon_encoder->hblank;
+                       adjusted_mode->crtc_hsync_start = adjusted_mode->crtc_hdisplay + radeon_encoder->hoverplus;
+                       adjusted_mode->crtc_hsync_end = adjusted_mode->crtc_hsync_start + radeon_encoder->hsync_width;
+                       adjusted_mode->crtc_vtotal = adjusted_mode->crtc_vdisplay + radeon_encoder->vblank;
+                       adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + radeon_encoder->voverplus;
+                       adjusted_mode->crtc_vsync_end = adjusted_mode->crtc_vsync_start + radeon_encoder->vsync_width;
+               }
        }
-       adjusted_mode->clock = radeon_encoder->dotclock;
-       adjusted_mode->flags = radeon_encoder->flags;
 }