drm/i915: rip out unnecessary calls to drm_mode_set_crtcinfo
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 3 May 2012 13:51:58 +0000 (15:51 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 4 May 2012 09:31:24 +0000 (11:31 +0200)
Our handling of the crtc timing computation has been nicely
cargo-culted with calls to drm_mode_set_crtcinfo sprinkled all over
the place. But with

commit f9bef081c3c3f77bec54454872e98d3ec635756f
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Sun Apr 15 19:53:19 2012 +0200

    drm/i915: don't clobber the special upscaling lvds timings

and

commit ca9bfa7eed20ea34e862804e62aae10eb159edbb
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Sat Jan 28 14:49:20 2012 +0100

    drm/i915: fixup interlaced vertical timings confusion, part 1

we now only set the crtc timing fields in the encoder->mode_fixup
(lvds only) and in crtc->mode_fixup (for everyone else). And since

commit 75c13993db592343bda1fd62f2555fea037d56bd
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Sat Jan 28 23:48:46 2012 +0100

    drm/i915: fixup overlay checks for interlaced modes

the only places we actually need the crtc timings is in the mode_set
function.

I guess the idea of the drm core is that every time it creates a drm
mode, it also sets the timings. But afaics it never uses them, safe
for the precise vblank timestamp code (but that can only run on active
modes, i.e.  after our mode_fixup functions have been called). The
problem is that drm core always sets CRTC_INTERLACE_HALVE_V, so the
timings are pretty much bogus for us anyway (at least with interlaced
support).

So I guess it's the drivers job that every active modes needs to have
crtc timings that suits it, and with these patches we should have
that. drm core doesn't seem to care about modes that just get passed
around. Hence we can now safely rip out all the remaining calls to
set_crtcinfo left in the driver and clean up this confusion.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_overlay.c
drivers/gpu/drm/i915/intel_sdvo.c
drivers/gpu/drm/i915/intel_tv.c

index ba04447926ee77c9e2621f739edb1ca2f351de66..e20f8042fddd6ab54bc9cd81bf65f8080741ae91 100644 (file)
@@ -5357,7 +5357,6 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
        mode->vsync_end = ((vsync & 0xffff0000) >> 16) + 1;
 
        drm_mode_set_name(mode);
-       drm_mode_set_crtcinfo(mode, 0);
 
        return mode;
 }
index 0bfab0bf60f48871d77e28e579f2ac5b41ff7be3..458743da37743e702a8ccea57f7c37ae01cbfc07 100644 (file)
@@ -263,7 +263,7 @@ i830_activate_pipe_a(struct drm_device *dev)
        DRM_DEBUG_DRIVER("Enabling pipe A in order to enable overlay\n");
 
        mode = drm_mode_duplicate(dev, &vesa_640x480);
-       drm_mode_set_crtcinfo(mode, 0);
+
        if (!drm_crtc_helper_set_mode(&crtc->base, mode,
                                       crtc->base.x, crtc->base.y,
                                       crtc->base.fb))
index c330efd59a0e58be5e37a092b617b2851fc64947..a3ccdccef0f912fed6a037217db7a407bc00bd45 100644 (file)
@@ -1576,9 +1576,6 @@ end:
                        intel_sdvo->sdvo_lvds_fixed_mode =
                                drm_mode_duplicate(connector->dev, newmode);
 
-                       drm_mode_set_crtcinfo(intel_sdvo->sdvo_lvds_fixed_mode,
-                                             0);
-
                        intel_sdvo->is_lvds = true;
                        break;
                }
index 2e626b861cd82924f1297751c359b21805159e29..3346612d2953eff35c3e9025b044d33e75e28206 100644 (file)
@@ -1249,7 +1249,6 @@ intel_tv_detect(struct drm_connector *connector, bool force)
        int type;
 
        mode = reported_modes[0];
-       drm_mode_set_crtcinfo(&mode, 0);
 
        if (force) {
                struct intel_load_detect_pipe tmp;