Merge tag 'topic/drm-misc-2015-03-31' of git://anongit.freedesktop.org/drm-intel...
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / exynos / exynos_drm_vidi.c
index 9c8300edd348434899178215e07b4ba3fa9f73c4..b886972b5888e4360fa441a617c8f8c9026d19d6 100644 (file)
@@ -97,17 +97,16 @@ static const char fake_edid_info[] = {
        0x00, 0x00, 0x00, 0x06
 };
 
-static void vidi_apply(struct exynos_drm_crtc *crtc)
+static void vidi_apply(struct vidi_context *ctx)
 {
-       struct vidi_context *ctx = crtc->ctx;
-       struct exynos_drm_crtc_ops *crtc_ops = crtc->ops;
+       struct exynos_drm_crtc_ops *crtc_ops = ctx->crtc->ops;
        struct vidi_win_data *win_data;
        int i;
 
        for (i = 0; i < WINDOWS_NR; i++) {
                win_data = &ctx->win_data[i];
                if (win_data->enabled && (crtc_ops && crtc_ops->win_commit))
-                       crtc_ops->win_commit(crtc, i);
+                       crtc_ops->win_commit(ctx->crtc, i);
        }
 }
 
@@ -240,10 +239,8 @@ static void vidi_win_disable(struct exynos_drm_crtc *crtc, int zpos)
        /* TODO. */
 }
 
-static int vidi_power_on(struct exynos_drm_crtc *crtc, bool enable)
+static int vidi_power_on(struct vidi_context *ctx, bool enable)
 {
-       struct vidi_context *ctx = crtc->ctx;
-
        DRM_DEBUG_KMS("%s\n", __FILE__);
 
        if (enable != false && enable != true)
@@ -254,9 +251,9 @@ static int vidi_power_on(struct exynos_drm_crtc *crtc, bool enable)
 
                /* if vblank was enabled status, enable it again. */
                if (test_and_clear_bit(0, &ctx->irq_flags))
-                       vidi_enable_vblank(crtc);
+                       vidi_enable_vblank(ctx->crtc);
 
-               vidi_apply(crtc);
+               vidi_apply(ctx);
        } else {
                ctx->suspended = true;
        }
@@ -274,12 +271,12 @@ static void vidi_dpms(struct exynos_drm_crtc *crtc, int mode)
 
        switch (mode) {
        case DRM_MODE_DPMS_ON:
-               vidi_power_on(crtc, true);
+               vidi_power_on(ctx, true);
                break;
        case DRM_MODE_DPMS_STANDBY:
        case DRM_MODE_DPMS_SUSPEND:
        case DRM_MODE_DPMS_OFF:
-               vidi_power_on(crtc, false);
+               vidi_power_on(ctx, false);
                break;
        default:
                DRM_DEBUG_KMS("unspecified mode %d\n", mode);
@@ -548,6 +545,8 @@ static int vidi_bind(struct device *dev, struct device *master, void *data)
        struct drm_device *drm_dev = data;
        int ret;
 
+       vidi_ctx_initialize(ctx, drm_dev);
+
        ctx->crtc = exynos_drm_crtc_create(drm_dev, ctx->pipe,
                                           EXYNOS_DISPLAY_TYPE_VIDI,
                                           &vidi_crtc_ops, ctx);
@@ -556,8 +555,6 @@ static int vidi_bind(struct device *dev, struct device *master, void *data)
                return PTR_ERR(ctx->crtc);
        }
 
-       vidi_ctx_initialize(ctx, drm_dev);
-
        ret = exynos_drm_create_enc_conn(drm_dev, &ctx->display);
        if (ret) {
                ctx->crtc->base.funcs->destroy(&ctx->crtc->base);