]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/exynos/exynos_drm_drv.h
drm/exynos: split display's .dpms() into .enable() and .disable()
[karo-tx-linux.git] / drivers / gpu / drm / exynos / exynos_drm_drv.h
index 29e3fb78c615fa7ad58ee21a1c7c0ad19bd6ffd3..5c55606a4095d8e580bcce3a94f1681edc3eb418 100644 (file)
 #define to_exynos_crtc(x)      container_of(x, struct exynos_drm_crtc, base)
 #define to_exynos_plane(x)     container_of(x, struct exynos_drm_plane, base)
 
-/* This enumerates device type. */
-enum exynos_drm_device_type {
-       EXYNOS_DEVICE_TYPE_NONE,
-       EXYNOS_DEVICE_TYPE_CRTC,
-       EXYNOS_DEVICE_TYPE_CONNECTOR,
-};
-
 /* this enumerates display type. */
 enum exynos_drm_output_type {
        EXYNOS_DISPLAY_TYPE_NONE,
@@ -51,28 +44,17 @@ enum exynos_drm_output_type {
  *     - the unit is screen coordinates.
  * @src_y: offset y on a framebuffer to be displayed.
  *     - the unit is screen coordinates.
- * @src_width: width of a partial image to be displayed from framebuffer.
- * @src_height: height of a partial image to be displayed from framebuffer.
- * @fb_width: width of a framebuffer.
- * @fb_height: height of a framebuffer.
+ * @src_w: width of a partial image to be displayed from framebuffer.
+ * @src_h: height of a partial image to be displayed from framebuffer.
  * @crtc_x: offset x on hardware screen.
  * @crtc_y: offset y on hardware screen.
- * @crtc_width: window width to be displayed (hardware screen).
- * @crtc_height: window height to be displayed (hardware screen).
- * @mode_width: width of screen mode.
- * @mode_height: height of screen mode.
+ * @crtc_w: window width to be displayed (hardware screen).
+ * @crtc_h: window height to be displayed (hardware screen).
  * @h_ratio: horizontal scaling ratio, 16.16 fixed point
  * @v_ratio: vertical scaling ratio, 16.16 fixed point
- * @refresh: refresh rate.
- * @scan_flag: interlace or progressive way.
- *     (it could be DRM_MODE_FLAG_*)
- * @bpp: pixel size.(in bit)
- * @pixel_format: fourcc pixel format of this overlay
  * @dma_addr: array of bus(accessed by dma) address to the memory region
  *           allocated for a overlay.
  * @zpos: order of overlay layer(z position).
- * @enabled: enabled or not.
- * @resume: to resume or not.
  *
  * this structure is common to exynos SoC and its contents would be copied
  * to hardware specific overlay info.
@@ -82,28 +64,16 @@ struct exynos_drm_plane {
        struct drm_plane base;
        unsigned int src_x;
        unsigned int src_y;
-       unsigned int src_width;
-       unsigned int src_height;
-       unsigned int fb_width;
-       unsigned int fb_height;
+       unsigned int src_w;
+       unsigned int src_h;
        unsigned int crtc_x;
        unsigned int crtc_y;
-       unsigned int crtc_width;
-       unsigned int crtc_height;
-       unsigned int mode_width;
-       unsigned int mode_height;
+       unsigned int crtc_w;
+       unsigned int crtc_h;
        unsigned int h_ratio;
        unsigned int v_ratio;
-       unsigned int refresh;
-       unsigned int scan_flag;
-       unsigned int bpp;
-       unsigned int pitch;
-       uint32_t pixel_format;
        dma_addr_t dma_addr[MAX_FB_BUFFER];
        unsigned int zpos;
-
-       bool enabled:1;
-       bool resume:1;
 };
 
 /*
@@ -116,7 +86,8 @@ struct exynos_drm_plane {
  * @mode_set: convert drm_display_mode to hw specific display mode and
  *           would be called by encoder->mode_set().
  * @check_mode: check if mode is valid or not.
- * @dpms: display device on or off.
+ * @enable: display device on.
+ * @disable: display device off.
  * @commit: apply changes to hw
  */
 struct exynos_drm_display;
@@ -132,7 +103,8 @@ struct exynos_drm_display_ops {
                                struct drm_display_mode *mode);
        int (*check_mode)(struct exynos_drm_display *display,
                                struct drm_display_mode *mode);
-       void (*dpms)(struct exynos_drm_display *display, int mode);
+       void (*enable)(struct exynos_drm_display *display);
+       void (*disable)(struct exynos_drm_display *display);
        void (*commit)(struct exynos_drm_display *display);
 };
 
@@ -157,15 +129,16 @@ struct exynos_drm_display {
 /*
  * Exynos drm crtc ops
  *
- * @dpms: control device power.
+ * @enable: enable the device
+ * @disable: disable the device
  * @mode_fixup: fix mode data before applying it
  * @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.
  * @wait_for_vblank: wait for vblank interrupt to make sure that
  *     hardware overlay is updated.
- * @win_commit: apply hardware specific overlay data to registers.
- * @win_disable: disable hardware specific overlay.
+ * @update_plane: apply hardware specific overlay data to registers.
+ * @disable_plane: disable hardware specific overlay.
  * @te_handler: trigger to transfer video image at the tearing effect
  *     synchronization signal if there is a page flip request.
  * @clock_enable: optional function enabling/disabling display domain clock,
@@ -175,7 +148,8 @@ struct exynos_drm_display {
  */
 struct exynos_drm_crtc;
 struct exynos_drm_crtc_ops {
-       void (*dpms)(struct exynos_drm_crtc *crtc, int mode);
+       void (*enable)(struct exynos_drm_crtc *crtc);
+       void (*disable)(struct exynos_drm_crtc *crtc);
        bool (*mode_fixup)(struct exynos_drm_crtc *crtc,
                                const struct drm_display_mode *mode,
                                struct drm_display_mode *adjusted_mode);
@@ -183,8 +157,10 @@ struct exynos_drm_crtc_ops {
        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_commit)(struct exynos_drm_crtc *crtc, unsigned int zpos);
-       void (*win_disable)(struct exynos_drm_crtc *crtc, unsigned int zpos);
+       void (*update_plane)(struct exynos_drm_crtc *crtc,
+                            struct exynos_drm_plane *plane);
+       void (*disable_plane)(struct exynos_drm_crtc *crtc,
+                             struct exynos_drm_plane *plane);
        void (*te_handler)(struct exynos_drm_crtc *crtc);
        void (*clock_enable)(struct exynos_drm_crtc *crtc, bool enable);
 };
@@ -201,7 +177,7 @@ struct exynos_drm_crtc_ops {
  *     drm framework doesn't support multiple irq yet.
  *     we can refer to the crtc to current hardware interrupt occurred through
  *     this pipe value.
- * @dpms: store the crtc dpms value
+ * @enabled: if the crtc is enabled or not
  * @event: vblank event that is currently queued for flip
  * @ops: pointer to callbacks for exynos drm specific functionality
  * @ctx: A pointer to the crtc's implementation specific context
@@ -210,7 +186,7 @@ struct exynos_drm_crtc {
        struct drm_crtc                 base;
        enum exynos_drm_output_type     type;
        unsigned int                    pipe;
-       unsigned int                    dpms;
+       bool                            enabled;
        wait_queue_head_t               pending_flip_queue;
        struct drm_pending_vblank_event *event;
        const struct exynos_drm_crtc_ops        *ops;
@@ -293,15 +269,6 @@ int exynos_drm_device_subdrv_remove(struct drm_device *dev);
 int exynos_drm_subdrv_open(struct drm_device *dev, struct drm_file *file);
 void exynos_drm_subdrv_close(struct drm_device *dev, struct drm_file *file);
 
-#ifdef CONFIG_DRM_EXYNOS_IPP
-int exynos_platform_device_ipp_register(void);
-void exynos_platform_device_ipp_unregister(void);
-#else
-static inline int exynos_platform_device_ipp_register(void) { return 0; }
-static inline void exynos_platform_device_ipp_unregister(void) {}
-#endif
-
-
 #ifdef CONFIG_DRM_EXYNOS_DPI
 struct exynos_drm_display * exynos_dpi_probe(struct device *dev);
 int exynos_dpi_remove(struct exynos_drm_display *display);
@@ -314,26 +281,12 @@ static inline int exynos_dpi_remove(struct exynos_drm_display *display)
 }
 #endif
 
-#ifdef CONFIG_DRM_EXYNOS_VIDI
-int exynos_drm_probe_vidi(void);
-void exynos_drm_remove_vidi(void);
-#else
-static inline int exynos_drm_probe_vidi(void) { return 0; }
-static inline void exynos_drm_remove_vidi(void) {}
-#endif
-
 /* This function creates a encoder and a connector, and initializes them. */
 int exynos_drm_create_enc_conn(struct drm_device *dev,
                                struct exynos_drm_display *display);
 
-int exynos_drm_component_add(struct device *dev,
-                               enum exynos_drm_device_type dev_type,
-                               enum exynos_drm_output_type out_type);
-
-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 exynos5433_decon_driver;
 extern struct platform_driver decon_driver;
 extern struct platform_driver dp_driver;
 extern struct platform_driver dsi_driver;
@@ -346,4 +299,5 @@ extern struct platform_driver fimc_driver;
 extern struct platform_driver rotator_driver;
 extern struct platform_driver gsc_driver;
 extern struct platform_driver ipp_driver;
+extern struct platform_driver mic_driver;
 #endif