drm/omap: Move common display enable/disable code to encoder
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 4 Sep 2018 14:22:27 +0000 (17:22 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 18 Mar 2019 09:42:11 +0000 (11:42 +0200)
All .enable() and .disable() handlers for panels and connectors share
common code that validates and updates the device's state. Move it to
common locations in the omap_encoder_enable() and omap_encoder_disable()
handlers.

The enabled check in the .disable() handler is left untouched, it will
be addressed separately.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
12 files changed:
drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
drivers/gpu/drm/omapdrm/displays/connector-dvi.c
drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
drivers/gpu/drm/omapdrm/displays/panel-dpi.c
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
drivers/gpu/drm/omapdrm/omap_encoder.c

index 28a3ce8f88d260db15c3d27f9b6e4d5de2db20f5..910a5b9c036a0f47a8c962bd79e6e55b21a8c5b5 100644 (file)
@@ -37,40 +37,19 @@ static void tvc_disconnect(struct omap_dss_device *src,
 
 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 = {
index 24b14f44248ec0a05789eadac6a56d64fa346526..1e0925791c3d8399763ebdcb9365d2e26419a3e5 100644 (file)
@@ -49,21 +49,8 @@ static void dvic_disconnect(struct omap_dss_device *src,
 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)
@@ -74,8 +61,6 @@ 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,
index e602fa4a50a4a45d2ad58bec75b10eba70c3ba6b..649364e04edd5924021241fe2fe19c454e55a097 100644 (file)
@@ -43,40 +43,19 @@ static void hdmic_disconnect(struct omap_dss_device *src,
 
 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)
index 465120809eb3bb621343002b4f149a3c44787eca..ded779a598d361b9ca923d57e4f7841445736635 100644 (file)
@@ -51,12 +51,6 @@ static int panel_dpi_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;
@@ -70,8 +64,6 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev)
        gpiod_set_value_cansleep(ddata->enable_gpio, 1);
        backlight_enable(ddata->backlight);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
@@ -89,8 +81,6 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
        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,
index 29692a5217c50ebaf3d7a7ddb10e1c0029983925..e346451647c485ea495860a89a5ed3c147a58a87 100644 (file)
@@ -793,20 +793,8 @@ static int dsicm_enable(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);
@@ -816,8 +804,6 @@ static int dsicm_enable(struct omap_dss_device *dssdev)
        if (r)
                goto err;
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        mutex_unlock(&ddata->lock);
 
        dsicm_bl_power(ddata, true);
@@ -835,8 +821,6 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
        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);
@@ -853,8 +837,6 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
 
        src->ops->dsi.bus_unlock(src);
 
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
-
        mutex_unlock(&ddata->lock);
 }
 
index f6ef8ff964dd8dfa068f65037c0aea973bc712c8..19c0c3e85aa5a23a1e3e5bda757c9a7b49556723 100644 (file)
@@ -129,12 +129,6 @@ static int lb035q02_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;
@@ -142,8 +136,6 @@ static int lb035q02_enable(struct omap_dss_device *dssdev)
        if (ddata->enable_gpio)
                gpiod_set_value_cansleep(ddata->enable_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
@@ -159,8 +151,6 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
                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,
index f445de6369f7aca0e4becab13843c85aec4ba001..9cef1d16d7d398350455e7f28ee63b34b65743cc 100644 (file)
@@ -124,20 +124,12 @@ static int nec_8048_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;
 
        gpiod_set_value_cansleep(ddata->res_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
@@ -152,8 +144,6 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
        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,
index 64b1369cb274f3d7973c71323793452684fcdb3e..5a06fbb7984afccd3e75d25278f03e179850730c 100644 (file)
@@ -68,12 +68,6 @@ static int sharp_ls_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;
-
        if (ddata->vcc) {
                r = regulator_enable(ddata->vcc);
                if (r != 0)
@@ -95,8 +89,6 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
        if (ddata->ini_gpio)
                gpiod_set_value_cansleep(ddata->ini_gpio, 1);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
@@ -122,8 +114,6 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
 
        if (ddata->vcc)
                regulator_disable(ddata->vcc);
-
-       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
index e04663856b314f204cda75e543a64b1ae212cae1..209a87c70c9990798bfdecdfe12388a7194da933 100644 (file)
@@ -594,39 +594,23 @@ static int acx565akm_enable(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,
index 7ddc8c574a61adcd5f092e94262c6fbe4a06a637..b09fea97a441d92a8afd9c3fadf5dff69b729713 100644 (file)
@@ -175,12 +175,6 @@ static int td028ttec1_panel_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;
@@ -198,7 +192,7 @@ static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
 
        if (r) {
                dev_warn(dssdev->dev, "transfer error\n");
-               goto transfer_err;
+               return -EIO;
        }
 
        /* deep standby out */
@@ -268,10 +262,6 @@ static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
 
        r |= jbt_ret_write_0(ddata, JBT_REG_DISPLAY_ON);
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
-transfer_err:
-
        return r ? -EIO : 0;
 }
 
@@ -291,8 +281,6 @@ static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
        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,
index 8440fcb744d96f68fee9c3f7929eca005a67a0b5..998f21f7701a83591e45e123744c47d99e4385bd 100644 (file)
@@ -326,12 +326,6 @@ static int tpo_td043_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;
@@ -348,8 +342,6 @@ static int tpo_td043_enable(struct omap_dss_device *dssdev)
                }
        }
 
-       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
-
        return 0;
 }
 
@@ -365,8 +357,6 @@ static void tpo_td043_disable(struct omap_dss_device *dssdev)
 
        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,
index 0d85b3a357678d791cb3d4bc5a85c98f3c0e10c3..5427c0b3ff9e1dddfa040f28384ab954823ef1e3 100644 (file)
@@ -147,21 +147,45 @@ static void omap_encoder_disable(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;
+
+       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,