Merge tag 'topic/atomic-core-2015-01-27' of git://anongit.freedesktop.org/drm-intel...
[firefly-linux-kernel-4.4.55.git] / include / drm / drm_crtc_helper.h
index 5810c027acdcf4b35e5dd312e856c9d6846ed134..c250a22b39aba09a58aa4d7843e6ae4e7033c524 100644 (file)
@@ -58,11 +58,19 @@ enum mode_set_atomic {
  * @mode_set_base_atomic: non-blocking mode set (used for kgdb support)
  * @load_lut: load color palette
  * @disable: disable CRTC when no longer in use
+ * @enable: enable CRTC
  * @atomic_check: check for validity of an atomic state
  * @atomic_begin: begin atomic update
  * @atomic_flush: flush atomic update
  *
  * The helper operations are called by the mid-layer CRTC helper.
+ *
+ * Note that with atomic helpers @dpms, @prepare and @commit hooks are
+ * deprecated. Used @enable and @disable instead exclusively.
+ *
+ * With legacy crtc helpers there's a big semantic difference between @disable
+ * and the other hooks: @disable also needs to release any resources acquired in
+ * @mode_set (like shared PLLs).
  */
 struct drm_crtc_helper_funcs {
        /*
@@ -93,8 +101,8 @@ struct drm_crtc_helper_funcs {
        /* reload the current crtc LUT */
        void (*load_lut)(struct drm_crtc *crtc);
 
-       /* disable crtc when not in use - more explicit than dpms off */
        void (*disable)(struct drm_crtc *crtc);
+       void (*enable)(struct drm_crtc *crtc);
 
        /* atomic helpers */
        int (*atomic_check)(struct drm_crtc *crtc,
@@ -115,9 +123,17 @@ struct drm_crtc_helper_funcs {
  * @get_crtc: return CRTC that the encoder is currently attached to
  * @detect: connection status detection
  * @disable: disable encoder when not in use (overrides DPMS off)
+ * @enable: enable encoder
  * @atomic_check: check for validity of an atomic update
  *
  * The helper operations are called by the mid-layer CRTC helper.
+ *
+ * Note that with atomic helpers @dpms, @prepare and @commit hooks are
+ * deprecated. Used @enable and @disable instead exclusively.
+ *
+ * With legacy crtc helpers there's a big semantic difference between @disable
+ * and the other hooks: @disable also needs to release any resources acquired in
+ * @mode_set (like shared PLLs).
  */
 struct drm_encoder_helper_funcs {
        void (*dpms)(struct drm_encoder *encoder, int mode);
@@ -136,9 +152,10 @@ struct drm_encoder_helper_funcs {
        /* detect for DAC style encoders */
        enum drm_connector_status (*detect)(struct drm_encoder *encoder,
                                            struct drm_connector *connector);
-       /* disable encoder when not in use - more explicit than dpms off */
        void (*disable)(struct drm_encoder *encoder);
 
+       void (*enable)(struct drm_encoder *encoder);
+
        /* atomic helpers */
        int (*atomic_check)(struct drm_encoder *encoder,
                            struct drm_crtc_state *crtc_state,