static int tvc_enable(struct omap_dss_device *dssdev)
 {
-       struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *src = dssdev->src;
-       int r;
 
-       dev_dbg(ddata->dev, "enable\n");
-
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
-       r = src->ops->enable(src);
-       if (r)
-               return r;
-
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-       return r;
+       return src->ops->enable(src);
 }
 
 static void tvc_disable(struct omap_dss_device *dssdev)
 {
-       struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *src = dssdev->src;
 
-       dev_dbg(ddata->dev, "disable\n");
-
        if (!omapdss_device_is_enabled(dssdev))
                return;
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static const struct omap_dss_device_ops tvc_ops = {
 
 static int dvic_enable(struct omap_dss_device *dssdev)
 {
        struct omap_dss_device *src = dssdev->src;
-       int r;
-
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
 
-       r = src->ops->enable(src);
-       if (r)
-               return r;
-
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-       return 0;
+       return src->ops->enable(src);
 }
 
 static void dvic_disable(struct omap_dss_device *dssdev)
                return;
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static int dvic_ddc_read(struct i2c_adapter *adapter,
 
 
 static int hdmic_enable(struct omap_dss_device *dssdev)
 {
-       struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *src = dssdev->src;
-       int r;
-
-       dev_dbg(ddata->dev, "enable\n");
-
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
 
-       r = src->ops->enable(src);
-       if (r)
-               return r;
-
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-       return r;
+       return src->ops->enable(src);
 }
 
 static void hdmic_disable(struct omap_dss_device *dssdev)
 {
-       struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *src = dssdev->src;
 
-       dev_dbg(ddata->dev, "disable\n");
-
        if (!omapdss_device_is_enabled(dssdev))
                return;
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static bool hdmic_detect(struct omap_dss_device *dssdev)
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        r = src->ops->enable(src);
        if (r)
                return r;
        gpiod_set_value_cansleep(ddata->enable_gpio, 1);
        backlight_enable(ddata->backlight);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
        regulator_disable(ddata->vcc_supply);
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void panel_dpi_get_timings(struct omap_dss_device *dssdev,
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       dev_dbg(&ddata->pdev->dev, "enable\n");
-
        mutex_lock(&ddata->lock);
 
-       if (!omapdss_device_is_connected(dssdev)) {
-               r = -ENODEV;
-               goto err;
-       }
-
-       if (omapdss_device_is_enabled(dssdev)) {
-               r = 0;
-               goto err;
-       }
-
        src->ops->dsi.bus_lock(src);
 
        r = dsicm_power_on(ddata);
        if (r)
                goto err;
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        mutex_unlock(&ddata->lock);
 
        dsicm_bl_power(ddata, true);
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       dev_dbg(&ddata->pdev->dev, "disable\n");
-
        dsicm_bl_power(ddata, false);
 
        mutex_lock(&ddata->lock);
 
        src->ops->dsi.bus_unlock(src);
 
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
-
        mutex_unlock(&ddata->lock);
 }
 
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        r = src->ops->enable(src);
        if (r)
                return r;
        if (ddata->enable_gpio)
                gpiod_set_value_cansleep(ddata->enable_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
                gpiod_set_value_cansleep(ddata->enable_gpio, 0);
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void lb035q02_get_timings(struct omap_dss_device *dssdev,
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        r = src->ops->enable(src);
        if (r)
                return r;
 
        gpiod_set_value_cansleep(ddata->res_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
        gpiod_set_value_cansleep(ddata->res_gpio, 0);
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void nec_8048_get_timings(struct omap_dss_device *dssdev,
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        if (ddata->vcc) {
                r = regulator_enable(ddata->vcc);
                if (r != 0)
        if (ddata->ini_gpio)
                gpiod_set_value_cansleep(ddata->ini_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
 
        if (ddata->vcc)
                regulator_disable(ddata->vcc);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
 
        struct panel_drv_data *ddata = to_panel_data(dssdev);
        int r;
 
-       dev_dbg(dssdev->dev, "%s\n", __func__);
-
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        mutex_lock(&ddata->mutex);
        r = acx565akm_panel_power_on(dssdev);
        mutex_unlock(&ddata->mutex);
-       if (r)
-               return r;
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-       return 0;
+       return r;
 }
 
 static void acx565akm_disable(struct omap_dss_device *dssdev)
 {
        struct panel_drv_data *ddata = to_panel_data(dssdev);
 
-       dev_dbg(dssdev->dev, "%s\n", __func__);
-
        if (!omapdss_device_is_enabled(dssdev))
                return;
 
        mutex_lock(&ddata->mutex);
        acx565akm_panel_power_off(dssdev);
        mutex_unlock(&ddata->mutex);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void acx565akm_get_timings(struct omap_dss_device *dssdev,
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        r = src->ops->enable(src);
        if (r)
                return r;
 
        if (r) {
                dev_warn(dssdev->dev, "transfer error\n");
-               goto transfer_err;
+               return -EIO;
        }
 
        /* deep standby out */
 
        r |= jbt_ret_write_0(ddata, JBT_REG_DISPLAY_ON);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-transfer_err:
-
        return r ? -EIO : 0;
 }
 
        jbt_reg_write_1(ddata, JBT_REG_POWER_ON_OFF, 0x00);
 
        src->ops->disable(src);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev,
 
        struct omap_dss_device *src = dssdev->src;
        int r;
 
-       if (!omapdss_device_is_connected(dssdev))
-               return -ENODEV;
-
-       if (omapdss_device_is_enabled(dssdev))
-               return 0;
-
        r = src->ops->enable(src);
        if (r)
                return r;
                }
        }
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
 
        if (!ddata->spi_suspended)
                tpo_td043_power_off(ddata);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void tpo_td043_get_timings(struct omap_dss_device *dssdev,
 
 {
        struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
        struct omap_dss_device *dssdev = omap_encoder->display;
+       struct drm_device *dev = encoder->dev;
+
+       dev_dbg(dev->dev, "disable(%s)\n", dssdev->name);
+
+       if (!omapdss_device_is_enabled(dssdev))
+               return;
 
        dssdev->ops->disable(dssdev);
+
+       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void omap_encoder_enable(struct drm_encoder *encoder)
 {
        struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
        struct omap_dss_device *dssdev = omap_encoder->display;
+       struct drm_device *dev = encoder->dev;
        int r;
 
+       dev_dbg(dev->dev, "enable(%s)\n", dssdev->name);
+
+       if (!omapdss_device_is_connected(dssdev)) {
+               r = -ENODEV;
+               goto error;
+       }
+
+       if (omapdss_device_is_enabled(dssdev))
+               return;
+
        r = dssdev->ops->enable(dssdev);
        if (r)
-               dev_err(encoder->dev->dev,
-                       "Failed to enable display '%s': %d\n",
-                       dssdev->name, r);
+               goto error;
+
+       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
+       return;
+
+error:
+       dev_err(dev->dev, "Failed to enable display '%s': %d\n",
+               dssdev->name, r);
 }
 
 static int omap_encoder_atomic_check(struct drm_encoder *encoder,