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); + 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
