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: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20221123-rpi-kunit-tests-v1-15-051a0bb60a16@cerno.tech
This commit is contained in:
parent
c1bcd9272b
commit
b998eb4fda
@ -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 {
|
|||||||
|
|
||||||
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 {
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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,
|
||||||
|
encoder,
|
||||||
&vc4_txp_connector_funcs,
|
&vc4_txp_connector_funcs,
|
||||||
&vc4_txp_encoder_helper_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)
|
|||||||
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user