drm/exynos: remove struct exynos_drm_manager
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>
Sun, 18 Jan 2015 09:16:23 +0000 (18:16 +0900)
committerInki Dae <daeinki@gmail.com>
Sun, 25 Jan 2015 12:28:07 +0000 (21:28 +0900)
exynos_drm_manager was just a redundant struct to represent the crtc as
well. In this commit we merge exynos_drm_manager into exynos_drm_crtc to
remove an unnecessary level of indirection easing the understand of the
flow on exynos.

Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_crtc.c
drivers/gpu/drm/exynos/exynos_drm_crtc.h
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_fimd.c
drivers/gpu/drm/exynos/exynos_drm_plane.c
drivers/gpu/drm/exynos/exynos_drm_vidi.c
drivers/gpu/drm/exynos/exynos_mixer.c

index 1eb5750..9e8ed5f 100644 (file)
@@ -23,7 +23,6 @@
 static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode)
 {
        struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
 
        DRM_DEBUG_KMS("crtc[%d] mode[%d]\n", crtc->base.id, mode);
 
@@ -41,8 +40,8 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode)
                drm_crtc_vblank_off(crtc);
        }
 
-       if (manager->ops->dpms)
-               manager->ops->dpms(manager, mode);
+       if (exynos_crtc->ops->dpms)
+               exynos_crtc->ops->dpms(exynos_crtc, mode);
 
        exynos_crtc->dpms = mode;
 
@@ -58,16 +57,15 @@ static void exynos_drm_crtc_prepare(struct drm_crtc *crtc)
 static void exynos_drm_crtc_commit(struct drm_crtc *crtc)
 {
        struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
        struct exynos_drm_plane *exynos_plane = to_exynos_plane(crtc->primary);
 
        exynos_drm_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
 
-       if (manager->ops->win_commit)
-               manager->ops->win_commit(manager, exynos_plane->zpos);
+       if (exynos_crtc->ops->win_commit)
+               exynos_crtc->ops->win_commit(exynos_crtc, exynos_plane->zpos);
 
-       if (manager->ops->commit)
-               manager->ops->commit(manager);
+       if (exynos_crtc->ops->commit)
+               exynos_crtc->ops->commit(exynos_crtc);
 
        exynos_plane_dpms(crtc->primary, DRM_MODE_DPMS_ON);
 }
@@ -78,10 +76,10 @@ exynos_drm_crtc_mode_fixup(struct drm_crtc *crtc,
                            struct drm_display_mode *adjusted_mode)
 {
        struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
 
-       if (manager->ops->mode_fixup)
-               return manager->ops->mode_fixup(manager, mode, adjusted_mode);
+       if (exynos_crtc->ops->mode_fixup)
+               return exynos_crtc->ops->mode_fixup(exynos_crtc, mode,
+                                                   adjusted_mode);
 
        return true;
 }
@@ -92,7 +90,6 @@ exynos_drm_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
                          struct drm_framebuffer *old_fb)
 {
        struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
        struct drm_framebuffer *fb = crtc->primary->fb;
        unsigned int crtc_w;
        unsigned int crtc_h;
@@ -106,8 +103,8 @@ exynos_drm_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
        crtc_w = fb->width - x;
        crtc_h = fb->height - y;
 
-       if (manager->ops->mode_set)
-               manager->ops->mode_set(manager, &crtc->mode);
+       if (exynos_crtc->ops->mode_set)
+               exynos_crtc->ops->mode_set(exynos_crtc, &crtc->mode);
 
        return exynos_plane_mode_set(crtc->primary, crtc, fb, 0, 0,
                                     crtc_w, crtc_h, x, y, crtc_w, crtc_h);
@@ -299,9 +296,11 @@ static void exynos_drm_crtc_attach_mode_property(struct drm_crtc *crtc)
        drm_object_attach_property(&crtc->base, prop, 0);
 }
 
