The bridge will not necessarily use the encoder of struct exynos_dsi,
but might use another encoder from another drm driver. Therefore, the
driver has to use the encoder from the bridge instead of the one from
exynos_dsi.

Signed-off-by: Michael Tretter <m.tret...@pengutronix.de>
---
 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 657de5407190..51ec37304a69 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1289,7 +1289,7 @@ static irqreturn_t exynos_dsi_irq(int irq, void *dev_id)
 static irqreturn_t exynos_dsi_te_irq_handler(int irq, void *dev_id)
 {
        struct exynos_dsi *dsi = (struct exynos_dsi *)dev_id;
-       struct drm_encoder *encoder = &dsi->encoder;
+       struct drm_encoder *encoder = dsi->bridge.encoder;
 
        if (dsi->state & DSIM_STATE_VIDOUT_AVAILABLE)
                exynos_drm_crtc_te_handler(encoder->crtc);
@@ -1491,11 +1491,10 @@ static const struct drm_connector_helper_funcs 
exynos_dsi_connector_helper_funcs
        .get_modes = exynos_dsi_get_modes,
 };
 
-static int exynos_dsi_create_connector(struct drm_encoder *encoder)
+static int exynos_dsi_create_connector(struct exynos_dsi *dsi)
 {
-       struct exynos_dsi *dsi = encoder_to_dsi(encoder);
        struct drm_connector *connector = &dsi->connector;
-       struct drm_device *drm = encoder->dev;
+       struct drm_device *drm = dsi->bridge.dev;
        int ret;
 
        connector->polled = DRM_CONNECTOR_POLL_HPD;
@@ -1510,7 +1509,7 @@ static int exynos_dsi_create_connector(struct drm_encoder 
*encoder)
 
        connector->status = connector_status_disconnected;
        drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs);
-       drm_connector_attach_encoder(connector, encoder);
+       drm_connector_attach_encoder(connector, dsi->bridge.encoder);
        if (!drm->registered)
                return 0;
 
@@ -1586,7 +1585,7 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host 
*host,
                dsi->out_bridge = out_bridge;
                list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
        } else {
-               int ret = exynos_dsi_create_connector(encoder);
+               int ret = exynos_dsi_create_connector(dsi);
 
                if (ret) {
                        DRM_DEV_ERROR(dsi->dev,
@@ -1637,7 +1636,7 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host 
*host,
                                  struct mipi_dsi_device *device)
 {
        struct exynos_dsi *dsi = host_to_dsi(host);
-       struct drm_device *drm = dsi->encoder.dev;
+       struct drm_device *drm = dsi->bridge.encoder->dev;
 
        if (dsi->panel) {
                mutex_lock(&drm->mode_config.mutex);
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to