OSDN Git Service

drm/encoder: make encoder control functions optional
authorPhilipp Zabel <p.zabel@pengutronix.de>
Thu, 10 Dec 2020 15:38:27 +0000 (16:38 +0100)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 4 Jan 2021 11:59:33 +0000 (12:59 +0100)
Simple managed encoders do not require the .destroy callback,
make the whole funcs structure optional.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_encoder.c
drivers/gpu/drm/drm_mode_config.c
include/drm/drm_encoder.h

index e555281..b0b86a3 100644 (file)
@@ -72,7 +72,7 @@ int drm_encoder_register_all(struct drm_device *dev)
        int ret = 0;
 
        drm_for_each_encoder(encoder, dev) {
-               if (encoder->funcs->late_register)
+               if (encoder->funcs && encoder->funcs->late_register)
                        ret = encoder->funcs->late_register(encoder);
                if (ret)
                        return ret;
@@ -86,7 +86,7 @@ void drm_encoder_unregister_all(struct drm_device *dev)
        struct drm_encoder *encoder;
 
        drm_for_each_encoder(encoder, dev) {
-               if (encoder->funcs->early_unregister)
+               if (encoder->funcs && encoder->funcs->early_unregister)
                        encoder->funcs->early_unregister(encoder);
        }
 }
index f1affc1..e56a7f8 100644 (file)
@@ -195,7 +195,7 @@ void drm_mode_config_reset(struct drm_device *dev)
                        crtc->funcs->reset(crtc);
 
        drm_for_each_encoder(encoder, dev)
-               if (encoder->funcs->reset)
+               if (encoder->funcs && encoder->funcs->reset)
                        encoder->funcs->reset(encoder);
 
        drm_connector_list_iter_begin(dev, &conn_iter);
index 5dfa5f7..8331236 100644 (file)
@@ -89,7 +89,7 @@ struct drm_encoder_funcs {
  * @head: list management
  * @base: base KMS object
  * @name: human readable name, can be overwritten by the driver
- * @funcs: control functions
+ * @funcs: control functions, can be NULL for simple managed encoders
  * @helper_private: mid-layer private data
  *
  * CRTCs drive pixels to encoders, which convert them into signals