Both mtk_ddp_comp and mtk_drm_drv are performing similar checks to distinguish components that have an external driver from ones that don't - with the exception of mtk_ddp_comp also checking if the component is related to a backlight driver.
Create helper functions in the main component management driver mtk_ddp_comp, one to check if the currently checked component is internal/simple, and one (static, internal to mtk_ddp_comp only) to check if it is a backlight related one. Since the amount of internal/simple components is lower than the amount of ones having a specific driver, and since it is expected that most of (if not all) of any new hardware support will need a specific driver as well, the helpers are doing an inverted check compared to what the code was doing before, as both mtk_ddp_comp and mtk_drm_drv were checking for external component explicitly, while now they're doing the same, but checking if NOT internal. Also, while at it, for the OVL_ADAPTOR components case, instead of checking for MTK_DISP_OVL_ADAPTOR, call the already provided mtk_ovl_adaptor_is_comp_present() function to check for this type of component. Signed-off-by: AngeloGioacchino Del Regno <[email protected]> --- drivers/gpu/drm/mediatek/mtk_ddp_comp.c | 47 ++++++++++++++----------- drivers/gpu/drm/mediatek/mtk_ddp_comp.h | 1 + drivers/gpu/drm/mediatek/mtk_drm_drv.c | 16 ++------- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c index 2ba2123238b3..f7103e20abe5 100644 --- a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c +++ b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c @@ -629,6 +629,27 @@ static void mtk_ddp_comp_clk_put(void *_clk) clk_put(clk); } +static bool mtk_ddp_comp_is_backlight_comp(enum mtk_ddp_comp_type type) +{ + return type == MTK_DISP_BLS || type == MTK_DISP_PWM; +} + +bool mtk_ddp_comp_is_internal_comp(enum mtk_ddp_comp_type type) +{ + switch (type) { + case MTK_DISP_DITHER: + case MTK_DISP_OD: + case MTK_DISP_POSTMASK: + case MTK_DISP_RSZ: + case MTK_DISP_UFOE: + return true; + default: + break; + }; + + return false; +} + static int mtk_ddp_comp_init_internal_comp(struct device *dev, struct device *comp_dev) { struct device_node *comp_node = comp_dev->of_node; @@ -700,26 +721,12 @@ int mtk_ddp_comp_init(struct device *dev, struct device_node *node, if (ret) return ret; - if (type == MTK_DISP_AAL || - type == MTK_DISP_BLS || - type == MTK_DISP_CCORR || - type == MTK_DISP_COLOR || - type == MTK_DISP_DSC || - type == MTK_DISP_GAMMA || - type == MTK_DISP_MERGE || - type == MTK_DISP_OVL || - type == MTK_DISP_OVL_2L || - type == MTK_DISP_PWM || - type == MTK_DISP_RDMA || - type == MTK_DISP_WDMA || - type == MTK_DISP_DPI || - type == MTK_DISP_DP_INTF || - type == MTK_DISP_DSI) - goto end; - - ret = mtk_ddp_comp_init_internal_comp(dev, comp->dev); - if (ret) - return ret; + /* If there's no external driver for this component, allocate and init now */ + if (mtk_ddp_comp_is_internal_comp(type) || mtk_ddp_comp_is_backlight_comp(type)) { + ret = mtk_ddp_comp_init_internal_comp(dev, comp->dev); + if (ret) + return ret; + } end: hash_add(hlist->ddp_list, &comp->lnode, comp->id); diff --git a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h index 4203eecb2a7b..58a06add1368 100644 --- a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h +++ b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h @@ -351,6 +351,7 @@ static inline struct mtk_ddp_comp return NULL; } +bool mtk_ddp_comp_is_internal_comp(enum mtk_ddp_comp_type type); int mtk_ddp_comp_get_id(struct device_node *node, enum mtk_ddp_comp_type comp_type); int mtk_find_possible_crtcs(struct drm_device *drm, struct device *dev); diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c index e956e1966b86..18683aee61ff 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c @@ -1166,20 +1166,8 @@ static int mtk_drm_probe(struct platform_device *pdev) * blocks have separate component platform drivers and initialize their own * DDP component structure. The others are initialized here. */ - if (comp_type == MTK_DISP_AAL || - comp_type == MTK_DISP_CCORR || - comp_type == MTK_DISP_COLOR || - comp_type == MTK_DISP_DSC || - comp_type == MTK_DISP_GAMMA || - comp_type == MTK_DISP_MERGE || - comp_type == MTK_DISP_OVL || - comp_type == MTK_DISP_OVL_2L || - comp_type == MTK_DISP_OVL_ADAPTOR || - comp_type == MTK_DISP_RDMA || - comp_type == MTK_DISP_WDMA || - comp_type == MTK_DISP_DP_INTF || - comp_type == MTK_DISP_DPI || - comp_type == MTK_DISP_DSI) { + if (!mtk_ddp_comp_is_internal_comp(comp_type) && + !mtk_ovl_adaptor_is_comp_present(node)) { dev_info(dev, "Adding component match for %pOF\n", node); drm_of_component_match_add(dev, &match, component_compare_of, -- 2.54.0
