Merge branch 'lazytime' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / exynos / exynos_drm_drv.h
index a3ae95f1a40bcb6108ec5b0a71ea7dc938d4acd0..9afd390d4674d81ff28fb6e7ab5adcba2b8d8b37 100644 (file)
@@ -163,11 +163,10 @@ struct exynos_drm_display {
 };
 
 /*
- * Exynos drm manager ops
+ * Exynos drm crtc ops
  *
  * @dpms: control device power.
  * @mode_fixup: fix mode data before applying it
- * @mode_set: set the given mode to the manager
  * @commit: set current hw specific display mode to hw.
  * @enable_vblank: specific driver callback for enabling vblank interrupt.
  * @disable_vblank: specific driver callback for disabling vblank interrupt.
@@ -180,52 +179,28 @@ struct exynos_drm_display {
  * @te_handler: trigger to transfer video image at the tearing effect
  *     synchronization signal if there is a page flip request.
  */
-struct exynos_drm_manager;
-struct exynos_drm_manager_ops {
-       void (*dpms)(struct exynos_drm_manager *mgr, int mode);
-       bool (*mode_fixup)(struct exynos_drm_manager *mgr,
+struct exynos_drm_crtc;
+struct exynos_drm_crtc_ops {
+       void (*dpms)(struct exynos_drm_crtc *crtc, int mode);
+       bool (*mode_fixup)(struct exynos_drm_crtc *crtc,
                                const struct drm_display_mode *mode,
                                struct drm_display_mode *adjusted_mode);
-       void (*mode_set)(struct exynos_drm_manager *mgr,
-                               const struct drm_display_mode *mode);
-       void (*commit)(struct exynos_drm_manager *mgr);
-       int (*enable_vblank)(struct exynos_drm_manager *mgr);
-       void (*disable_vblank)(struct exynos_drm_manager *mgr);
-       void (*wait_for_vblank)(struct exynos_drm_manager *mgr);
-       void (*win_mode_set)(struct exynos_drm_manager *mgr,
+       void (*commit)(struct exynos_drm_crtc *crtc);
+       int (*enable_vblank)(struct exynos_drm_crtc *crtc);
+       void (*disable_vblank)(struct exynos_drm_crtc *crtc);
+       void (*wait_for_vblank)(struct exynos_drm_crtc *crtc);
+       void (*win_mode_set)(struct exynos_drm_crtc *crtc,
                                struct exynos_drm_plane *plane);
-       void (*win_commit)(struct exynos_drm_manager *mgr, int zpos);
-       void (*win_enable)(struct exynos_drm_manager *mgr, int zpos);
-       void (*win_disable)(struct exynos_drm_manager *mgr, int zpos);
-       void (*te_handler)(struct exynos_drm_manager *mgr);
-};
-
-/*
- * Exynos drm common manager structure, maps 1:1 with a crtc
- *
- * @list: the list entry for this manager
- * @drm_dev: pointer to the drm device
- * @crtc: crtc object.
- * @ops: pointer to callbacks for exynos drm specific functionality
- * @ctx: A pointer to the manager's implementation specific context
- */
-struct exynos_drm_manager {
-       struct list_head list;
-       struct drm_device *drm_dev;
-       struct drm_crtc *crtc;
-       struct exynos_drm_manager_ops *ops;
-};
-
-enum exynos_crtc_mode {
-       CRTC_MODE_NORMAL,       /* normal mode */
-       CRTC_MODE_BLANK,        /* The private plane of crtc is blank */
+       void (*win_commit)(struct exynos_drm_crtc *crtc, int zpos);
+       void (*win_enable)(struct exynos_drm_crtc *crtc, int zpos);
+       void (*win_disable)(struct exynos_drm_crtc *crtc, int zpos);
+       void (*te_handler)(struct exynos_drm_crtc *crtc);
 };
 
 /*
  * Exynos specific crtc structure.
  *
  * @base: crtc object.
- * @manager: the manager associated with this crtc
  * @type: one of EXYNOS_DISPLAY_TYPE_LCD and HDMI.
  * @pipe: a crtc index created at load() with a new crtc object creation
  *     and the crtc object would be set to private->crtc array
@@ -235,17 +210,18 @@ enum exynos_crtc_mode {
  *     we can refer to the crtc to current hardware interrupt occurred through
  *     this pipe value.
  * @dpms: store the crtc dpms value
- * @mode: store the crtc mode value
+ * @ops: pointer to callbacks for exynos drm specific functionality
+ * @ctx: A pointer to the crtc's implementation specific context
  */
 struct exynos_drm_crtc {
        struct drm_crtc                 base;
-       struct exynos_drm_manager       *manager;
        enum exynos_drm_output_type     type;
        unsigned int                    pipe;
        unsigned int                    dpms;
-       enum exynos_crtc_mode           mode;
        wait_queue_head_t               pending_flip_queue;
        atomic_t                        pending_flip;
+       struct exynos_drm_crtc_ops      *ops;
+       void                            *ctx;
 };
 
 struct exynos_drm_g2d_private {
@@ -282,7 +258,6 @@ struct exynos_drm_private {
         */
        struct drm_crtc *crtc[MAX_CRTC];
        struct drm_property *plane_zpos_property;
-       struct drm_property *crtc_mode_property;
 
        unsigned long da_start;
        unsigned long da_space_size;
@@ -369,6 +344,7 @@ void exynos_drm_component_del(struct device *dev,
                                enum exynos_drm_device_type dev_type);
 
 extern struct platform_driver fimd_driver;
+extern struct platform_driver decon_driver;
 extern struct platform_driver dp_driver;
 extern struct platform_driver dsi_driver;
 extern struct platform_driver mixer_driver;