drm/sun4i: Move layers from sun4i_drv to sun4i_crtc
authorChen-Yu Tsai <wens@csie.org>
Thu, 23 Feb 2017 08:05:36 +0000 (16:05 +0800)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 7 Mar 2017 21:18:23 +0000 (22:18 +0100)
This patch moves the sun4i_layers_init call from sun4i_drv_bind to
sun4i_crtc_init, and the layers pointer from struct sun4i_drv to
struct sun4i_crtc.

The layers are bound to a specific crtc, and they are not directly
used once initiated. They are used through their included drm_plane
structures.

Moving the layers into the crtc facilitates binding them to the crtc
explicitly, by setting the corresponding bit in their .possible_crtcs
fields right after the crtc is initialized. This is done in a later
patch.

Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/gpu/drm/sun4i/sun4i_crtc.c
drivers/gpu/drm/sun4i/sun4i_crtc.h
drivers/gpu/drm/sun4i/sun4i_drv.c
drivers/gpu/drm/sun4i/sun4i_drv.h

index eec13cea3144b45d6720b119fc553f97fe5728f6..bcc1c9533d6739f3022f2d1120f4b53b265fc9e2 100644 (file)
@@ -28,6 +28,7 @@
 #include "sun4i_backend.h"
 #include "sun4i_crtc.h"
 #include "sun4i_drv.h"
+#include "sun4i_layer.h"
 #include "sun4i_tcon.h"
 
 static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
@@ -149,6 +150,13 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
                return ERR_PTR(-ENOMEM);
        scrtc->drv = drv;
 
+       /* Create our layers */
+       scrtc->layers = sun4i_layers_init(drm);
+       if (IS_ERR(scrtc->layers)) {
+               dev_err(drm->dev, "Couldn't create the planes\n");
+               return ERR_CAST(scrtc->layers);
+       }
+
        ret = drm_crtc_init_with_planes(drm, &scrtc->crtc,
                                        drv->primary,
                                        NULL,
index dec8ce4d9b25b79c7c3de4272a924d5464031e1f..0a888f73c983af6cfb9dd6f0b35af2fc2c84c2e6 100644 (file)
@@ -18,6 +18,7 @@ struct sun4i_crtc {
        struct drm_pending_vblank_event *event;
 
        struct sun4i_drv                *drv;
+       struct sun4i_layer              **layers;
 };
 
 static inline struct sun4i_crtc *drm_crtc_to_sun4i_crtc(struct drm_crtc *crtc)
index 9adf1263e1e3fe45a9faf2f1a3a296684f5eea07..084c158611de41a5ade281f09f72f5b78c36c404 100644 (file)
@@ -23,7 +23,7 @@
 #include "sun4i_crtc.h"
 #include "sun4i_drv.h"
 #include "sun4i_framebuffer.h"
-#include "sun4i_layer.h"
+#include "sun4i_tcon.h"
 
 static const struct file_operations sun4i_drv_fops = {
        .owner          = THIS_MODULE,
@@ -115,14 +115,6 @@ static int sun4i_drv_bind(struct device *dev)
                goto cleanup_mode_config;
        }
 
-       /* Create our layers */
-       drv->layers = sun4i_layers_init(drm);
-       if (IS_ERR(drv->layers)) {
-               dev_err(drm->dev, "Couldn't create the planes\n");
-               ret = PTR_ERR(drv->layers);
-               goto cleanup_mode_config;
-       }
-
        /* Create our CRTC */
        drv->crtc = sun4i_crtc_init(drm);
        if (IS_ERR(drv->crtc)) {
index 597353eab728f240566d206433b367ffe194e9f1..e22ee536677ef8f493c0fdad26b19a51f4d375b8 100644 (file)
@@ -23,8 +23,6 @@ struct sun4i_drv {
 
        struct drm_plane        *primary;
        struct drm_fbdev_cma    *fbdev;
-
-       struct sun4i_layer      **layers;
 };
 
 #endif /* _SUN4I_DRV_H_ */