Before applying the patch, used the of_get_videomode function to
parse the display-timings in the panel which is the child driver
of dsi in the devicetree. this is wrong. So removed the
of_get_videomode and fixed to get videomode struct through
mode_set callback function.

Signed-off-by: Hoegeun Kwon <hoegeun.kwon at samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_mic.c | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c 
b/drivers/gpu/drm/exynos/exynos_drm_mic.c
index a0def0b..9a50ceb 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_mic.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c
@@ -286,13 +286,6 @@ static int parse_dt(struct exynos_mic *mic)
                        }
                        nodes[j++] = remote_node;

-                       ret = of_get_videomode(remote_node,
-                                                       &mic->vm, 0);
-                       if (ret) {
-                               DRM_ERROR("mic: failed to get videomode");
-                               goto exit;
-                       }
-
                        break;
                default:
                        DRM_ERROR("mic: Unknown endpoint from MIC");
@@ -329,6 +322,27 @@ static void mic_post_disable(struct drm_bridge *bridge)
        mutex_unlock(&mic_mutex);
 }

+static void mic_mode_set(struct drm_bridge *bridge,
+                       struct drm_display_mode *mode,
+                       struct drm_display_mode *adjusted_mode)
+{
+       struct exynos_mic *mic = bridge->driver_private;
+
+       mutex_lock(&mic_mutex);
+       if (mic->enabled)
+               goto already_enabled;
+
+       drm_display_mode_to_videomode(mode, &mic->vm);
+
+       if (!mic->i80_mode)
+               mic_set_porch_timing(mic);
+       mic_set_img_size(mic);
+       mic_set_output_timing(mic);
+
+already_enabled:
+       mutex_unlock(&mic_mutex);
+}
+
 static void mic_pre_enable(struct drm_bridge *bridge)
 {
        struct exynos_mic *mic = bridge->driver_private;
@@ -355,10 +369,6 @@ static void mic_pre_enable(struct drm_bridge *bridge)
                goto turn_off_clks;
        }

-       if (!mic->i80_mode)
-               mic_set_porch_timing(mic);
-       mic_set_img_size(mic);
-       mic_set_output_timing(mic);
        mic_set_reg_on(mic, 1);
        mic->enabled = 1;
        mutex_unlock(&mic_mutex);
@@ -377,6 +387,7 @@ static void mic_enable(struct drm_bridge *bridge) { }
 static const struct drm_bridge_funcs mic_bridge_funcs = {
        .disable = mic_disable,
        .post_disable = mic_post_disable,
+       .mode_set = mic_mode_set,
        .pre_enable = mic_pre_enable,
        .enable = mic_enable,
 };
-- 
1.9.1

Reply via email to