if (r)
                return r;
 
+       dssdev->driver->disable(dssdev);
        dssdev->driver->set_timings(dssdev, &t);
+       r = dssdev->driver->enable(dssdev);
+       if (r)
+               return r;
 
        return size;
 }
 
 void omapdss_dpi_set_timings(struct omap_dss_device *dssdev,
                struct omap_video_timings *timings)
 {
-       int r;
-
        DSSDBG("dpi_set_timings\n");
 
        mutex_lock(&dpi.lock);
 
        dpi.timings = *timings;
 
-       if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
-               r = dispc_runtime_get();
-               if (r)
-                       return;
-
-               dpi_set_mode(dssdev);
-
-               dispc_runtime_put();
-       } else {
-               dss_mgr_set_timings(dssdev->manager, timings);
-       }
-
        mutex_unlock(&dpi.lock);
 }
 EXPORT_SYMBOL(omapdss_dpi_set_timings);
 
        if (t != NULL)
                hdmi.ip_data.cfg = *t;
 
-       if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
-               int r;
-
-               hdmi_power_off(dssdev);
-
-               r = hdmi_power_on(dssdev);
-               if (r)
-                       DSSERR("failed to power on device\n");
-       } else {
-               dss_mgr_set_timings(dssdev->manager, &t->timings);
-       }
-
        mutex_unlock(&hdmi.lock);
 }
 
 
 void omapdss_sdi_set_timings(struct omap_dss_device *dssdev,
                struct omap_video_timings *timings)
 {
-       int r;
-
        sdi.timings = *timings;
-
-       if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
-               omapdss_sdi_display_disable(dssdev);
-
-               r = omapdss_sdi_display_enable(dssdev);
-               if (r)
-                       DSSERR("failed to set new timings\n");
-       }
 }
 EXPORT_SYMBOL(omapdss_sdi_set_timings);
 
 
 
        venc.timings = *timings;
 
-       if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
-               int r;
-
-               /* turn the venc off and on to get new timings to use */
-               venc_power_off(dssdev);
-
-               r = venc_power_on(dssdev);
-               if (r)
-                       DSSERR("failed to power on VENC\n");
-       } else {
-               dss_mgr_set_timings(dssdev->manager, timings);
-       }
-
        mutex_unlock(&venc.venc_lock);
 }