On Thu, Oct 15, 2026 at 01:08:27PM +0530, Jayant Shekhar wrote: > The DCP display pipeline needs a DRM encoder to connect a CRTC to its > firmware-backed output bridge while reusing the existing MSM DRM object > model. > > Add the DCP encoder wrapper and keep encoder allocation and DRM object > initialization independent from bridge and KMS registration. > > Signed-off-by: Jayant Shekhar <[email protected]> > Assisted-by: LLM > --- > drivers/gpu/drm/msm/Makefile | 1 + > drivers/gpu/drm/msm/dcp/dcp_encoder.c | 31 +++++++++++++++++++++++++++++++ > drivers/gpu/drm/msm/dcp/dcp_encoder.h | 16 ++++++++++++++++ > 3 files changed, 48 insertions(+) > > diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile > index b7c1a2e9a19e..e7d24be72113 100644 > --- a/drivers/gpu/drm/msm/Makefile > +++ b/drivers/gpu/drm/msm/Makefile > @@ -81,6 +81,7 @@ msm-display-$(CONFIG_DRM_MSM_DCP) += \ > dcp/dcp_hfi_plane.o \ > dcp/dcp_ipcc.o \ > dcp/dcp_plane.o \ > + dcp/dcp_encoder.o \ > dcp/hfi/hfi_packer.o \ > dcp/hfi/hfi_unpacker.o \ > dcp/hfi/hfi_utils.o > diff --git a/drivers/gpu/drm/msm/dcp/dcp_encoder.c > b/drivers/gpu/drm/msm/dcp/dcp_encoder.c > new file mode 100644 > index 000000000000..bc173fffb325 > --- /dev/null > +++ b/drivers/gpu/drm/msm/dcp/dcp_encoder.c > @@ -0,0 +1,31 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. > + * > + * DCP encoder wrapper for the CRTC-to-bridge connection. > + * Hardware programming and mode sequencing are handled by the bridge and > HFI. > + */ > + > +#include <drm/drm_encoder.h> > +#include <drm/drm_managed.h> > + > +#include "dcp_encoder.h" > + > +struct drm_encoder *dcp_encoder_init(struct drm_device *dev, int enc_type) > +{ > + struct drm_encoder *encoder; > + int ret; > + > + encoder = drmm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL); > + if (!encoder) > + return ERR_PTR(-ENOMEM); > + > + ret = drmm_encoder_init(dev, encoder, NULL, enc_type, "encoder%d", > + dev->mode_config.num_encoder); > + if (ret) { > + dev_err(dev->dev, "encoder init failed: %d\n", ret);
Again, ignored feedback. Use drm_foo functions instead of dev_foo(). Also, there is little point in printing an error here. > + return ERR_PTR(ret); > + } > + > + return encoder; > +} > diff --git a/drivers/gpu/drm/msm/dcp/dcp_encoder.h > b/drivers/gpu/drm/msm/dcp/dcp_encoder.h > new file mode 100644 > index 000000000000..de40c9bca4bb > --- /dev/null > +++ b/drivers/gpu/drm/msm/dcp/dcp_encoder.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. > + * > + * DCP encoder interface between the CRTC and bridge chain. > + * Hardware programming is delegated to DCP firmware. > + */ > + > +#ifndef __DCP_ENCODER_H__ > +#define __DCP_ENCODER_H__ > + > +#include <drm/drm_encoder.h> > + > +struct drm_encoder *dcp_encoder_init(struct drm_device *dev, int enc_type); > + > +#endif /* __DCP_ENCODER_H__ */ > > -- > 2.43.0 > -- With best wishes Dmitry
