Commit b998eb4f authored by Maxime Ripard's avatar Maxime Ripard

drm/vc4: Add TXP encoder type

The TXP is integrated as a separate CRTC/Encoder/Connector combo, but
for some reason doesn't rely on the vc4_encoder type and it's associated
type.

Let's create a type to make it consistent with the other encoders.
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20221123-rpi-kunit-tests-v1-15-051a0bb60a16@cerno.tech
parent c1bcd927
...@@ -450,6 +450,7 @@ enum vc4_encoder_type { ...@@ -450,6 +450,7 @@ enum vc4_encoder_type {
VC4_ENCODER_TYPE_DSI1, VC4_ENCODER_TYPE_DSI1,
VC4_ENCODER_TYPE_SMI, VC4_ENCODER_TYPE_SMI,
VC4_ENCODER_TYPE_DPI, VC4_ENCODER_TYPE_DPI,
VC4_ENCODER_TYPE_TXP,
}; };
struct vc4_encoder { struct vc4_encoder {
......
...@@ -153,6 +153,7 @@ struct vc4_txp { ...@@ -153,6 +153,7 @@ struct vc4_txp {
struct platform_device *pdev; struct platform_device *pdev;
struct vc4_encoder encoder;
struct drm_writeback_connector connector; struct drm_writeback_connector connector;
void __iomem *regs; void __iomem *regs;
...@@ -160,7 +161,7 @@ struct vc4_txp { ...@@ -160,7 +161,7 @@ struct vc4_txp {
static inline struct vc4_txp *encoder_to_vc4_txp(struct drm_encoder *encoder) 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, encoder.base);
} }
static inline struct vc4_txp *connector_to_vc4_txp(struct drm_connector *conn) static inline struct vc4_txp *connector_to_vc4_txp(struct drm_connector *conn)
...@@ -488,9 +489,10 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data) ...@@ -488,9 +489,10 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct drm_device *drm = dev_get_drvdata(master); struct drm_device *drm = dev_get_drvdata(master);
struct vc4_encoder *vc4_encoder;
struct drm_encoder *encoder;
struct vc4_crtc *vc4_crtc; struct vc4_crtc *vc4_crtc;
struct vc4_txp *txp; struct vc4_txp *txp;
struct drm_encoder *encoder;
int ret, irq; int ret, irq;
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
...@@ -514,13 +516,24 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data) ...@@ -514,13 +516,24 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data)
vc4_crtc->regset.regs = txp_regs; vc4_crtc->regset.regs = txp_regs;
vc4_crtc->regset.nregs = ARRAY_SIZE(txp_regs); vc4_crtc->regset.nregs = ARRAY_SIZE(txp_regs);
vc4_encoder = &txp->encoder;
txp->encoder.type = VC4_ENCODER_TYPE_TXP;
encoder = &vc4_encoder->base;
encoder->possible_crtcs = drm_crtc_mask(&vc4_crtc->base);
drm_encoder_helper_add(encoder, &vc4_txp_encoder_helper_funcs);
ret = drmm_encoder_init(drm, encoder, NULL, DRM_MODE_ENCODER_VIRTUAL, NULL);
if (ret)
return ret;
drm_connector_helper_add(&txp->connector.base, drm_connector_helper_add(&txp->connector.base,
&vc4_txp_connector_helper_funcs); &vc4_txp_connector_helper_funcs);
ret = drm_writeback_connector_init(drm, &txp->connector, ret = drm_writeback_connector_init_with_encoder(drm, &txp->connector,
&vc4_txp_connector_funcs, encoder,
&vc4_txp_encoder_helper_funcs, &vc4_txp_connector_funcs,
drm_fmts, ARRAY_SIZE(drm_fmts), drm_fmts, ARRAY_SIZE(drm_fmts));
0);
if (ret) if (ret)
return ret; return ret;
...@@ -529,9 +542,6 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data) ...@@ -529,9 +542,6 @@ static int vc4_txp_bind(struct device *dev, struct device *master, void *data)
if (ret) if (ret)
return ret; return ret;
encoder = &txp->connector.encoder;
encoder->possible_crtcs = drm_crtc_mask(&vc4_crtc->base);
ret = devm_request_irq(dev, irq, vc4_txp_interrupt, 0, ret = devm_request_irq(dev, irq, vc4_txp_interrupt, 0,
dev_name(dev), txp); dev_name(dev), txp);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment