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

Reply via email to