[PATCH v12 19/23] drm/mediatek: add dma dev get function
CK Hu
ck.hu at mediatek.com
Sun Mar 6 22:20:12 PST 2022
Hi, Nancy:
On Tue, 2022-02-22 at 18:07 +0800, Nancy.Lin wrote:
> This is a preparation for adding support for the ovl_adaptor sub
> driver
> Ovl_adaptor is a DRM sub driver, which doesn't have dma dev. Add
> dma_dev_get function for getting representative dma dev in
> ovl_adaptor.
Reviewed-by: CK Hu <ck.hu at mediatek.com>
>
> Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
> ---
> drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 15 +++++++++++++++
> drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 1 +
> drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 8 ++++++++
> 3 files changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> index d661edf7e0fe..77af71ad65f8 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> @@ -59,6 +59,7 @@ struct mtk_drm_crtc {
> #endif
>
> struct device *mmsys_dev;
> + struct device *dma_dev;
> struct mtk_mutex *mutex;
> unsigned int ddp_comp_nr;
> struct mtk_ddp_comp **ddp_comp;
> @@ -846,6 +847,13 @@ static int mtk_drm_crtc_init_comp_planes(struct
> drm_device *drm_dev,
> return 0;
> }
>
> +struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
> +{
> + struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
> +
> + return mtk_crtc->dma_dev;
> +}
> +
> int mtk_drm_crtc_create(struct drm_device *drm_dev,
> const enum mtk_ddp_comp_id *path, unsigned int
> path_len)
> {
> @@ -931,6 +939,13 @@ int mtk_drm_crtc_create(struct drm_device
> *drm_dev,
> return ret;
> }
>
> + /*
> + * Default to use the first component as the dma dev.
> + * In the case of ovl_adaptor sub driver, it needs to use the
> + * dma_dev_get function to get representative dma dev.
> + */
> + mtk_crtc->dma_dev = mtk_ddp_comp_dma_dev_get(&priv-
> >ddp_comp[path[0]]);
> +
> ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, pipe);
> if (ret < 0)
> return ret;
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
> b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
> index cb9a36c48d4f..f5a6e80c5265 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
> @@ -22,5 +22,6 @@ int mtk_drm_crtc_plane_check(struct drm_crtc *crtc,
> struct drm_plane *plane,
> struct mtk_plane_state *state);
> void mtk_drm_crtc_async_update(struct drm_crtc *crtc, struct
> drm_plane *plane,
> struct drm_atomic_state *plane_state);
> +struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc);
>
> #endif /* MTK_DRM_CRTC_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> index 221e2e3a3c8d..4f7fae41c916 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> @@ -68,6 +68,7 @@ struct mtk_ddp_comp_funcs {
> void (*bgclr_in_off)(struct device *dev);
> void (*ctm_set)(struct device *dev,
> struct drm_crtc_state *state);
> + struct device * (*dma_dev_get)(struct device *dev);
> };
>
> struct mtk_ddp_comp {
> @@ -188,6 +189,13 @@ static inline void mtk_ddp_ctm_set(struct
> mtk_ddp_comp *comp,
> comp->funcs->ctm_set(comp->dev, state);
> }
>
> +static inline struct device *mtk_ddp_comp_dma_dev_get(struct
> mtk_ddp_comp *comp)
> +{
> + if (comp->funcs && comp->funcs->dma_dev_get)
> + return comp->funcs->dma_dev_get(comp->dev);
> + return comp->dev;
> +}
> +
> int mtk_ddp_comp_get_id(struct device_node *node,
> enum mtk_ddp_comp_type comp_type);
> unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device
> *drm,
More information about the Linux-mediatek
mailing list