-int exynos_drm_crtc_create(struct exynos_drm_manager *manager,
-                          struct drm_device *drm_dev, int pipe,
-                          enum exynos_drm_output_type type)
+struct exynos_drm_crtc *exynos_drm_crtc_create(struct drm_device *drm_dev,
+                                              int pipe,
+                                              enum exynos_drm_output_type type,
+                                              struct exynos_drm_crtc_ops *ops,
+                                              void *ctx)
 {
        struct exynos_drm_crtc *exynos_crtc;
        struct drm_plane *plane;
@@ -311,15 +310,16 @@ int exynos_drm_crtc_create(struct exynos_drm_manager *manager,
 
        exynos_crtc = kzalloc(sizeof(*exynos_crtc), GFP_KERNEL);
        if (!exynos_crtc)
-               return -ENOMEM;
+               return ERR_PTR(-ENOMEM);
 
        init_waitqueue_head(&exynos_crtc->pending_flip_queue);
        atomic_set(&exynos_crtc->pending_flip, 0);
 
        exynos_crtc->dpms = DRM_MODE_DPMS_OFF;
-       exynos_crtc->manager = manager;
        exynos_crtc->pipe = pipe;
        exynos_crtc->type = type;
+       exynos_crtc->ops = ops;
+       exynos_crtc->ctx = ctx;
        plane = exynos_plane_init(drm_dev, 1 << pipe,
                                  DRM_PLANE_TYPE_PRIMARY);
        if (IS_ERR(plane)) {
@@ -327,7 +327,6 @@ int exynos_drm_crtc_create(struct exynos_drm_manager *manager,
                goto err_plane;
        }
 
-       manager->crtc = &exynos_crtc->base;
        crtc = &exynos_crtc->base;
 
        private->crtc[pipe] = crtc;
@@ -341,13 +340,13 @@ int exynos_drm_crtc_create(struct exynos_drm_manager *manager,
 
        exynos_drm_crtc_attach_mode_property(crtc);
 
-       return 0;
+       return exynos_crtc;
 
 err_crtc:
        plane->funcs->destroy(plane);
 err_plane:
        kfree(exynos_crtc);
-       return ret;
+       return ERR_PTR(ret);
 }
 
 int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int pipe)
@@ -355,13 +354,12 @@ int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int pipe)
        struct exynos_drm_private *private = dev->dev_private;
        struct exynos_drm_crtc *exynos_crtc =
                to_exynos_crtc(private->crtc[pipe]);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
 
        if (exynos_crtc->dpms != DRM_MODE_DPMS_ON)
                return -EPERM;
 
-       if (manager->ops->enable_vblank)
-               manager->ops->enable_vblank(manager);
+       if (exynos_crtc->ops->enable_vblank)
+               exynos_crtc->ops->enable_vblank(exynos_crtc);
 
        return 0;
 }
@@ -371,13 +369,12 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int pipe)
        struct exynos_drm_private *private = dev->dev_private;
        struct exynos_drm_crtc *exynos_crtc =
                to_exynos_crtc(private->crtc[pipe]);
-       struct exynos_drm_manager *manager = exynos_crtc->manager;
 
        if (exynos_crtc->dpms != DRM_MODE_DPMS_ON)
                return;
 
-       if (manager->ops->disable_vblank)
-               manager->ops->disable_vblank(manager);
+       if (exynos_crtc->ops->disable_vblank)
+               exynos_crtc->ops->disable_vblank(exynos_crtc);
 }
 
 void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int pipe)
@@ -408,7 +405,7 @@ void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int pipe)
 
 void exynos_drm_crtc_complete_scanout(struct drm_framebuffer *fb)
 {
-       struct exynos_drm_manager *manager;
+       struct exynos_drm_crtc *exynos_crtc;
        struct drm_device *dev = fb->dev;
        struct drm_crtc *crtc;
 
@@ -417,15 +414,15 @@ void exynos_drm_crtc_complete_scanout(struct drm_framebuffer *fb)
         * for all encoders.
         */
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-               manager = to_exynos_crtc(crtc)->manager;
+               exynos_crtc = to_exynos_crtc(crtc);
 
                /*
                 * wait for vblank interrupt
                 * - this makes sure that overlay data are updated to
                 *      real hardware.
                 */
-               if (manager->ops->wait_for_vblank)
-                       manager->ops->wait_for_vblank(manager);
+               if (exynos_crtc->ops->wait_for_vblank)
+                       exynos_crtc->ops->wait_for_vblank(exynos_crtc);
        }
 }
 
@@ -447,8 +444,8 @@ int exynos_drm_crtc_get_pipe_from_type(struct drm_device *drm_dev,
 
 void exynos_drm_crtc_te_handler(struct drm_crtc *crtc)
 {
-       struct exynos_drm_manager *manager = to_exynos_crtc(crtc)->manager;
+       struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
 
-       if (manager->ops->te_handler)
-               manager->ops->te_handler(manager);
+       if (exynos_crtc->ops->te_handler)
+               exynos_crtc->ops->te_handler(exynos_crtc);
 }
index d7690e9..6258b80 100644 (file)
 
 #include "exynos_drm_drv.h"
 
-int exynos_drm_crtc_create(struct exynos_drm_manager *manager,
-                          struct drm_device *drm_dev, int pipe,
-                          enum exynos_drm_output_type type);
+struct exynos_drm_crtc *exynos_drm_crtc_create(struct drm_device *drm_dev,
+                                              int pipe,
+                                              enum exynos_drm_output_type type,
+                                              struct exynos_drm_crtc_ops *ops,
+                                              void *context);
 int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int pipe);
 void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int pipe);
 void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int pipe);
Simple merge