drm/meson: exclusively use the canvas provider module
[linux-2.6-microblaze.git] / drivers / gpu / drm / meson / meson_crtc.c
index ec573c0..6d9311e 100644 (file)
@@ -37,7 +37,6 @@
 #include "meson_venc.h"
 #include "meson_vpp.h"
 #include "meson_viu.h"
-#include "meson_canvas.h"
 #include "meson_registers.h"
 
 /* CRTC definition */
@@ -46,7 +45,6 @@ struct meson_crtc {
        struct drm_crtc base;
        struct drm_pending_vblank_event *event;
        struct meson_drm *priv;
-       bool enabled;
 };
 #define to_meson_crtc(x) container_of(x, struct meson_crtc, base)
 
@@ -82,7 +80,8 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {
 
 };
 
-static void meson_crtc_enable(struct drm_crtc *crtc)
+static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
+                                    struct drm_crtc_state *old_state)
 {
        struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
        struct drm_crtc_state *crtc_state = crtc->state;
@@ -108,20 +107,6 @@ static void meson_crtc_enable(struct drm_crtc *crtc)
 
        drm_crtc_vblank_on(crtc);
 
-       meson_crtc->enabled = true;
-}
-
-static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
-                                    struct drm_crtc_state *old_state)
-{
-       struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
-       struct meson_drm *priv = meson_crtc->priv;
-
-       DRM_DEBUG_DRIVER("\n");
-
-       if (!meson_crtc->enabled)
-               meson_crtc_enable(crtc);
-
        priv->viu.osd1_enabled = true;
 }
 
@@ -153,8 +138,6 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc,
 
                crtc->state->event = NULL;
        }
-
-       meson_crtc->enabled = false;
 }
 
 static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
@@ -163,9 +146,6 @@ static void meson_crtc_atomic_begin(struct drm_crtc *crtc,
        struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
        unsigned long flags;
 
-       if (crtc->state->enable && !meson_crtc->enabled)
-               meson_crtc_enable(crtc);
-
        if (crtc->state->event) {
                WARN_ON(drm_crtc_vblank_get(crtc) != 0);
 
@@ -233,13 +213,7 @@ void meson_crtc_irq(struct meson_drm *priv)
                writel_relaxed(priv->viu.osd_sc_v_ctrl0,
                                priv->io_base + _REG(VPP_OSD_VSC_CTRL0));
 
-               if (priv->canvas)
-                       meson_canvas_config(priv->canvas, priv->canvas_id_osd1,
-                               priv->viu.osd1_addr, priv->viu.osd1_stride,
-                               priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE,
-                               MESON_CANVAS_BLKMODE_LINEAR, 0);
-               else
-                       meson_canvas_setup(priv, MESON_CANVAS_ID_OSD1,
+               meson_canvas_config(priv->canvas, priv->canvas_id_osd1,
                                priv->viu.osd1_addr, priv->viu.osd1_stride,
                                priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE,
                                MESON_CANVAS_BLKMODE_LINEAR, 0);
@@ -256,61 +230,34 @@ void meson_crtc_irq(struct meson_drm *priv)
 
                switch (priv->viu.vd1_planes) {
                case 3:
-                       if (priv->canvas)
-                               meson_canvas_config(priv->canvas,
-                                                   priv->canvas_id_vd1_2,
-                                                   priv->viu.vd1_addr2,
-                                                   priv->viu.vd1_stride2,
-                                                   priv->viu.vd1_height2,
-                                                   MESON_CANVAS_WRAP_NONE,
-                                                   MESON_CANVAS_BLKMODE_LINEAR,
-                                                   MESON_CANVAS_ENDIAN_SWAP64);
-                       else
-                               meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_2,
-                                                  priv->viu.vd1_addr2,
-                                                  priv->viu.vd1_stride2,
-                                                  priv->viu.vd1_height2,
-                                                  MESON_CANVAS_WRAP_NONE,
-                                                  MESON_CANVAS_BLKMODE_LINEAR,
-                                                  MESON_CANVAS_ENDIAN_SWAP64);
+                       meson_canvas_config(priv->canvas,
+                                           priv->canvas_id_vd1_2,
+                                           priv->viu.vd1_addr2,
+                                           priv->viu.vd1_stride2,
+                                           priv->viu.vd1_height2,
+                                           MESON_CANVAS_WRAP_NONE,
+                                           MESON_CANVAS_BLKMODE_LINEAR,
+                                           MESON_CANVAS_ENDIAN_SWAP64);
                /* fallthrough */
                case 2:
-                       if (priv->canvas)
-                               meson_canvas_config(priv->canvas,
-                                                   priv->canvas_id_vd1_1,
-                                                   priv->viu.vd1_addr1,
-                                                   priv->viu.vd1_stride1,
-                                                   priv->viu.vd1_height1,
-                                                   MESON_CANVAS_WRAP_NONE,
-                                                   MESON_CANVAS_BLKMODE_LINEAR,
-                                                   MESON_CANVAS_ENDIAN_SWAP64);
-                       else
-                               meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_1,
-                                                  priv->viu.vd1_addr2,
-                                                  priv->viu.vd1_stride2,
-                                                  priv->viu.vd1_height2,
-                                                  MESON_CANVAS_WRAP_NONE,
-                                                  MESON_CANVAS_BLKMODE_LINEAR,
-                                                  MESON_CANVAS_ENDIAN_SWAP64);
+                       meson_canvas_config(priv->canvas,
+                                           priv->canvas_id_vd1_1,
+                                           priv->viu.vd1_addr1,
+                                           priv->viu.vd1_stride1,
+                                           priv->viu.vd1_height1,
+                                           MESON_CANVAS_WRAP_NONE,
+                                           MESON_CANVAS_BLKMODE_LINEAR,
+                                           MESON_CANVAS_ENDIAN_SWAP64);
                /* fallthrough */
                case 1:
-                       if (priv->canvas)
-                               meson_canvas_config(priv->canvas,
-                                                   priv->canvas_id_vd1_0,
-                                                   priv->viu.vd1_addr0,
-                                                   priv->viu.vd1_stride0,
-                                                   priv->viu.vd1_height0,
-                                                   MESON_CANVAS_WRAP_NONE,
-                                                   MESON_CANVAS_BLKMODE_LINEAR,
-                                                   MESON_CANVAS_ENDIAN_SWAP64);
-                       else
-                               meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_0,
-                                                  priv->viu.vd1_addr2,
-                                                  priv->viu.vd1_stride2,
-                                                  priv->viu.vd1_height2,
-                                                  MESON_CANVAS_WRAP_NONE,
-                                                  MESON_CANVAS_BLKMODE_LINEAR,
-                                                  MESON_CANVAS_ENDIAN_SWAP64);
+                       meson_canvas_config(priv->canvas,
+                                           priv->canvas_id_vd1_0,
+                                           priv->viu.vd1_addr0,
+                                           priv->viu.vd1_stride0,
+                                           priv->viu.vd1_height0,
+                                           MESON_CANVAS_WRAP_NONE,
+                                           MESON_CANVAS_BLKMODE_LINEAR,
+                                           MESON_CANVAS_ENDIAN_SWAP64);
                };
 
                writel_relaxed(priv->viu.vd1_if0_gen_reg,