@@ -180,21 +180,21 @@ int drm_writeback_connector_init(struct drm_device *dev,
{
int ret = 0;
- drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
+ drm_encoder_helper_add(&wb_connector->internal_encoder, enc_helper_funcs);
- wb_connector->encoder.possible_crtcs = possible_crtcs;
+ wb_connector->internal_encoder.possible_crtcs = possible_crtcs;
- ret = drm_encoder_init(dev, &wb_connector->encoder,
+ ret = drm_encoder_init(dev, &wb_connector->internal_encoder,
&drm_writeback_encoder_funcs,
DRM_MODE_ENCODER_VIRTUAL, NULL);
if (ret)
return ret;
- ret = drm_writeback_connector_init_with_encoder(dev, wb_connector, &wb_connector->encoder,
- con_funcs, formats, n_formats);
+ ret = drm_writeback_connector_init_with_encoder(dev, wb_connector,
+ &wb_connector->internal_encoder, con_funcs, formats, n_formats);
if (ret)
- drm_encoder_cleanup(&wb_connector->encoder);
+ drm_encoder_cleanup(&wb_connector->internal_encoder);
return ret;
}
@@ -239,6 +239,12 @@ int drm_writeback_connector_init_with_encoder(struct drm_device *dev,
struct drm_mode_config *config = &dev->mode_config;
int ret = create_writeback_properties(dev);
+ /*
+ * Assign the encoder passed to this API to the wb_connector's encoder.
+ * For drm_writeback_connector_init(), this shall be the internal_encoder
+ */
+ wb_connector->encoder = enc;
+
if (ret != 0)
return ret;
@@ -159,7 +159,7 @@ struct vc4_txp {
static inline struct vc4_txp *encoder_to_vc4_txp(struct drm_encoder *encoder)
{
- return container_of(encoder, struct vc4_txp, connector.encoder);
+ return container_of(encoder, struct vc4_txp, connector.internal_encoder);
}
static inline struct vc4_txp *connector_to_vc4_txp(struct drm_connector *conn)
@@ -507,7 +507,7 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data)
if (ret)
return ret;
- encoder = &txp->connector.encoder;
+ encoder = txp->connector.encoder;
encoder->possible_crtcs = drm_crtc_mask(crtc);
ret = devm_request_irq(dev, irq, vc4_txp_interrupt, 0,
@@ -25,13 +25,31 @@ struct drm_writeback_connector {
struct drm_connector base;
/**
- * @encoder: Internal encoder used by the connector to fulfill
+ * @encoder: handle to drm_encoder used by the connector to fulfill
* the DRM framework requirements. The users of the
* @drm_writeback_connector control the behaviour of the @encoder
* by passing the @enc_funcs parameter to drm_writeback_connector_init()
* function.
+ *
+ * For some vendor drivers, the hardware resources are shared between
+ * writeback encoder and rest of the display pipeline.
+ * To accommodate such cases, encoder is a handle to the real encoder
+ * hardware.
+ *
+ * For current existing writeback users, this shall continue to be the
+ * embedded encoder for the writeback connector.
+ */
+ struct drm_encoder *encoder;
+
+ /**
+ * @internal_encoder: internal encoder used by writeback when
+ * drm_writeback_connector_init() is used.
+ * @encoder will be assigned to this for those cases
+ *
+ * This will be unused when drm_writeback_connector_init_with_encoder()
+ * is used.
*/
- struct drm_encoder encoder;
+ struct drm_encoder internal_encoder;
/**
* @pixel_formats_blob_ptr: