All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <59aa3e03300ada8f47c0b5ae3a9c173eab45af7e.camel@mediatek.com>

diff --git a/N1/2.bin b/N1/2.bin
new file mode 100644
index 0000000..ae8c7bd
--- /dev/null
+++ b/N1/2.bin
@@ -0,0 +1,1145 @@
+<html><body><p>
+<pre>
+Hi,&#32;Paul:
+
+On&#32;Fri,&#32;2025-01-10&#32;at&#32;20:34&#32;+0800,&#32;paul-pl.chen&#32;wrote:
+&gt;&#32;From:&#32;&quot;Nancy.Lin&quot;&#32;&lt;nancy.lin@mediatek.com&gt;
+&gt;&#32;
+&gt;&#32;Ovlsys_adaptor&#32;is&#32;an&#32;encapsulated&#32;module&#32;designed&#32;to
+&gt;&#32;simplify&#32;the&#32;DRM&#32;control&#32;flow.&#32;This&#32;module&#32;is&#32;composed
+&gt;&#32;of&#32;20&#32;EXDMAs,&#32;20&#32;BLENDERs,&#32;and&#32;12&#32;OUTPROCs.
+&gt;&#32;Two&#32;EXDMAs&#32;merge&#32;into&#32;one&#32;layer,&#32;allowing&#32;the&#32;module
+&gt;&#32;to&#32;support&#32;20&#32;layers&#32;for&#32;3&#32;display&#32;paths.
+&gt;&#32;Ovlsys_adaptor&#32;driver&#32;is&#32;integrated&#32;within&#32;the
+&gt;&#32;mtk_ddp_comp&#32;framework.
+&gt;&#32;
+&gt;&#32;Signed-off-by:&#32;Nancy.Lin&#32;&lt;nancy.lin@mediatek.com&gt;
+&gt;&#32;Signed-off-by:&#32;Paul-pl.Chen&#32;&lt;paul-pl.chen@mediatek.com&gt;
+&gt;&#32;---
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/Makefile&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;25&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_drv.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;31&#32;+-
+&gt;&#32;&#32;.../drm/mediatek/mtk_disp_ovlsys_adaptor.c&#32;&#32;&#32;&#32;|&#32;758&#32;++++++++++++++++++
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;61&#32;+-
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;11&#32;+-
+&gt;&#32;&#32;7&#32;files&#32;changed,&#32;884&#32;insertions(+),&#32;4&#32;deletions(-)
+&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c
+&gt;&#32;
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/Makefile&#32;b/drivers/gpu/drm/mediatek/Makefile
+&gt;&#32;index&#32;9546bc6b7b2e..dedf50860d3f&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/Makefile
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/Makefile
+&gt;&#32;@@&#32;-9,6&#32;+9,7&#32;@@&#32;mediatek-drm-y&#32;:=&#32;mtk_crtc.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_exdma.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_gamma.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_merge.o&#32;&#92;
+&gt;&#32;+&#32;&#32;mtk_disp_ovlsys_adaptor.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_ovl.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_outproc.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_ovl_adaptor.o&#32;&#92;
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;index&#32;cc780744f060..492b8d965309&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;@@&#32;-368,6&#32;+368,28&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_ovl&#32;=&#32;{
+&gt;&#32;&#32;.get_num_formats&#32;=&#32;mtk_ovl_get_num_formats,
+&gt;&#32;&#32;};
+&gt;&#32;&#32;
+&gt;&#32;+static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_ovlsys_adaptor&#32;=&#32;{
+&gt;&#32;+.clk_enable&#32;=&#32;mtk_ovlsys_adaptor_clk_enable,
+&gt;&#32;+.clk_disable&#32;=&#32;mtk_ovlsys_adaptor_clk_disable,
+&gt;&#32;+.config&#32;=&#32;mtk_ovlsys_adaptor_config,
+&gt;&#32;+.start&#32;=&#32;mtk_ovlsys_adaptor_start,
+&gt;&#32;+.stop&#32;=&#32;mtk_ovlsys_adaptor_stop,
+&gt;&#32;+.layer_check&#32;=&#32;mtk_ovlsys_adaptor_layer_check,
+&gt;&#32;+.layer_nr&#32;=&#32;mtk_ovlsys_adaptor_layer_nr,
+&gt;&#32;+.layer_config&#32;=&#32;mtk_ovlsys_adaptor_layer_config,
+&gt;&#32;+.register_vblank_cb&#32;=&#32;mtk_ovlsys_adaptor_register_vblank_cb,
+&gt;&#32;+.unregister_vblank_cb&#32;=&#32;mtk_ovlsys_adaptor_unregister_vblank_cb,
+&gt;&#32;+.enable_vblank&#32;=&#32;mtk_ovlsys_adaptor_enable_vblank,
+&gt;&#32;+.disable_vblank&#32;=&#32;mtk_ovlsys_adaptor_disable_vblank,
+&gt;&#32;+.dma_dev_get&#32;=&#32;mtk_ovlsys_adaptor_dma_dev_get,
+&gt;&#32;+.connect&#32;=&#32;mtk_ovlsys_adaptor_connect,
+&gt;&#32;+.disconnect&#32;=&#32;mtk_ovlsys_adaptor_disconnect,
+&gt;&#32;+.add&#32;=&#32;mtk_ovlsys_adaptor_add_comp,
+&gt;&#32;+.remove&#32;=&#32;mtk_ovlsys_adaptor_remove_comp,
+&gt;&#32;+.get_formats&#32;=&#32;mtk_ovlsys_adaptor_get_formats,
+&gt;&#32;+.get_num_formats&#32;=&#32;mtk_ovlsys_adaptor_get_num_formats,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_postmask&#32;=&#32;{
+&gt;&#32;&#32;.clk_enable&#32;=&#32;mtk_ddp_clk_enable,
+&gt;&#32;&#32;.clk_disable&#32;=&#32;mtk_ddp_clk_disable,
+&gt;&#32;@@&#32;-437,6&#32;+459,7&#32;@@&#32;static&#32;const&#32;char&#32;*&#32;const&#32;mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX]&#32;=&#32;{
+&gt;&#32;&#32;[MTK_DISP_OVL]&#32;=&#32;&quot;ovl&quot;,
+&gt;&#32;&#32;[MTK_DISP_OVL_2L]&#32;=&#32;&quot;ovl-2l&quot;,
+&gt;&#32;&#32;[MTK_DISP_OVL_ADAPTOR]&#32;=&#32;&quot;ovl_adaptor&quot;,
+&gt;&#32;+[MTK_DISP_OVLSYS_ADAPTOR]&#32;=&#32;&quot;ovlsys_adaptor&quot;,
+&gt;&#32;&#32;[MTK_DISP_POSTMASK]&#32;=&#32;&quot;postmask&quot;,
+&gt;&#32;&#32;[MTK_DISP_PWM]&#32;=&#32;&quot;pwm&quot;,
+&gt;&#32;&#32;[MTK_DISP_RDMA]&#32;=&#32;&quot;rdma&quot;,
+&gt;&#32;@@&#32;-469,6&#32;+492,8&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]
+&gt;&#32;&#32;[DDP_COMPONENT_DPI0]=&#32;{&#32;MTK_DPI,0,&#32;&amp;ddp_dpi&#32;},
+&gt;&#32;&#32;[DDP_COMPONENT_DPI1]=&#32;{&#32;MTK_DPI,1,&#32;&amp;ddp_dpi&#32;},
+&gt;&#32;&#32;[DDP_COMPONENT_DRM_OVL_ADAPTOR]=&#32;{&#32;MTK_DISP_OVL_ADAPTOR,0,&#32;&amp;ddp_ovl_adaptor&#32;},
+&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&#32;[DDP_COMPONENT_DSC0]=&#32;{&#32;MTK_DISP_DSC,0,&#32;&amp;ddp_dsc&#32;},
+&gt;&#32;&#32;[DDP_COMPONENT_DSC1]=&#32;{&#32;MTK_DISP_DSC,1,&#32;&amp;ddp_dsc&#32;},
+&gt;&#32;&#32;[DDP_COMPONENT_DSI0]=&#32;{&#32;MTK_DSI,0,&#32;&amp;ddp_dsi&#32;},
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;index&#32;b33d3289b8b6..ef64ce7a071f&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;@@&#32;-33,6&#32;+33,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{
+&gt;&#32;&#32;MTK_DISP_MUTEX,
+&gt;&#32;&#32;MTK_DISP_OD,
+&gt;&#32;&#32;MTK_DISP_OVL,
+&gt;&#32;+MTK_DISP_OVLSYS_ADAPTOR,
+&gt;&#32;&#32;MTK_DISP_OVL_2L,
+&gt;&#32;&#32;MTK_DISP_OVL_ADAPTOR,
+&gt;&#32;&#32;MTK_DISP_POSTMASK,
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_drv.h&#32;b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
+&gt;&#32;index&#32;44d2cbe919dc..67f6da59d0de&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
+&gt;&#32;@@&#32;-140,8&#32;+140,8&#32;@@&#32;void&#32;mtk_ovl_enable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;void&#32;mtk_ovl_disable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;u32&#32;mtk_ovl_get_blend_modes(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;const&#32;u32&#32;*mtk_ovl_get_formats(struct&#32;device&#32;*dev);
+&gt;&#32;-size_t&#32;mtk_ovl_get_num_formats(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;
+&gt;&#32;+size_t&#32;mtk_ovl_get_num_formats(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;void&#32;mtk_ovl_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);
+&gt;&#32;&#32;void&#32;mtk_ovl_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);
+&gt;&#32;&#32;bool&#32;mtk_ovl_adaptor_is_comp_present(struct&#32;device_node&#32;*node);
+&gt;&#32;@@&#32;-174,6&#32;+174,35&#32;@@&#32;size_t&#32;mtk_ovl_adaptor_get_num_formats(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;enum&#32;drm_mode_status&#32;mtk_ovl_adaptor_mode_valid(struct&#32;device&#32;*dev,
+&gt;&#32;&#32;const&#32;struct&#32;drm_display_mode&#32;*mode);
+&gt;&#32;&#32;
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_connect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,
+&gt;&#32;+unsigned&#32;int&#32;next);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disconnect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,
+&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;next);
+&gt;&#32;+int&#32;mtk_ovlsys_adaptor_clk_enable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_clk_disable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_layer_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;idx,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*state,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);
+&gt;&#32;+int&#32;mtk_ovlsys_adaptor_layer_check(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx,
+&gt;&#32;+&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*mtk_state);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_register_vblank_cb(struct&#32;device&#32;*dev,&#32;void&#32;(*vblank_cb)(void&#32;*),
+&gt;&#32;+&#32;&#32;&#32;void&#32;*vblank_cb_data);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_unregister_vblank_cb(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_enable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_start(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_stop(struct&#32;device&#32;*dev);
+&gt;&#32;+unsigned&#32;int&#32;mtk_ovlsys_adaptor_layer_nr(struct&#32;device&#32;*dev);
+&gt;&#32;+struct&#32;device&#32;*mtk_ovlsys_adaptor_dma_dev_get(struct&#32;device&#32;*dev);
+&gt;&#32;+const&#32;u32&#32;*mtk_ovlsys_adaptor_get_formats(struct&#32;device&#32;*dev);
+&gt;&#32;+size_t&#32;mtk_ovlsys_adaptor_get_num_formats(struct&#32;device&#32;*dev);
+&gt;&#32;+
+&gt;&#32;&#32;void&#32;mtk_rdma_bypass_shadow(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;int&#32;mtk_rdma_clk_enable(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;void&#32;mtk_rdma_clk_disable(struct&#32;device&#32;*dev);
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c&#32;b/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c
+&gt;&#32;new&#32;file&#32;mode&#32;100644
+&gt;&#32;index&#32;000000000000..7bce2b7143cb
+&gt;&#32;---&#32;/dev/null
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c
+&gt;&#32;@@&#32;-0,0&#32;+1,758&#32;@@
+&gt;&#32;+//&#32;SPDX-License-Identifier:&#32;GPL-2.0-only
+&gt;&#32;+/*
+&gt;&#32;+&#32;*&#32;Copyright&#32;(c)&#32;2021&#32;MediaTek&#32;Inc.
+&gt;&#32;+&#32;*/
+&gt;&#32;+
+&gt;&#32;+#include&#32;&lt;drm/drm_fourcc.h&gt;
+&gt;&#32;+#include&#32;&lt;drm/drm_of.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/clk.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/component.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/of_platform.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/of_device.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/of_address.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/platform_device.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/pm_runtime.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/reset.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-cmdq.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-mmsys.h&gt;
+&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-mutex.h&gt;
+&gt;&#32;+
+&gt;&#32;+#include&#32;&quot;mtk_disp_blender.h&quot;
+&gt;&#32;+#include&#32;&quot;mtk_disp_drv.h&quot;
+&gt;&#32;+#include&#32;&quot;mtk_crtc.h&quot;
+
+Alphabetic&#32;order.
+
+&gt;&#32;+#include&#32;&quot;mtk_ddp_comp.h&quot;
+&gt;&#32;+#include&#32;&quot;mtk_drm_drv.h&quot;
+&gt;&#32;+
+&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_EXDMA&#32;=&#32;0,
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_OUTPROC,
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_NUM,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_id&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA0,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA1,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA2,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA3,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA4,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA5,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA6,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA7,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA8,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA9,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA10,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA11,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA12,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA13,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA14,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA15,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA16,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA17,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA18,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA19,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER0,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER1,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER2,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER3,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER4,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER5,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER6,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER7,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER8,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER9,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER10,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER11,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER12,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER13,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER14,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER15,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER16,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER17,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER18,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER19,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC0,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC1,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC2,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC3,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC4,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC5,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC6,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC7,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC8,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC9,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC10,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC11,
+&gt;&#32;+OVLSYS_ADAPTOR_ID_MAX
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+struct&#32;ovlsys_adaptor_comp_match&#32;{
+&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type;
+&gt;&#32;+int&#32;alias_id;
+&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id;
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;{
+&gt;&#32;+struct&#32;device&#32;*ovl_adaptor_comp[OVLSYS_ADAPTOR_ID_MAX];
+&gt;&#32;+struct&#32;device&#32;*mmsys_dev;
+&gt;&#32;+const&#32;unsigned&#32;int&#32;*path;
+&gt;&#32;+unsigned&#32;int&#32;path_size;
+&gt;&#32;+unsigned&#32;int&#32;layer_nr;
+&gt;&#32;+bool&#32;children_bound;
+&gt;&#32;+unsigned&#32;int&#32;max_size;
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;char&#32;*&#32;const&#32;private_comp_stem[OVLSYS_ADAPTOR_TYPE_NUM]&#32;=&#32;{
+&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_EXDMA]=&#32;&quot;exdma&quot;,
+&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_BLENDER]=&#32;&quot;blender&quot;,
+&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_OUTPROC]=&#32;&quot;outproc&quot;,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;ovlsys_adaptor_comp_match&#32;comp_matches[OVLSYS_ADAPTOR_ID_MAX]&#32;=&#32;{
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA0]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;0,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA1]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;1,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA2]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;2,&#32;DDP_COMPONENT_OVL0_EXDMA2},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA3]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;3,&#32;DDP_COMPONENT_OVL0_EXDMA3},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA4]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;4,&#32;DDP_COMPONENT_OVL0_EXDMA4},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA5]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;5,&#32;DDP_COMPONENT_OVL0_EXDMA5},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA6]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;6,&#32;DDP_COMPONENT_OVL0_EXDMA6},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA7]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;7,&#32;DDP_COMPONENT_OVL0_EXDMA7},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA8]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;8,&#32;DDP_COMPONENT_OVL0_EXDMA8},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA9]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;9,&#32;DDP_COMPONENT_OVL0_EXDMA9},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA10]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;10,&#32;DDP_COMPONENT_ID_MAX},
+
+EXDMA10&#32;has&#32;no&#32;component&#32;id,&#32;so&#32;just&#32;drop&#32;OVLSYS_ADAPTOR_EXDMA10.
+
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA11]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;11,&#32;DDP_COMPONENT_ID_MAX},
+
+Ditto.
+
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA12]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;12,&#32;DDP_COMPONENT_OVL1_EXDMA2},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA13]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;13,&#32;DDP_COMPONENT_OVL1_EXDMA3},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA14]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;14,&#32;DDP_COMPONENT_OVL1_EXDMA4},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA15]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;15,&#32;DDP_COMPONENT_OVL1_EXDMA5},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA16]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;16,&#32;DDP_COMPONENT_OVL1_EXDMA6},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA17]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;17,&#32;DDP_COMPONENT_OVL1_EXDMA7},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA18]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;18,&#32;DDP_COMPONENT_OVL1_EXDMA8},
+&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA19]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;19,&#32;DDP_COMPONENT_OVL1_EXDMA9},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER0]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;0,&#32;DDP_COMPONENT_ID_MAX},
+
+Ditto.
+
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER1]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;1,&#32;DDP_COMPONENT_OVL0_BLENDER1},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER2]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;2,&#32;DDP_COMPONENT_OVL0_BLENDER2},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER3]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;3,&#32;DDP_COMPONENT_OVL0_BLENDER3},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER4]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;4,&#32;DDP_COMPONENT_OVL0_BLENDER4},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER5]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;5,&#32;DDP_COMPONENT_OVL0_BLENDER5},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER6]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;6,&#32;DDP_COMPONENT_OVL0_BLENDER6},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER7]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;7,&#32;DDP_COMPONENT_OVL0_BLENDER7},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER8]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;8,&#32;DDP_COMPONENT_OVL0_BLENDER8},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER9]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;9,&#32;DDP_COMPONENT_OVL0_BLENDER9},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER10]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;10,&#32;DDP_COMPONENT_ID_MAX},
+
+Ditto.
+
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER11]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;11,&#32;DDP_COMPONENT_OVL1_BLENDER1},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER12]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;12,&#32;DDP_COMPONENT_OVL1_BLENDER2},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER13]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;13,&#32;DDP_COMPONENT_OVL1_BLENDER3},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER14]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;14,&#32;DDP_COMPONENT_OVL1_BLENDER4},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER15]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;15,&#32;DDP_COMPONENT_OVL1_BLENDER5},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER16]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;16,&#32;DDP_COMPONENT_OVL1_BLENDER6},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER17]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;17,&#32;DDP_COMPONENT_OVL1_BLENDER7},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER18]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;18,&#32;DDP_COMPONENT_OVL1_BLENDER8},
+&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER19]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;19,&#32;DDP_COMPONENT_OVL1_BLENDER9},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC0]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;0,&#32;DDP_COMPONENT_OVL0_OUTPROC0},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC1]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;1,&#32;DDP_COMPONENT_OVL0_OUTPROC1},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC2]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;2,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC3]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;3,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC4]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;4,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC5]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;5,&#32;DDP_COMPONENT_ID_MAX},
+
+Ditto.
+
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC6]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;6,&#32;DDP_COMPONENT_OVL1_OUTPROC0},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC7]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;7,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC8]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;8,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC9]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;9,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC10]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;10,&#32;DDP_COMPONENT_ID_MAX},
+&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC11]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;11,&#32;DDP_COMPONENT_ID_MAX},
+
+Ditto.
+
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_main[]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA2,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER1,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA3,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER2,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA4,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER3,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA5,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER4,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC0,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_ext[]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA6,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER5,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA7,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER6,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA8,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER7,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA9,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER8,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC1,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_third[]&#32;=&#32;{
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA12,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER11,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA13,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER12,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA14,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER13,
+&gt;&#32;+OVLSYS_ADAPTOR_EXDMA15,
+&gt;&#32;+OVLSYS_ADAPTOR_BLENDER14,
+&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC6,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;get_type(enum&#32;mtk_ovlsys_adaptor_comp_id&#32;id)
+&gt;&#32;+{
+&gt;&#32;+return&#32;comp_matches[id].type;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;enum&#32;mtk_ddp_comp_id&#32;get_ddp_comp_id(enum&#32;mtk_ovlsys_adaptor_comp_id&#32;id)
+&gt;&#32;+{
+&gt;&#32;+return&#32;comp_matches[id].comp_id;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;struct&#32;device&#32;*get_comp_by_type_idx(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;&#32;&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type,
+&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+int&#32;count&#32;=&#32;0;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{
+&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;type)&#32;{
+&gt;&#32;+if&#32;(count&#32;==&#32;idx)
+&gt;&#32;+return&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]];
+&gt;&#32;+count++;
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+return&#32;NULL;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_layer_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;idx,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*state,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_plane_pending_state&#32;*pending&#32;=&#32;&amp;state-&gt;pending;
+&gt;&#32;+struct&#32;device&#32;*exdma;
+&gt;&#32;+struct&#32;device&#32;*blender;
+&gt;&#32;+unsigned&#32;int&#32;align_width&#32;=&#32;0;
+&gt;&#32;+const&#32;struct&#32;drm_format_info&#32;*fmt_info&#32;=&#32;drm_format_info(pending-&gt;format);
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+dev_dbg(dev,&#32;&quot;%s+&#32;idx:%d,&#32;enable:%d,&#32;fmt:0x%x&#92;n&quot;,&#32;__func__,&#32;idx,
+&gt;&#32;+pending-&gt;enable,&#32;pending-&gt;format);
+&gt;&#32;+dev_dbg(dev,&#32;&quot;addr&#32;0x%pad,&#32;fb&#32;w:%d,&#32;{%d,%d,%d,%d}&#92;n&quot;,
+&gt;&#32;+&amp;pending-&gt;addr,&#32;(pending-&gt;pitch&#32;/&#32;fmt_info-&gt;cpp[0]),
+&gt;&#32;+pending-&gt;x,&#32;pending-&gt;y,&#32;pending-&gt;width,&#32;pending-&gt;height);
+&gt;&#32;+
+&gt;&#32;+exdma&#32;=&#32;get_comp_by_type_idx(dev,&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;idx);
+&gt;&#32;+blender&#32;=&#32;get_comp_by_type_idx(dev,&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;idx);
+&gt;&#32;+
+&gt;&#32;+/*&#32;OVLSYS&#32;is&#32;in&#32;1T2P&#32;domain,&#32;width&#32;needs&#32;to&#32;be&#32;2&#32;pixels&#32;align&#32;*/
+&gt;&#32;+align_width&#32;=&#32;ALIGN_DOWN(pending-&gt;width,&#32;2);
+
+align_width&#32;is&#32;useless,&#32;so&#32;drop&#32;it.
+
+&gt;&#32;+
+&gt;&#32;+if&#32;(!pending-&gt;enable&#32;||&#32;pending-&gt;height&#32;==&#32;0&#32;||&#32;align_width&#32;==&#32;0&#32;||
+&gt;&#32;+&#32;&#32;&#32;&#32;pending-&gt;x&#32;&gt;&#32;priv-&gt;max_size&#32;||&#32;pending-&gt;y&#32;&gt;&#32;priv-&gt;max_size)&#32;{
+&gt;&#32;+pending-&gt;enable&#32;=&#32;false;
+&gt;&#32;+mtk_disp_exdma_stop(exdma,&#32;cmdq_pkt);
+&gt;&#32;+mtk_disp_blender_layer_config(blender,&#32;state,&#32;cmdq_pkt);
+&gt;&#32;+return;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+mtk_disp_exdma_config(exdma,&#32;state,&#32;cmdq_pkt);
+
+mtk_disp_exdma_config()&#32;does&#32;something&#32;like&#32;mtk_ovl_layer_config(),&#32;so&#32;I&#32;would&#32;like&#32;to&#32;rename&#32;it&#32;to&#32;mtk_disp_exdma_layer_config().
+
+&gt;&#32;+
+&gt;&#32;+mtk_disp_blender_layer_config(blender,&#32;state,&#32;cmdq_pkt);
+&gt;&#32;+
+&gt;&#32;+mtk_disp_exdma_start(exdma,&#32;cmdq_pkt);
+
+Why&#32;call&#32;start&#32;in&#32;layer&#32;config&#63;
+start&#32;should&#32;be&#32;called&#32;in&#32;start.
+
+&gt;&#32;+mtk_disp_blender_start(blender,&#32;cmdq_pkt);
+
+Ditto.
+
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+int&#32;blender_idx&#32;=&#32;0;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{
+&gt;&#32;+enum&#32;mtk_disp_blender_layer&#32;blender;
+&gt;&#32;+
+&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)&#32;{
+&gt;&#32;+blender_idx++;
+&gt;&#32;+if&#32;(priv-&gt;layer_nr&#32;==&#32;1)
+&gt;&#32;+blender&#32;=&#32;SINGLE_BLENDER;
+&gt;&#32;+else&#32;if&#32;(blender_idx&#32;==&#32;1)
+&gt;&#32;+blender&#32;=&#32;FIRST_BLENDER;
+&gt;&#32;+else&#32;if&#32;(blender_idx&#32;==&#32;priv-&gt;layer_nr)
+&gt;&#32;+blender&#32;=&#32;LAST_BLENDER;
+&gt;&#32;+else
+&gt;&#32;+blender&#32;=&#32;OTHERS;
+&gt;&#32;+
+&gt;&#32;+mtk_disp_blender_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,
+&gt;&#32;+vrefresh,&#32;bpc,&#32;blender,&#32;cmdq_pkt);
+
+mtk_disp_blender_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,
+vrefresh,&#32;bpc,&#32;blender_idx&#32;==&#32;1,&#32;blender_idx&#32;==&#32;priv-&gt;layer_nr,&#32;cmdq_pkt);
+
+&gt;&#32;+}&#32;else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC)&#32;{
+&gt;&#32;+mtk_disp_outproc_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,
+&gt;&#32;+vrefresh,&#32;bpc,&#32;cmdq_pkt);
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+int&#32;mtk_ovlsys_adaptor_layer_check(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx,
+&gt;&#32;+&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*mtk_state)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;drm_plane_state&#32;*state&#32;=&#32;&amp;mtk_state-&gt;base;
+&gt;&#32;+
+&gt;&#32;+/*&#32;Check&#32;if&#32;any&#32;unsupported&#32;rotation&#32;is&#32;set&#32;*/
+&gt;&#32;+if&#32;(state-&gt;rotation&#32;&amp;&#32;&#126;DRM_MODE_ROTATE_0)
+&gt;&#32;+return&#32;-EINVAL;
+&gt;&#32;+
+&gt;&#32;+return&#32;0;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_start(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{
+&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)
+&gt;&#32;+mtk_disp_exdma_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);
+
+The&#32;start&#32;never&#32;use&#32;cmdq,&#32;so&#32;remove&#32;the&#32;cmdq&#32;parameter.
+
+&gt;&#32;+else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)
+&gt;&#32;+mtk_disp_blender_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);
+
+Ditto.
+
+&gt;&#32;+else
+&gt;&#32;+mtk_disp_outproc_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]]);
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_stop(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{
+&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)
+&gt;&#32;+mtk_disp_exdma_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);
+
+Ditto.
+
+&gt;&#32;+else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)
+&gt;&#32;+mtk_disp_blender_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);
+
+Ditto.
+
+&gt;&#32;+else
+&gt;&#32;+mtk_disp_outproc_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]]);
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+int&#32;mtk_ovlsys_adaptor_clk_enable(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+struct&#32;device&#32;*comp;
+&gt;&#32;+int&#32;ret;
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{
+&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];
+&gt;&#32;+
+&gt;&#32;+if&#32;(!comp)
+&gt;&#32;+continue;
+&gt;&#32;+
+&gt;&#32;+if&#32;(get_type(i)&#32;!=&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)
+&gt;&#32;+continue;
+&gt;&#32;+
+&gt;&#32;+ret&#32;=&#32;pm_runtime_get_sync(comp);
+
+Refer&#32;to&#32;mtk_ovl_adaptor_power_on().
+This&#32;should&#32;be&#32;done&#32;in&#32;power_on()&#32;callback&#32;function.
+
+&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;enable&#32;power&#32;domain&#32;%d,&#32;err&#32;%d&#92;n&quot;,&#32;i,&#32;ret);
+&gt;&#32;+goto&#32;pwr_err;
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{
+&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];
+&gt;&#32;+
+&gt;&#32;+if&#32;(!comp)
+&gt;&#32;+continue;
+&gt;&#32;+
+&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)
+&gt;&#32;+ret&#32;=&#32;mtk_disp_exdma_clk_enable(comp);
+&gt;&#32;+else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)
+&gt;&#32;+ret&#32;=&#32;mtk_disp_blender_clk_enable(comp);
+&gt;&#32;+else
+&gt;&#32;+ret&#32;=&#32;mtk_disp_outproc_clk_enable(comp);
+&gt;&#32;+
+&gt;&#32;+if&#32;(ret)&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;enable&#32;clock&#32;%d,&#32;err&#32;%d&#92;n&quot;,&#32;i,&#32;ret);
+&gt;&#32;+goto&#32;clk_err;
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+
+&gt;&#32;+clk_err:
+&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{
+&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];
+&gt;&#32;+if&#32;(!comp)
+&gt;&#32;+continue;
+&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)
+&gt;&#32;+mtk_disp_exdma_clk_disable(comp);
+&gt;&#32;+else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)
+&gt;&#32;+mtk_disp_blender_clk_disable(comp);
+&gt;&#32;+else
+&gt;&#32;+mtk_disp_outproc_clk_disable(comp);
+&gt;&#32;+}
+&gt;&#32;+i&#32;=&#32;OVLSYS_ADAPTOR_BLENDER0;
+&gt;&#32;+
+&gt;&#32;+pwr_err:
+&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{
+&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];
+&gt;&#32;+if&#32;(!comp)
+&gt;&#32;+continue;
+&gt;&#32;+pm_runtime_put(priv-&gt;ovl_adaptor_comp[i]);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_clk_disable(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+struct&#32;device&#32;*comp;
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{
+&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];
+&gt;&#32;+
+&gt;&#32;+if&#32;(!comp)
+&gt;&#32;+continue;
+&gt;&#32;+
+&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)&#32;{
+&gt;&#32;+mtk_disp_exdma_clk_disable(comp);
+&gt;&#32;+pm_runtime_put(comp);
+&gt;&#32;+}&#32;else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)&#32;{
+&gt;&#32;+mtk_disp_blender_clk_disable(comp);
+&gt;&#32;+}&#32;else&#32;{
+&gt;&#32;+mtk_disp_outproc_clk_disable(comp);
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+unsigned&#32;int&#32;mtk_ovlsys_adaptor_layer_nr(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+return&#32;priv-&gt;layer_nr;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+struct&#32;device&#32;*mtk_ovlsys_adaptor_dma_dev_get(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+return&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]];
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_register_vblank_cb(struct&#32;device&#32;*dev,&#32;void&#32;(*vblank_cb)(void&#32;*),
+&gt;&#32;+&#32;&#32;&#32;void&#32;*vblank_cb_data)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+mtk_disp_outproc_register_vblank_cb(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]],
+&gt;&#32;+&#32;&#32;&#32;&#32;vblank_cb,&#32;vblank_cb_data);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_unregister_vblank_cb(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+struct&#32;device&#32;*comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]];
+&gt;&#32;+
+&gt;&#32;+if&#32;(!priv-&gt;children_bound)
+
+In&#32;ovl&#32;adaptor,&#32;it&#32;does&#32;not&#32;check&#32;this.&#32;So&#32;remove&#32;this&#32;checking.
+
+&gt;&#32;+return;
+&gt;&#32;+
+&gt;&#32;+mtk_disp_outproc_unregister_vblank_cb(comp);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_enable_vblank(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+mtk_disp_outproc_enable_vblank(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]]);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disable_vblank(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+mtk_disp_outproc_disable_vblank(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]]);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+const&#32;u32&#32;*mtk_ovlsys_adaptor_get_formats(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+return&#32;mtk_disp_exdma_get_formats(priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]]);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+size_t&#32;mtk_ovlsys_adaptor_get_num_formats(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+return&#32;mtk_disp_exdma_get_num_formats(priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]]);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)
+&gt;&#32;+mtk_mutex_add_comp(mutex,&#32;get_ddp_comp_id(priv-&gt;path[i]));
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)
+&gt;&#32;+mtk_mutex_remove_comp(mutex,&#32;get_ddp_comp_id(priv-&gt;path[i]));
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_connect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,&#32;unsigned&#32;int&#32;next)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size&#32;-&#32;1;&#32;i++)
+&gt;&#32;+mtk_mmsys_ddp_connect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;get_ddp_comp_id(priv-&gt;path[i&#32;+&#32;1]));
+&gt;&#32;+
+&gt;&#32;+mtk_mmsys_ddp_connect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),&#32;next);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disconnect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,&#32;unsigned&#32;int&#32;next)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size&#32;-&#32;1;&#32;i++)
+&gt;&#32;+mtk_mmsys_ddp_disconnect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),
+&gt;&#32;+&#32;get_ddp_comp_id(priv-&gt;path[i&#32;+&#32;1]));
+&gt;&#32;+
+&gt;&#32;+mtk_mmsys_ddp_disconnect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),&#32;next);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;ovlsys_adaptor_comp_get_id(struct&#32;device&#32;*dev,&#32;struct&#32;device_node&#32;*node,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;enum&#32;mtk_ddp_comp_id&#32;*comp_id)
+&gt;&#32;+{
+&gt;&#32;+int&#32;alias_id&#32;=&#32;of_alias_get_id(node,&#32;private_comp_stem[type]);
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;ARRAY_SIZE(comp_matches);&#32;i++)
+&gt;&#32;+if&#32;(comp_matches[i].type&#32;==&#32;type&#32;&amp;&amp;
+&gt;&#32;+&#32;&#32;&#32;&#32;comp_matches[i].alias_id&#32;==&#32;alias_id)&#32;{
+&gt;&#32;+*comp_id&#32;=&#32;comp_matches[i].comp_id;
+&gt;&#32;+return&#32;i;
+&gt;&#32;+}
+&gt;&#32;+dev_warn(dev,&#32;&quot;Failed&#32;to&#32;get&#32;id.&#32;type:&#32;%d,&#32;alias:&#32;%d&#92;n&quot;,&#32;type,&#32;alias_id);
+&gt;&#32;+return&#32;-EINVAL;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;of_device_id&#32;mtk_ovlsys_adaptor_comp_dt_ids[]&#32;=&#32;{
+&gt;&#32;+{
+&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-exdma&quot;,
+&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_EXDMA,
+&gt;&#32;+},&#32;{
+&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-blender&quot;,
+&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_BLENDER,
+&gt;&#32;+},&#32;{
+&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-outproc&quot;,
+&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_OUTPROC,
+&gt;&#32;+},
+&gt;&#32;+{},
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;ovlsys_adaptor_comp_init(struct&#32;device&#32;*dev,&#32;struct&#32;component_match&#32;**match)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+struct&#32;device_node&#32;*node,&#32;*parent;
+&gt;&#32;+struct&#32;platform_device&#32;*comp_pdev;
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+parent&#32;=&#32;dev-&gt;parent-&gt;parent-&gt;of_node-&gt;parent;
+&gt;&#32;+
+&gt;&#32;+for_each_child_of_node(parent,&#32;node)&#32;{
+&gt;&#32;+const&#32;struct&#32;of_device_id&#32;*of_id;
+&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type;
+&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id;
+&gt;&#32;+int&#32;id;
+&gt;&#32;+bool&#32;found&#32;=&#32;false;
+&gt;&#32;+
+&gt;&#32;+of_id&#32;=&#32;of_match_node(mtk_ovlsys_adaptor_comp_dt_ids,&#32;node);
+&gt;&#32;+if&#32;(!of_id)
+&gt;&#32;+continue;
+&gt;&#32;+
+&gt;&#32;+if&#32;(!of_device_is_available(node))&#32;{
+&gt;&#32;+dev_dbg(dev,&#32;&quot;Skipping&#32;disabled&#32;component&#32;%pOF&#92;n&quot;,
+&gt;&#32;+node);
+&gt;&#32;+continue;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+type&#32;=&#32;(enum&#32;mtk_ovlsys_adaptor_comp_type)(uintptr_t)of_id-&gt;data;
+&gt;&#32;+id&#32;=&#32;ovlsys_adaptor_comp_get_id(dev,&#32;node,&#32;type,&#32;&amp;comp_id);
+&gt;&#32;+if&#32;(id&#32;&lt;&#32;0)&#32;{
+&gt;&#32;+dev_warn(dev,&#32;&quot;Skipping&#32;unknown&#32;component&#32;%pOF&#92;n&quot;,
+&gt;&#32;+&#32;node);
+&gt;&#32;+continue;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)
+&gt;&#32;+if&#32;(priv-&gt;path[i]&#32;==&#32;id)
+&gt;&#32;+found&#32;=&#32;true;
+&gt;&#32;+
+&gt;&#32;+if&#32;(!found)
+&gt;&#32;+continue;
+
+ovl&#32;adaptor&#32;does&#32;not&#32;check&#32;this,&#32;why&#32;ovlsys&#32;need&#32;this&#63;
+If&#32;this&#32;is&#32;removed,&#32;this&#32;function&#32;is&#32;similar&#32;to&#32;the&#32;one&#32;in&#32;ovl&#32;adaptor,
+would&#32;you&#32;try&#32;to&#32;rewrite&#32;this&#32;function&#32;to&#32;be&#32;almost&#32;the&#32;same&#32;with&#32;the&#32;one&#32;in&#32;ovl&#32;adator&#63;
+Not&#32;merging&#32;it,&#32;just&#32;implement&#32;almost&#32;the&#32;same.
+
+&gt;&#32;+
+&gt;&#32;+comp_pdev&#32;=&#32;of_find_device_by_node(node);
+&gt;&#32;+if&#32;(!comp_pdev)
+&gt;&#32;+return&#32;-EPROBE_DEFER;
+&gt;&#32;+
+&gt;&#32;+priv-&gt;ovl_adaptor_comp[id]&#32;=&#32;&amp;comp_pdev-&gt;dev;
+&gt;&#32;+
+&gt;&#32;+drm_of_component_match_add(dev,&#32;match,&#32;component_compare_of,&#32;node);
+&gt;&#32;+dev_dbg(dev,&#32;&quot;Adding&#32;component&#32;match&#32;for&#32;%pOF&#92;n&quot;,&#32;node);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+if&#32;(!*match)&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;No&#32;match&#32;device&#32;for&#32;ovlsys_adaptor&#92;n&quot;);
+&gt;&#32;+return&#32;-ENODEV;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+return&#32;0;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_comp_bind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;void&#32;*data)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+if&#32;(!priv-&gt;children_bound)
+&gt;&#32;+return&#32;-EPROBE_DEFER;
+&gt;&#32;+
+&gt;&#32;+return&#32;0;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_comp_unbind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,
+&gt;&#32;+void&#32;*data)
+&gt;&#32;+{
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;component_ops&#32;mtk_disp_ovlsys_adaptor_comp_ops&#32;=&#32;{
+&gt;&#32;+.bind=&#32;mtk_disp_ovlsys_adaptor_comp_bind,
+&gt;&#32;+.unbind&#32;=&#32;mtk_disp_ovlsys_adaptor_comp_unbind,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_master_bind(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+int&#32;ret,&#32;i;
+&gt;&#32;+unsigned&#32;int&#32;layer_nr&#32;=&#32;0;
+&gt;&#32;+
+&gt;&#32;+ret&#32;=&#32;component_bind_all(dev,&#32;priv-&gt;mmsys_dev);
+&gt;&#32;+if&#32;(ret)
+&gt;&#32;+return&#32;dev_err_probe(dev,&#32;ret,&#32;&quot;component_bind_all&#32;failed!&#92;n&quot;);
+&gt;&#32;+
+&gt;&#32;+priv-&gt;children_bound&#32;=&#32;true;
+&gt;&#32;+
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)
+&gt;&#32;+if&#32;(comp_matches[priv-&gt;path[i]].type&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)
+&gt;&#32;+layer_nr++;
+&gt;&#32;+priv-&gt;layer_nr&#32;=&#32;layer_nr;
+&gt;&#32;+
+&gt;&#32;+return&#32;0;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_master_unbind(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+priv-&gt;children_bound&#32;=&#32;false;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;component_master_ops&#32;mtk_disp_ovlsys_adaptor_master_ops&#32;=&#32;{
+&gt;&#32;+.bind=&#32;mtk_disp_ovlsys_adaptor_master_bind,
+&gt;&#32;+.unbind=&#32;mtk_disp_ovlsys_adaptor_master_unbind,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;mtk_disp_ovlsys_adaptor&#32;mt8196_ovlsys_adaptor_driver_data&#32;=&#32;{
+&gt;&#32;+.max_size&#32;=&#32;8191,
+
+This&#32;is&#32;the&#32;first&#32;SoC&#32;has&#32;ovlsys,&#32;so&#32;it&#39;s&#32;not&#32;necessary&#32;to&#32;has&#32;driver&#32;data.
+After&#32;other&#32;SoC&#32;ovlsys&#32;is&#32;added,&#32;then&#32;consider&#32;to&#32;add&#32;driver&#32;data.
+So,
+
+#define&#32;OVLSYS_MAX_SIZE&#32;8191
+
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_probe(struct&#32;platform_device&#32;*pdev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv;
+&gt;&#32;+struct&#32;device&#32;*dev&#32;=&#32;&amp;pdev-&gt;dev;
+&gt;&#32;+struct&#32;component_match&#32;*match&#32;=&#32;NULL;
+&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;*ovlsys_priv;
+&gt;&#32;+int&#32;ret;
+&gt;&#32;+
+&gt;&#32;+priv&#32;=&#32;devm_kzalloc(dev,&#32;sizeof(*priv),&#32;GFP_KERNEL);
+&gt;&#32;+if&#32;(!priv)
+&gt;&#32;+return&#32;-ENOMEM;
+&gt;&#32;+
+&gt;&#32;+platform_set_drvdata(pdev,&#32;priv);
+&gt;&#32;+
+&gt;&#32;+ovlsys_priv&#32;=&#32;pdev-&gt;dev.platform_data;
+&gt;&#32;+priv-&gt;mmsys_dev&#32;=&#32;ovlsys_priv-&gt;mmsys_dev;
+&gt;&#32;+priv-&gt;max_size&#32;=&#32;mt8196_ovlsys_adaptor_driver_data.max_size;
+&gt;&#32;+
+&gt;&#32;+if&#32;(ovlsys_priv-&gt;use_path&#32;==&#32;0)&#32;{
+&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_main;
+&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_main);
+&gt;&#32;+}&#32;else&#32;if&#32;(ovlsys_priv-&gt;use_path&#32;==&#32;1)&#32;{
+&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_ext;
+&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_ext);
+&gt;&#32;+}&#32;else&#32;{
+&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_third;
+&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_third);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+ret&#32;=&#32;ovlsys_adaptor_comp_init(dev,&#32;&amp;match);
+&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+
+&gt;&#32;+component_master_add_with_match(dev,&#32;&amp;mtk_disp_ovlsys_adaptor_master_ops,&#32;match);
+&gt;&#32;+
+&gt;&#32;+pm_runtime_enable(dev);
+&gt;&#32;+
+&gt;&#32;+ret&#32;=&#32;component_add(dev,&#32;&amp;mtk_disp_ovlsys_adaptor_comp_ops);
+&gt;&#32;+if&#32;(ret&#32;!=&#32;0)&#32;{
+&gt;&#32;+pm_runtime_disable(dev);
+&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;add&#32;component:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_remove(struct&#32;platform_device&#32;*pdev)
+&gt;&#32;+{
+&gt;&#32;+component_master_del(&amp;pdev-&gt;dev,&#32;&amp;mtk_disp_ovlsys_adaptor_master_ops);
+&gt;&#32;+pm_runtime_disable(&amp;pdev-&gt;dev);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+struct&#32;platform_driver&#32;mtk_disp_ovlsys_adaptor_driver&#32;=&#32;{
+&gt;&#32;+.probe=&#32;mtk_disp_ovlsys_adaptor_probe,
+&gt;&#32;+.remove=&#32;mtk_disp_ovlsys_adaptor_remove,
+&gt;&#32;+.driver=&#32;{
+&gt;&#32;+.name=&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,
+&gt;&#32;+.owner=&#32;THIS_MODULE,
+&gt;&#32;+},
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+MODULE_AUTHOR(&quot;Nancy&#32;Lin&#32;&lt;nancy.lin@mediatek.com&gt;&quot;);
+&gt;&#32;+MODULE_DESCRIPTION(&quot;MediaTek&#32;Ovlsys&#32;Adaptor&#32;Driver&quot;);
+&gt;&#32;+MODULE_LICENSE(&quot;GPL&quot;);
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;index&#32;27190057bd8e..7526bc38bcc7&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;@@&#32;-448,6&#32;+448,28&#32;@@&#32;static&#32;bool&#32;mtk_drm_find_mmsys_comp(struct&#32;mtk_drm_private&#32;*private,&#32;int&#32;comp_id
+&gt;&#32;&#32;return&#32;false;
+&gt;&#32;&#32;}
+&gt;&#32;&#32;
+&gt;&#32;+static&#32;int&#32;mtk_drm_mmsys_comp_in_path(struct&#32;mtk_drm_private&#32;*private,&#32;int&#32;comp_id)
+&gt;&#32;+{
+&gt;&#32;+const&#32;struct&#32;mtk_mmsys_driver_data&#32;*drv_data&#32;=&#32;private-&gt;data;
+&gt;&#32;+int&#32;i;
+&gt;&#32;+
+&gt;&#32;+if&#32;(drv_data-&gt;main_path)
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;main_len;&#32;i++)
+&gt;&#32;+if&#32;(drv_data-&gt;main_path[i]&#32;==&#32;comp_id)
+&gt;&#32;+return&#32;0;
+&gt;&#32;+
+&gt;&#32;+if&#32;(drv_data-&gt;ext_path)
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;ext_len;&#32;i++)
+&gt;&#32;+if&#32;(drv_data-&gt;ext_path[i]&#32;==&#32;comp_id)
+&gt;&#32;+return&#32;1;
+&gt;&#32;+if&#32;(drv_data-&gt;third_path)
+&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;third_len;&#32;i++)
+&gt;&#32;+if&#32;(drv_data-&gt;third_path[i]&#32;==&#32;comp_id)
+&gt;&#32;+return&#32;2;
+&gt;&#32;+
+&gt;&#32;+return&#32;-1;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;&#32;static&#32;int&#32;mtk_drm_kms_init(struct&#32;drm_device&#32;*drm)
+&gt;&#32;&#32;{
+&gt;&#32;&#32;struct&#32;mtk_drm_private&#32;*private&#32;=&#32;drm-&gt;dev_private;
+&gt;&#32;@@&#32;-463,8&#32;+485,8&#32;@@&#32;static&#32;int&#32;mtk_drm_kms_init(struct&#32;drm_device&#32;*drm)
+&gt;&#32;&#32;if&#32;(ret)
+&gt;&#32;&#32;goto&#32;put_mutex_dev;
+&gt;&#32;&#32;
+&gt;&#32;-drm-&gt;mode_config.min_width&#32;=&#32;64;
+&gt;&#32;-drm-&gt;mode_config.min_height&#32;=&#32;64;
+&gt;&#32;+drm-&gt;mode_config.min_width&#32;=&#32;1;
+&gt;&#32;+drm-&gt;mode_config.min_height&#32;=&#32;1;
+
+You&#32;change&#32;other&#32;SoC&#32;setting.
+If&#32;8196&#32;has&#32;different&#32;setting,&#32;query&#32;min&#32;width/height&#32;from&#32;ddp&#32;component&#32;and&#32;separate&#32;this&#32;to&#32;another&#32;patch.
+
+&gt;&#32;&#32;
+&gt;&#32;&#32;/*
+&gt;&#32;&#32;&#32;*&#32;set&#32;max&#32;width&#32;and&#32;height&#32;as&#32;default&#32;value(4096x4096).
+&gt;&#32;@@&#32;-1107,6&#32;+1129,40&#32;@@&#32;static&#32;int&#32;mtk_drm_probe(struct&#32;platform_device&#32;*pdev)
+&gt;&#32;&#32;component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);
+&gt;&#32;&#32;}
+&gt;&#32;&#32;
+&gt;&#32;+if&#32;(mtk_drm_find_mmsys_comp(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0))&#32;{
+&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;ovlsys_priv;
+&gt;&#32;+
+&gt;&#32;+ovlsys_priv.mmsys_dev&#32;=&#32;private-&gt;mmsys_dev;
+&gt;&#32;+ovlsys_priv.use_path&#32;=
+&gt;&#32;+mtk_drm_mmsys_comp_in_path(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0);
+&gt;&#32;+ovl_adaptor&#32;=
+&gt;&#32;+platform_device_register_data(dev,&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;PLATFORM_DEVID_AUTO,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;(void&#32;*)&amp;ovlsys_priv,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;sizeof(struct&#32;mtk_drm_ovlsys_private));
+&gt;&#32;+private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0].dev&#32;=&#32;&amp;ovl_adaptor-&gt;dev;
+&gt;&#32;+mtk_ddp_comp_init(NULL,&#32;&amp;private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0],
+&gt;&#32;+&#32;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0);
+&gt;&#32;+component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+if&#32;(mtk_drm_find_mmsys_comp(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1))&#32;{
+&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;ovlsys_priv;
+&gt;&#32;+
+&gt;&#32;+ovlsys_priv.mmsys_dev&#32;=&#32;private-&gt;mmsys_dev;
+&gt;&#32;+ovlsys_priv.use_path&#32;=
+&gt;&#32;+mtk_drm_mmsys_comp_in_path(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1);
+&gt;&#32;+ovl_adaptor&#32;=
+&gt;&#32;+platform_device_register_data(dev,&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;PLATFORM_DEVID_AUTO,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;(void&#32;*)&amp;ovlsys_priv,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;sizeof(struct&#32;mtk_drm_ovlsys_private));
+&gt;&#32;+private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1].dev&#32;=&#32;&amp;ovl_adaptor-&gt;dev;
+&gt;&#32;+mtk_ddp_comp_init(NULL,&#32;&amp;private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1],
+&gt;&#32;+&#32;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1);
+&gt;&#32;+component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;&#32;/*&#32;Iterate&#32;over&#32;sibling&#32;DISP&#32;function&#32;blocks&#32;*/
+&gt;&#32;&#32;for_each_child_of_node(phandle-&gt;parent,&#32;node)&#32;{
+&gt;&#32;&#32;enum&#32;mtk_ddp_comp_type&#32;comp_type;
+&gt;&#32;@@&#32;-1268,6&#32;+1324,7&#32;@@&#32;static&#32;struct&#32;platform_driver&#32;*&#32;const&#32;mtk_drm_drivers[]&#32;=&#32;{
+&gt;&#32;&#32;&amp;mtk_disp_outproc_driver,
+&gt;&#32;&#32;&amp;mtk_disp_ovl_adaptor_driver,
+&gt;&#32;&#32;&amp;mtk_disp_ovl_driver,
+&gt;&#32;+&amp;mtk_disp_ovlsys_adaptor_driver,
+&gt;&#32;&#32;&amp;mtk_disp_rdma_driver,
+&gt;&#32;&#32;&amp;mtk_dpi_driver,
+&gt;&#32;&#32;&amp;mtk_drm_platform_driver,
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+&gt;&#32;index&#32;c4717c37b0f1..aa17e743a1d0&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+&gt;&#32;@@&#32;-11,7&#32;+11,9&#32;@@
+&gt;&#32;&#32;
+&gt;&#32;&#32;#define&#32;MAX_CONNECTOR2
+&gt;&#32;&#32;#define&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;(DDP_COMPONENT_ID_MAX&#32;+&#32;1)
+&gt;&#32;-#define&#32;DDP_COMPONENT_DRM_ID_MAX&#32;(DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;+&#32;1)
+&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0&#32;(DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;+&#32;1)
+&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;(DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0&#32;+&#32;1)
+&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_ID_MAX&#32;(DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;+&#32;1)
+&gt;&#32;&#32;
+&gt;&#32;&#32;enum&#32;mtk_crtc_path&#32;{
+&gt;&#32;&#32;CRTC_MAIN,
+&gt;&#32;@@&#32;-69,6&#32;+71,12&#32;@@&#32;struct&#32;mtk_drm_private&#32;{
+&gt;&#32;&#32;struct&#32;mtk_drm_private&#32;**all_drm_private;
+&gt;&#32;&#32;};
+&gt;&#32;&#32;
+&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;{
+
+ovlsys&#32;has&#32;its&#32;own&#32;private&#32;data&#32;structure.
+mtk_ovlsys_platform_data&#32;is&#32;better.
+
+Regards,
+CK
+
+
+&gt;&#32;+struct&#32;device&#32;*mmsys_dev;
+&gt;&#32;+struct&#32;device&#32;*mutex_dev;
+&gt;&#32;+unsigned&#32;int&#32;use_path;
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_aal_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_blender_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ccorr_driver;
+&gt;&#32;@@&#32;-79,6&#32;+87,7&#32;@@&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_merge_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_outproc_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovl_adaptor_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovl_driver;
+&gt;&#32;+extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovlsys_adaptor_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_rdma_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_dpi_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_dsi_driver;
+
+
+</pre>
+</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice
+ ********************
+The information contained in this e-mail message (including any 
+attachments) may be confidential, proprietary, privileged, or otherwise
+exempt from disclosure under applicable laws. It is intended to be 
+conveyed only to the designated recipient(s). Any use, dissemination, 
+distribution, printing, retaining or copying of this e-mail (including its 
+attachments) by unintended recipient(s) is strictly prohibited and may 
+be unlawful. If you are not an intended recipient of this e-mail, or believe
+ 
+that you have received this e-mail in error, please notify the sender 
+immediately (by replying to this e-mail), delete any and all copies of 
+this e-mail (including any attachments) from your system, and do not
+disclose the content of this e-mail to any other person. Thank you!
+</pre><!--}-->
diff --git a/N1/2.hdr b/N1/2.hdr
new file mode 100644
index 0000000..da1f671
--- /dev/null
+++ b/N1/2.hdr
@@ -0,0 +1,3 @@
+Content-Type: text/html;
+	charset="utf-8"
+Content-Transfer-Encoding: base64
diff --git a/a/content_digest b/N1/content_digest
index 2eea4cb..944c2bf 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -24,7 +24,7 @@
   p.zabel@pengutronix.de <p.zabel@pengutronix.de>
  " Sirius Wang (\347\216\213\347\232\223\346\230\261) <Sirius.Wang@mediatek.com>"
  " linux-arm-kernel@lists.infradead.org <linux-arm-kernel@lists.infradead.org>\0"
- "\00:1\0"
+ "\01:1\0"
  "b\0"
  "Hi, Paul:\n"
  "\n"
@@ -1151,5 +1151,1152 @@
  ">  extern struct platform_driver mtk_disp_rdma_driver;\n"
  ">  extern struct platform_driver mtk_dpi_driver;\n"
  >  extern struct platform_driver mtk_dsi_driver;
+ "\01:2\0"
+ "b\0"
+ "<html><body><p>\r\n"
+ "<pre>\r\n"
+ "Hi,&#32;Paul:\r\n"
+ "\r\n"
+ "On&#32;Fri,&#32;2025-01-10&#32;at&#32;20:34&#32;+0800,&#32;paul-pl.chen&#32;wrote:\r\n"
+ "&gt;&#32;From:&#32;&quot;Nancy.Lin&quot;&#32;&lt;nancy.lin@mediatek.com&gt;\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;Ovlsys_adaptor&#32;is&#32;an&#32;encapsulated&#32;module&#32;designed&#32;to\r\n"
+ "&gt;&#32;simplify&#32;the&#32;DRM&#32;control&#32;flow.&#32;This&#32;module&#32;is&#32;composed\r\n"
+ "&gt;&#32;of&#32;20&#32;EXDMAs,&#32;20&#32;BLENDERs,&#32;and&#32;12&#32;OUTPROCs.\r\n"
+ "&gt;&#32;Two&#32;EXDMAs&#32;merge&#32;into&#32;one&#32;layer,&#32;allowing&#32;the&#32;module\r\n"
+ "&gt;&#32;to&#32;support&#32;20&#32;layers&#32;for&#32;3&#32;display&#32;paths.\r\n"
+ "&gt;&#32;Ovlsys_adaptor&#32;driver&#32;is&#32;integrated&#32;within&#32;the\r\n"
+ "&gt;&#32;mtk_ddp_comp&#32;framework.\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;Signed-off-by:&#32;Nancy.Lin&#32;&lt;nancy.lin@mediatek.com&gt;\r\n"
+ "&gt;&#32;Signed-off-by:&#32;Paul-pl.Chen&#32;&lt;paul-pl.chen@mediatek.com&gt;\r\n"
+ "&gt;&#32;---\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/Makefile&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;25&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_drv.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;31&#32;+-\r\n"
+ "&gt;&#32;&#32;.../drm/mediatek/mtk_disp_ovlsys_adaptor.c&#32;&#32;&#32;&#32;|&#32;758&#32;++++++++++++++++++\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;61&#32;+-\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;11&#32;+-\r\n"
+ "&gt;&#32;&#32;7&#32;files&#32;changed,&#32;884&#32;insertions(+),&#32;4&#32;deletions(-)\r\n"
+ "&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/Makefile&#32;b/drivers/gpu/drm/mediatek/Makefile\r\n"
+ "&gt;&#32;index&#32;9546bc6b7b2e..dedf50860d3f&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/Makefile\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/Makefile\r\n"
+ "&gt;&#32;@@&#32;-9,6&#32;+9,7&#32;@@&#32;mediatek-drm-y&#32;:=&#32;mtk_crtc.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_exdma.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_gamma.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_merge.o&#32;&#92;\r\n"
+ "&gt;&#32;+&#32;&#32;mtk_disp_ovlsys_adaptor.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_ovl.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_outproc.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_disp_ovl_adaptor.o&#32;&#92;\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;index&#32;cc780744f060..492b8d965309&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;@@&#32;-368,6&#32;+368,28&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_ovl&#32;=&#32;{\r\n"
+ "&gt;&#32;&#32;.get_num_formats&#32;=&#32;mtk_ovl_get_num_formats,\r\n"
+ "&gt;&#32;&#32;};\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_ovlsys_adaptor&#32;=&#32;{\r\n"
+ "&gt;&#32;+.clk_enable&#32;=&#32;mtk_ovlsys_adaptor_clk_enable,\r\n"
+ "&gt;&#32;+.clk_disable&#32;=&#32;mtk_ovlsys_adaptor_clk_disable,\r\n"
+ "&gt;&#32;+.config&#32;=&#32;mtk_ovlsys_adaptor_config,\r\n"
+ "&gt;&#32;+.start&#32;=&#32;mtk_ovlsys_adaptor_start,\r\n"
+ "&gt;&#32;+.stop&#32;=&#32;mtk_ovlsys_adaptor_stop,\r\n"
+ "&gt;&#32;+.layer_check&#32;=&#32;mtk_ovlsys_adaptor_layer_check,\r\n"
+ "&gt;&#32;+.layer_nr&#32;=&#32;mtk_ovlsys_adaptor_layer_nr,\r\n"
+ "&gt;&#32;+.layer_config&#32;=&#32;mtk_ovlsys_adaptor_layer_config,\r\n"
+ "&gt;&#32;+.register_vblank_cb&#32;=&#32;mtk_ovlsys_adaptor_register_vblank_cb,\r\n"
+ "&gt;&#32;+.unregister_vblank_cb&#32;=&#32;mtk_ovlsys_adaptor_unregister_vblank_cb,\r\n"
+ "&gt;&#32;+.enable_vblank&#32;=&#32;mtk_ovlsys_adaptor_enable_vblank,\r\n"
+ "&gt;&#32;+.disable_vblank&#32;=&#32;mtk_ovlsys_adaptor_disable_vblank,\r\n"
+ "&gt;&#32;+.dma_dev_get&#32;=&#32;mtk_ovlsys_adaptor_dma_dev_get,\r\n"
+ "&gt;&#32;+.connect&#32;=&#32;mtk_ovlsys_adaptor_connect,\r\n"
+ "&gt;&#32;+.disconnect&#32;=&#32;mtk_ovlsys_adaptor_disconnect,\r\n"
+ "&gt;&#32;+.add&#32;=&#32;mtk_ovlsys_adaptor_add_comp,\r\n"
+ "&gt;&#32;+.remove&#32;=&#32;mtk_ovlsys_adaptor_remove_comp,\r\n"
+ "&gt;&#32;+.get_formats&#32;=&#32;mtk_ovlsys_adaptor_get_formats,\r\n"
+ "&gt;&#32;+.get_num_formats&#32;=&#32;mtk_ovlsys_adaptor_get_num_formats,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_funcs&#32;ddp_postmask&#32;=&#32;{\r\n"
+ "&gt;&#32;&#32;.clk_enable&#32;=&#32;mtk_ddp_clk_enable,\r\n"
+ "&gt;&#32;&#32;.clk_disable&#32;=&#32;mtk_ddp_clk_disable,\r\n"
+ "&gt;&#32;@@&#32;-437,6&#32;+459,7&#32;@@&#32;static&#32;const&#32;char&#32;*&#32;const&#32;mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX]&#32;=&#32;{\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_OVL]&#32;=&#32;&quot;ovl&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_OVL_2L]&#32;=&#32;&quot;ovl-2l&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_OVL_ADAPTOR]&#32;=&#32;&quot;ovl_adaptor&quot;,\r\n"
+ "&gt;&#32;+[MTK_DISP_OVLSYS_ADAPTOR]&#32;=&#32;&quot;ovlsys_adaptor&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_POSTMASK]&#32;=&#32;&quot;postmask&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_PWM]&#32;=&#32;&quot;pwm&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_DISP_RDMA]&#32;=&#32;&quot;rdma&quot;,\r\n"
+ "&gt;&#32;@@&#32;-469,6&#32;+492,8&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DPI0]=&#32;{&#32;MTK_DPI,0,&#32;&amp;ddp_dpi&#32;},\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DPI1]=&#32;{&#32;MTK_DPI,1,&#32;&amp;ddp_dpi&#32;},\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DRM_OVL_ADAPTOR]=&#32;{&#32;MTK_DISP_OVL_ADAPTOR,0,&#32;&amp;ddp_ovl_adaptor&#32;},\r\n"
+ "&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DSC0]=&#32;{&#32;MTK_DISP_DSC,0,&#32;&amp;ddp_dsc&#32;},\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DSC1]=&#32;{&#32;MTK_DISP_DSC,1,&#32;&amp;ddp_dsc&#32;},\r\n"
+ "&gt;&#32;&#32;[DDP_COMPONENT_DSI0]=&#32;{&#32;MTK_DSI,0,&#32;&amp;ddp_dsi&#32;},\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;index&#32;b33d3289b8b6..ef64ce7a071f&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;@@&#32;-33,6&#32;+33,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{\r\n"
+ "&gt;&#32;&#32;MTK_DISP_MUTEX,\r\n"
+ "&gt;&#32;&#32;MTK_DISP_OD,\r\n"
+ "&gt;&#32;&#32;MTK_DISP_OVL,\r\n"
+ "&gt;&#32;+MTK_DISP_OVLSYS_ADAPTOR,\r\n"
+ "&gt;&#32;&#32;MTK_DISP_OVL_2L,\r\n"
+ "&gt;&#32;&#32;MTK_DISP_OVL_ADAPTOR,\r\n"
+ "&gt;&#32;&#32;MTK_DISP_POSTMASK,\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_drv.h&#32;b/drivers/gpu/drm/mediatek/mtk_disp_drv.h\r\n"
+ "&gt;&#32;index&#32;44d2cbe919dc..67f6da59d0de&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_disp_drv.h\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_drv.h\r\n"
+ "&gt;&#32;@@&#32;-140,8&#32;+140,8&#32;@@&#32;void&#32;mtk_ovl_enable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_ovl_disable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;u32&#32;mtk_ovl_get_blend_modes(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;const&#32;u32&#32;*mtk_ovl_get_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;-size_t&#32;mtk_ovl_get_num_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+size_t&#32;mtk_ovl_get_num_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_ovl_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_ovl_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);\r\n"
+ "&gt;&#32;&#32;bool&#32;mtk_ovl_adaptor_is_comp_present(struct&#32;device_node&#32;*node);\r\n"
+ "&gt;&#32;@@&#32;-174,6&#32;+174,35&#32;@@&#32;size_t&#32;mtk_ovl_adaptor_get_num_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;enum&#32;drm_mode_status&#32;mtk_ovl_adaptor_mode_valid(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;&#32;const&#32;struct&#32;drm_display_mode&#32;*mode);\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_connect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;next);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disconnect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;next);\r\n"
+ "&gt;&#32;+int&#32;mtk_ovlsys_adaptor_clk_enable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_clk_disable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_layer_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;idx,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*state,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);\r\n"
+ "&gt;&#32;+int&#32;mtk_ovlsys_adaptor_layer_check(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*mtk_state);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_register_vblank_cb(struct&#32;device&#32;*dev,&#32;void&#32;(*vblank_cb)(void&#32;*),\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;void&#32;*vblank_cb_data);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_unregister_vblank_cb(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_enable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_start(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_stop(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;mtk_ovlsys_adaptor_layer_nr(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*mtk_ovlsys_adaptor_dma_dev_get(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+const&#32;u32&#32;*mtk_ovlsys_adaptor_get_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+size_t&#32;mtk_ovlsys_adaptor_get_num_formats(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_rdma_bypass_shadow(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;int&#32;mtk_rdma_clk_enable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_rdma_clk_disable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c&#32;b/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c\r\n"
+ "&gt;&#32;new&#32;file&#32;mode&#32;100644\r\n"
+ "&gt;&#32;index&#32;000000000000..7bce2b7143cb\r\n"
+ "&gt;&#32;---&#32;/dev/null\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_ovlsys_adaptor.c\r\n"
+ "&gt;&#32;@@&#32;-0,0&#32;+1,758&#32;@@\r\n"
+ "&gt;&#32;+//&#32;SPDX-License-Identifier:&#32;GPL-2.0-only\r\n"
+ "&gt;&#32;+/*\r\n"
+ "&gt;&#32;+&#32;*&#32;Copyright&#32;(c)&#32;2021&#32;MediaTek&#32;Inc.\r\n"
+ "&gt;&#32;+&#32;*/\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+#include&#32;&lt;drm/drm_fourcc.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;drm/drm_of.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/clk.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/component.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/of_platform.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/of_device.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/of_address.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/platform_device.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/pm_runtime.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/reset.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-cmdq.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-mmsys.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/soc/mediatek/mtk-mutex.h&gt;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_disp_blender.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_disp_drv.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_crtc.h&quot;\r\n"
+ "\r\n"
+ "Alphabetic&#32;order.\r\n"
+ "\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_ddp_comp.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_drm_drv.h&quot;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_EXDMA&#32;=&#32;0,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_OUTPROC,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_NUM,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_id&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA0,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA1,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA2,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA3,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA4,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA5,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA6,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA7,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA8,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA9,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA10,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA11,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA12,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA13,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA14,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA15,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA16,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA17,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA18,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA19,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER0,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER1,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER2,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER3,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER4,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER5,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER6,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER7,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER8,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER9,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER10,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER11,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER12,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER13,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER14,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER15,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER16,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER17,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER18,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER19,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC0,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC1,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC2,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC3,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC4,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC5,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC6,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC7,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC8,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC9,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC10,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC11,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_ID_MAX\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;ovlsys_adaptor_comp_match&#32;{\r\n"
+ "&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type;\r\n"
+ "&gt;&#32;+int&#32;alias_id;\r\n"
+ "&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id;\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;{\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*ovl_adaptor_comp[OVLSYS_ADAPTOR_ID_MAX];\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*mmsys_dev;\r\n"
+ "&gt;&#32;+const&#32;unsigned&#32;int&#32;*path;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;path_size;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;layer_nr;\r\n"
+ "&gt;&#32;+bool&#32;children_bound;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;max_size;\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;char&#32;*&#32;const&#32;private_comp_stem[OVLSYS_ADAPTOR_TYPE_NUM]&#32;=&#32;{\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_EXDMA]=&#32;&quot;exdma&quot;,\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_BLENDER]=&#32;&quot;blender&quot;,\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_TYPE_OUTPROC]=&#32;&quot;outproc&quot;,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;ovlsys_adaptor_comp_match&#32;comp_matches[OVLSYS_ADAPTOR_ID_MAX]&#32;=&#32;{\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA0]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;0,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA1]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;1,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA2]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;2,&#32;DDP_COMPONENT_OVL0_EXDMA2},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA3]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;3,&#32;DDP_COMPONENT_OVL0_EXDMA3},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA4]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;4,&#32;DDP_COMPONENT_OVL0_EXDMA4},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA5]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;5,&#32;DDP_COMPONENT_OVL0_EXDMA5},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA6]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;6,&#32;DDP_COMPONENT_OVL0_EXDMA6},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA7]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;7,&#32;DDP_COMPONENT_OVL0_EXDMA7},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA8]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;8,&#32;DDP_COMPONENT_OVL0_EXDMA8},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA9]&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;9,&#32;DDP_COMPONENT_OVL0_EXDMA9},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA10]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;10,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "EXDMA10&#32;has&#32;no&#32;component&#32;id,&#32;so&#32;just&#32;drop&#32;OVLSYS_ADAPTOR_EXDMA10.\r\n"
+ "\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA11]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;11,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA12]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;12,&#32;DDP_COMPONENT_OVL1_EXDMA2},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA13]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;13,&#32;DDP_COMPONENT_OVL1_EXDMA3},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA14]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;14,&#32;DDP_COMPONENT_OVL1_EXDMA4},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA15]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;15,&#32;DDP_COMPONENT_OVL1_EXDMA5},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA16]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;16,&#32;DDP_COMPONENT_OVL1_EXDMA6},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA17]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;17,&#32;DDP_COMPONENT_OVL1_EXDMA7},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA18]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;18,&#32;DDP_COMPONENT_OVL1_EXDMA8},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_EXDMA19]&#32;&#32;&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;19,&#32;DDP_COMPONENT_OVL1_EXDMA9},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER0]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;0,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER1]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;1,&#32;DDP_COMPONENT_OVL0_BLENDER1},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER2]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;2,&#32;DDP_COMPONENT_OVL0_BLENDER2},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER3]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;3,&#32;DDP_COMPONENT_OVL0_BLENDER3},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER4]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;4,&#32;DDP_COMPONENT_OVL0_BLENDER4},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER5]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;5,&#32;DDP_COMPONENT_OVL0_BLENDER5},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER6]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;6,&#32;DDP_COMPONENT_OVL0_BLENDER6},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER7]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;7,&#32;DDP_COMPONENT_OVL0_BLENDER7},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER8]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;8,&#32;DDP_COMPONENT_OVL0_BLENDER8},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER9]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;9,&#32;DDP_COMPONENT_OVL0_BLENDER9},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER10]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;10,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER11]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;11,&#32;DDP_COMPONENT_OVL1_BLENDER1},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER12]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;12,&#32;DDP_COMPONENT_OVL1_BLENDER2},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER13]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;13,&#32;DDP_COMPONENT_OVL1_BLENDER3},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER14]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;14,&#32;DDP_COMPONENT_OVL1_BLENDER4},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER15]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;15,&#32;DDP_COMPONENT_OVL1_BLENDER5},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER16]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;16,&#32;DDP_COMPONENT_OVL1_BLENDER6},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER17]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;17,&#32;DDP_COMPONENT_OVL1_BLENDER7},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER18]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;18,&#32;DDP_COMPONENT_OVL1_BLENDER8},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_BLENDER19]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;19,&#32;DDP_COMPONENT_OVL1_BLENDER9},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC0]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;0,&#32;DDP_COMPONENT_OVL0_OUTPROC0},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC1]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;1,&#32;DDP_COMPONENT_OVL0_OUTPROC1},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC2]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;2,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC3]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;3,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC4]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;4,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC5]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;5,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC6]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;6,&#32;DDP_COMPONENT_OVL1_OUTPROC0},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC7]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;7,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC8]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;8,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC9]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;9,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC10]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;10,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "&gt;&#32;+[OVLSYS_ADAPTOR_OUTPROC11]&#32;=&#32;{&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC,&#32;11,&#32;DDP_COMPONENT_ID_MAX},\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_main[]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA2,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER1,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA3,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER2,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA4,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER3,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA5,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER4,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC0,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_ext[]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA6,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER5,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA7,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER6,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA8,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER7,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA9,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER8,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC1,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ovl_third[]&#32;=&#32;{\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA12,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER11,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA13,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER12,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA14,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER13,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_EXDMA15,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_BLENDER14,\r\n"
+ "&gt;&#32;+OVLSYS_ADAPTOR_OUTPROC6,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;get_type(enum&#32;mtk_ovlsys_adaptor_comp_id&#32;id)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+return&#32;comp_matches[id].type;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;enum&#32;mtk_ddp_comp_id&#32;get_ddp_comp_id(enum&#32;mtk_ovlsys_adaptor_comp_id&#32;id)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+return&#32;comp_matches[id].comp_id;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;struct&#32;device&#32;*get_comp_by_type_idx(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+int&#32;count&#32;=&#32;0;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;type)&#32;{\r\n"
+ "&gt;&#32;+if&#32;(count&#32;==&#32;idx)\r\n"
+ "&gt;&#32;+return&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]];\r\n"
+ "&gt;&#32;+count++;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+return&#32;NULL;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_layer_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;idx,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*state,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_plane_pending_state&#32;*pending&#32;=&#32;&amp;state-&gt;pending;\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*exdma;\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*blender;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;align_width&#32;=&#32;0;\r\n"
+ "&gt;&#32;+const&#32;struct&#32;drm_format_info&#32;*fmt_info&#32;=&#32;drm_format_info(pending-&gt;format);\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;%s+&#32;idx:%d,&#32;enable:%d,&#32;fmt:0x%x&#92;n&quot;,&#32;__func__,&#32;idx,\r\n"
+ "&gt;&#32;+pending-&gt;enable,&#32;pending-&gt;format);\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;addr&#32;0x%pad,&#32;fb&#32;w:%d,&#32;{%d,%d,%d,%d}&#92;n&quot;,\r\n"
+ "&gt;&#32;+&amp;pending-&gt;addr,&#32;(pending-&gt;pitch&#32;/&#32;fmt_info-&gt;cpp[0]),\r\n"
+ "&gt;&#32;+pending-&gt;x,&#32;pending-&gt;y,&#32;pending-&gt;width,&#32;pending-&gt;height);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+exdma&#32;=&#32;get_comp_by_type_idx(dev,&#32;OVLSYS_ADAPTOR_TYPE_EXDMA,&#32;idx);\r\n"
+ "&gt;&#32;+blender&#32;=&#32;get_comp_by_type_idx(dev,&#32;OVLSYS_ADAPTOR_TYPE_BLENDER,&#32;idx);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+/*&#32;OVLSYS&#32;is&#32;in&#32;1T2P&#32;domain,&#32;width&#32;needs&#32;to&#32;be&#32;2&#32;pixels&#32;align&#32;*/\r\n"
+ "&gt;&#32;+align_width&#32;=&#32;ALIGN_DOWN(pending-&gt;width,&#32;2);\r\n"
+ "\r\n"
+ "align_width&#32;is&#32;useless,&#32;so&#32;drop&#32;it.\r\n"
+ "\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!pending-&gt;enable&#32;||&#32;pending-&gt;height&#32;==&#32;0&#32;||&#32;align_width&#32;==&#32;0&#32;||\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;pending-&gt;x&#32;&gt;&#32;priv-&gt;max_size&#32;||&#32;pending-&gt;y&#32;&gt;&#32;priv-&gt;max_size)&#32;{\r\n"
+ "&gt;&#32;+pending-&gt;enable&#32;=&#32;false;\r\n"
+ "&gt;&#32;+mtk_disp_exdma_stop(exdma,&#32;cmdq_pkt);\r\n"
+ "&gt;&#32;+mtk_disp_blender_layer_config(blender,&#32;state,&#32;cmdq_pkt);\r\n"
+ "&gt;&#32;+return;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_exdma_config(exdma,&#32;state,&#32;cmdq_pkt);\r\n"
+ "\r\n"
+ "mtk_disp_exdma_config()&#32;does&#32;something&#32;like&#32;mtk_ovl_layer_config(),&#32;so&#32;I&#32;would&#32;like&#32;to&#32;rename&#32;it&#32;to&#32;mtk_disp_exdma_layer_config().\r\n"
+ "\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_blender_layer_config(blender,&#32;state,&#32;cmdq_pkt);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_exdma_start(exdma,&#32;cmdq_pkt);\r\n"
+ "\r\n"
+ "Why&#32;call&#32;start&#32;in&#32;layer&#32;config&#63;\r\n"
+ "start&#32;should&#32;be&#32;called&#32;in&#32;start.\r\n"
+ "\r\n"
+ "&gt;&#32;+mtk_disp_blender_start(blender,&#32;cmdq_pkt);\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+int&#32;blender_idx&#32;=&#32;0;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+enum&#32;mtk_disp_blender_layer&#32;blender;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)&#32;{\r\n"
+ "&gt;&#32;+blender_idx++;\r\n"
+ "&gt;&#32;+if&#32;(priv-&gt;layer_nr&#32;==&#32;1)\r\n"
+ "&gt;&#32;+blender&#32;=&#32;SINGLE_BLENDER;\r\n"
+ "&gt;&#32;+else&#32;if&#32;(blender_idx&#32;==&#32;1)\r\n"
+ "&gt;&#32;+blender&#32;=&#32;FIRST_BLENDER;\r\n"
+ "&gt;&#32;+else&#32;if&#32;(blender_idx&#32;==&#32;priv-&gt;layer_nr)\r\n"
+ "&gt;&#32;+blender&#32;=&#32;LAST_BLENDER;\r\n"
+ "&gt;&#32;+else\r\n"
+ "&gt;&#32;+blender&#32;=&#32;OTHERS;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_blender_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,\r\n"
+ "&gt;&#32;+vrefresh,&#32;bpc,&#32;blender,&#32;cmdq_pkt);\r\n"
+ "\r\n"
+ "mtk_disp_blender_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,\r\n"
+ "vrefresh,&#32;bpc,&#32;blender_idx&#32;==&#32;1,&#32;blender_idx&#32;==&#32;priv-&gt;layer_nr,&#32;cmdq_pkt);\r\n"
+ "\r\n"
+ "&gt;&#32;+}&#32;else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_OUTPROC)&#32;{\r\n"
+ "&gt;&#32;+mtk_disp_outproc_config(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;w,&#32;h,\r\n"
+ "&gt;&#32;+vrefresh,&#32;bpc,&#32;cmdq_pkt);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+int&#32;mtk_ovlsys_adaptor_layer_check(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;unsigned&#32;int&#32;idx,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;struct&#32;mtk_plane_state&#32;*mtk_state)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;drm_plane_state&#32;*state&#32;=&#32;&amp;mtk_state-&gt;base;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+/*&#32;Check&#32;if&#32;any&#32;unsupported&#32;rotation&#32;is&#32;set&#32;*/\r\n"
+ "&gt;&#32;+if&#32;(state-&gt;rotation&#32;&amp;&#32;&#126;DRM_MODE_ROTATE_0)\r\n"
+ "&gt;&#32;+return&#32;-EINVAL;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_start(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)\r\n"
+ "&gt;&#32;+mtk_disp_exdma_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);\r\n"
+ "\r\n"
+ "The&#32;start&#32;never&#32;use&#32;cmdq,&#32;so&#32;remove&#32;the&#32;cmdq&#32;parameter.\r\n"
+ "\r\n"
+ "&gt;&#32;+else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)\r\n"
+ "&gt;&#32;+mtk_disp_blender_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+else\r\n"
+ "&gt;&#32;+mtk_disp_outproc_start(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_stop(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)\r\n"
+ "&gt;&#32;+mtk_disp_exdma_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+else&#32;if&#32;(get_type(priv-&gt;path[i])&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)\r\n"
+ "&gt;&#32;+mtk_disp_blender_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]],&#32;NULL);\r\n"
+ "\r\n"
+ "Ditto.\r\n"
+ "\r\n"
+ "&gt;&#32;+else\r\n"
+ "&gt;&#32;+mtk_disp_outproc_stop(priv-&gt;ovl_adaptor_comp[priv-&gt;path[i]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+int&#32;mtk_ovlsys_adaptor_clk_enable(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*comp;\r\n"
+ "&gt;&#32;+int&#32;ret;\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!comp)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(get_type(i)&#32;!=&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ret&#32;=&#32;pm_runtime_get_sync(comp);\r\n"
+ "\r\n"
+ "Refer&#32;to&#32;mtk_ovl_adaptor_power_on().\r\n"
+ "This&#32;should&#32;be&#32;done&#32;in&#32;power_on()&#32;callback&#32;function.\r\n"
+ "\r\n"
+ "&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;enable&#32;power&#32;domain&#32;%d,&#32;err&#32;%d&#92;n&quot;,&#32;i,&#32;ret);\r\n"
+ "&gt;&#32;+goto&#32;pwr_err;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!comp)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)\r\n"
+ "&gt;&#32;+ret&#32;=&#32;mtk_disp_exdma_clk_enable(comp);\r\n"
+ "&gt;&#32;+else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)\r\n"
+ "&gt;&#32;+ret&#32;=&#32;mtk_disp_blender_clk_enable(comp);\r\n"
+ "&gt;&#32;+else\r\n"
+ "&gt;&#32;+ret&#32;=&#32;mtk_disp_outproc_clk_enable(comp);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(ret)&#32;{\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;enable&#32;clock&#32;%d,&#32;err&#32;%d&#92;n&quot;,&#32;i,&#32;ret);\r\n"
+ "&gt;&#32;+goto&#32;clk_err;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+clk_err:\r\n"
+ "&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{\r\n"
+ "&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];\r\n"
+ "&gt;&#32;+if&#32;(!comp)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)\r\n"
+ "&gt;&#32;+mtk_disp_exdma_clk_disable(comp);\r\n"
+ "&gt;&#32;+else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)\r\n"
+ "&gt;&#32;+mtk_disp_blender_clk_disable(comp);\r\n"
+ "&gt;&#32;+else\r\n"
+ "&gt;&#32;+mtk_disp_outproc_clk_disable(comp);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+i&#32;=&#32;OVLSYS_ADAPTOR_BLENDER0;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+pwr_err:\r\n"
+ "&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{\r\n"
+ "&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];\r\n"
+ "&gt;&#32;+if&#32;(!comp)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+pm_runtime_put(priv-&gt;ovl_adaptor_comp[i]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_clk_disable(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*comp;\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;OVLSYS_ADAPTOR_ID_MAX;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;+comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[i];\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!comp)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_EXDMA)&#32;{\r\n"
+ "&gt;&#32;+mtk_disp_exdma_clk_disable(comp);\r\n"
+ "&gt;&#32;+pm_runtime_put(comp);\r\n"
+ "&gt;&#32;+}&#32;else&#32;if&#32;(get_type(i)&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)&#32;{\r\n"
+ "&gt;&#32;+mtk_disp_blender_clk_disable(comp);\r\n"
+ "&gt;&#32;+}&#32;else&#32;{\r\n"
+ "&gt;&#32;+mtk_disp_outproc_clk_disable(comp);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;mtk_ovlsys_adaptor_layer_nr(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;priv-&gt;layer_nr;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*mtk_ovlsys_adaptor_dma_dev_get(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]];\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_register_vblank_cb(struct&#32;device&#32;*dev,&#32;void&#32;(*vblank_cb)(void&#32;*),\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;void&#32;*vblank_cb_data)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_outproc_register_vblank_cb(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]],\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;vblank_cb,&#32;vblank_cb_data);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_unregister_vblank_cb(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*comp&#32;=&#32;priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]];\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!priv-&gt;children_bound)\r\n"
+ "\r\n"
+ "In&#32;ovl&#32;adaptor,&#32;it&#32;does&#32;not&#32;check&#32;this.&#32;So&#32;remove&#32;this&#32;checking.\r\n"
+ "\r\n"
+ "&gt;&#32;+return;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_outproc_unregister_vblank_cb(comp);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_enable_vblank(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_outproc_enable_vblank(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disable_vblank(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_disp_outproc_disable_vblank(priv-&gt;ovl_adaptor_comp[priv-&gt;path[priv-&gt;path_size&#32;-&#32;1]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+const&#32;u32&#32;*mtk_ovlsys_adaptor_get_formats(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;mtk_disp_exdma_get_formats(priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+size_t&#32;mtk_ovlsys_adaptor_get_num_formats(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;mtk_disp_exdma_get_num_formats(priv-&gt;ovl_adaptor_comp[priv-&gt;path[0]]);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_add_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)\r\n"
+ "&gt;&#32;+mtk_mutex_add_comp(mutex,&#32;get_ddp_comp_id(priv-&gt;path[i]));\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_remove_comp(struct&#32;device&#32;*dev,&#32;struct&#32;mtk_mutex&#32;*mutex)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)\r\n"
+ "&gt;&#32;+mtk_mutex_remove_comp(mutex,&#32;get_ddp_comp_id(priv-&gt;path[i]));\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_connect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,&#32;unsigned&#32;int&#32;next)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size&#32;-&#32;1;&#32;i++)\r\n"
+ "&gt;&#32;+mtk_mmsys_ddp_connect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;get_ddp_comp_id(priv-&gt;path[i&#32;+&#32;1]));\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_mmsys_ddp_connect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),&#32;next);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_ovlsys_adaptor_disconnect(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*mmsys_dev,&#32;unsigned&#32;int&#32;next)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size&#32;-&#32;1;&#32;i++)\r\n"
+ "&gt;&#32;+mtk_mmsys_ddp_disconnect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),\r\n"
+ "&gt;&#32;+&#32;get_ddp_comp_id(priv-&gt;path[i&#32;+&#32;1]));\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_mmsys_ddp_disconnect(mmsys_dev,&#32;get_ddp_comp_id(priv-&gt;path[i]),&#32;next);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;ovlsys_adaptor_comp_get_id(struct&#32;device&#32;*dev,&#32;struct&#32;device_node&#32;*node,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;enum&#32;mtk_ddp_comp_id&#32;*comp_id)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+int&#32;alias_id&#32;=&#32;of_alias_get_id(node,&#32;private_comp_stem[type]);\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;ARRAY_SIZE(comp_matches);&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(comp_matches[i].type&#32;==&#32;type&#32;&amp;&amp;\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;comp_matches[i].alias_id&#32;==&#32;alias_id)&#32;{\r\n"
+ "&gt;&#32;+*comp_id&#32;=&#32;comp_matches[i].comp_id;\r\n"
+ "&gt;&#32;+return&#32;i;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+dev_warn(dev,&#32;&quot;Failed&#32;to&#32;get&#32;id.&#32;type:&#32;%d,&#32;alias:&#32;%d&#92;n&quot;,&#32;type,&#32;alias_id);\r\n"
+ "&gt;&#32;+return&#32;-EINVAL;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;of_device_id&#32;mtk_ovlsys_adaptor_comp_dt_ids[]&#32;=&#32;{\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-exdma&quot;,\r\n"
+ "&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_EXDMA,\r\n"
+ "&gt;&#32;+},&#32;{\r\n"
+ "&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-blender&quot;,\r\n"
+ "&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_BLENDER,\r\n"
+ "&gt;&#32;+},&#32;{\r\n"
+ "&gt;&#32;+.compatible&#32;=&#32;&quot;mediatek,mt8196-outproc&quot;,\r\n"
+ "&gt;&#32;+.data&#32;=&#32;(void&#32;*)OVLSYS_ADAPTOR_TYPE_OUTPROC,\r\n"
+ "&gt;&#32;+},\r\n"
+ "&gt;&#32;+{},\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;ovlsys_adaptor_comp_init(struct&#32;device&#32;*dev,&#32;struct&#32;component_match&#32;**match)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+struct&#32;device_node&#32;*node,&#32;*parent;\r\n"
+ "&gt;&#32;+struct&#32;platform_device&#32;*comp_pdev;\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+parent&#32;=&#32;dev-&gt;parent-&gt;parent-&gt;of_node-&gt;parent;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for_each_child_of_node(parent,&#32;node)&#32;{\r\n"
+ "&gt;&#32;+const&#32;struct&#32;of_device_id&#32;*of_id;\r\n"
+ "&gt;&#32;+enum&#32;mtk_ovlsys_adaptor_comp_type&#32;type;\r\n"
+ "&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id;\r\n"
+ "&gt;&#32;+int&#32;id;\r\n"
+ "&gt;&#32;+bool&#32;found&#32;=&#32;false;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+of_id&#32;=&#32;of_match_node(mtk_ovlsys_adaptor_comp_dt_ids,&#32;node);\r\n"
+ "&gt;&#32;+if&#32;(!of_id)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!of_device_is_available(node))&#32;{\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;Skipping&#32;disabled&#32;component&#32;%pOF&#92;n&quot;,\r\n"
+ "&gt;&#32;+node);\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+type&#32;=&#32;(enum&#32;mtk_ovlsys_adaptor_comp_type)(uintptr_t)of_id-&gt;data;\r\n"
+ "&gt;&#32;+id&#32;=&#32;ovlsys_adaptor_comp_get_id(dev,&#32;node,&#32;type,&#32;&amp;comp_id);\r\n"
+ "&gt;&#32;+if&#32;(id&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;+dev_warn(dev,&#32;&quot;Skipping&#32;unknown&#32;component&#32;%pOF&#92;n&quot;,\r\n"
+ "&gt;&#32;+&#32;node);\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(priv-&gt;path[i]&#32;==&#32;id)\r\n"
+ "&gt;&#32;+found&#32;=&#32;true;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!found)\r\n"
+ "&gt;&#32;+continue;\r\n"
+ "\r\n"
+ "ovl&#32;adaptor&#32;does&#32;not&#32;check&#32;this,&#32;why&#32;ovlsys&#32;need&#32;this&#63;\r\n"
+ "If&#32;this&#32;is&#32;removed,&#32;this&#32;function&#32;is&#32;similar&#32;to&#32;the&#32;one&#32;in&#32;ovl&#32;adaptor,\r\n"
+ "would&#32;you&#32;try&#32;to&#32;rewrite&#32;this&#32;function&#32;to&#32;be&#32;almost&#32;the&#32;same&#32;with&#32;the&#32;one&#32;in&#32;ovl&#32;adator&#63;\r\n"
+ "Not&#32;merging&#32;it,&#32;just&#32;implement&#32;almost&#32;the&#32;same.\r\n"
+ "\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+comp_pdev&#32;=&#32;of_find_device_by_node(node);\r\n"
+ "&gt;&#32;+if&#32;(!comp_pdev)\r\n"
+ "&gt;&#32;+return&#32;-EPROBE_DEFER;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;ovl_adaptor_comp[id]&#32;=&#32;&amp;comp_pdev-&gt;dev;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+drm_of_component_match_add(dev,&#32;match,&#32;component_compare_of,&#32;node);\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;Adding&#32;component&#32;match&#32;for&#32;%pOF&#92;n&quot;,&#32;node);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!*match)&#32;{\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;No&#32;match&#32;device&#32;for&#32;ovlsys_adaptor&#92;n&quot;);\r\n"
+ "&gt;&#32;+return&#32;-ENODEV;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_comp_bind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;void&#32;*data)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!priv-&gt;children_bound)\r\n"
+ "&gt;&#32;+return&#32;-EPROBE_DEFER;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_comp_unbind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,\r\n"
+ "&gt;&#32;+void&#32;*data)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;component_ops&#32;mtk_disp_ovlsys_adaptor_comp_ops&#32;=&#32;{\r\n"
+ "&gt;&#32;+.bind=&#32;mtk_disp_ovlsys_adaptor_comp_bind,\r\n"
+ "&gt;&#32;+.unbind&#32;=&#32;mtk_disp_ovlsys_adaptor_comp_unbind,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_master_bind(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+int&#32;ret,&#32;i;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;layer_nr&#32;=&#32;0;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ret&#32;=&#32;component_bind_all(dev,&#32;priv-&gt;mmsys_dev);\r\n"
+ "&gt;&#32;+if&#32;(ret)\r\n"
+ "&gt;&#32;+return&#32;dev_err_probe(dev,&#32;ret,&#32;&quot;component_bind_all&#32;failed!&#92;n&quot;);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;children_bound&#32;=&#32;true;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;priv-&gt;path_size;&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(comp_matches[priv-&gt;path[i]].type&#32;==&#32;OVLSYS_ADAPTOR_TYPE_BLENDER)\r\n"
+ "&gt;&#32;+layer_nr++;\r\n"
+ "&gt;&#32;+priv-&gt;layer_nr&#32;=&#32;layer_nr;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_master_unbind(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;children_bound&#32;=&#32;false;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;component_master_ops&#32;mtk_disp_ovlsys_adaptor_master_ops&#32;=&#32;{\r\n"
+ "&gt;&#32;+.bind=&#32;mtk_disp_ovlsys_adaptor_master_bind,\r\n"
+ "&gt;&#32;+.unbind=&#32;mtk_disp_ovlsys_adaptor_master_unbind,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;mtk_disp_ovlsys_adaptor&#32;mt8196_ovlsys_adaptor_driver_data&#32;=&#32;{\r\n"
+ "&gt;&#32;+.max_size&#32;=&#32;8191,\r\n"
+ "\r\n"
+ "This&#32;is&#32;the&#32;first&#32;SoC&#32;has&#32;ovlsys,&#32;so&#32;it&#39;s&#32;not&#32;necessary&#32;to&#32;has&#32;driver&#32;data.\r\n"
+ "After&#32;other&#32;SoC&#32;ovlsys&#32;is&#32;added,&#32;then&#32;consider&#32;to&#32;add&#32;driver&#32;data.\r\n"
+ "So,\r\n"
+ "\r\n"
+ "#define&#32;OVLSYS_MAX_SIZE&#32;8191\r\n"
+ "\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_disp_ovlsys_adaptor_probe(struct&#32;platform_device&#32;*pdev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_ovlsys_adaptor&#32;*priv;\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*dev&#32;=&#32;&amp;pdev-&gt;dev;\r\n"
+ "&gt;&#32;+struct&#32;component_match&#32;*match&#32;=&#32;NULL;\r\n"
+ "&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;*ovlsys_priv;\r\n"
+ "&gt;&#32;+int&#32;ret;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv&#32;=&#32;devm_kzalloc(dev,&#32;sizeof(*priv),&#32;GFP_KERNEL);\r\n"
+ "&gt;&#32;+if&#32;(!priv)\r\n"
+ "&gt;&#32;+return&#32;-ENOMEM;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+platform_set_drvdata(pdev,&#32;priv);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ovlsys_priv&#32;=&#32;pdev-&gt;dev.platform_data;\r\n"
+ "&gt;&#32;+priv-&gt;mmsys_dev&#32;=&#32;ovlsys_priv-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;+priv-&gt;max_size&#32;=&#32;mt8196_ovlsys_adaptor_driver_data.max_size;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(ovlsys_priv-&gt;use_path&#32;==&#32;0)&#32;{\r\n"
+ "&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_main;\r\n"
+ "&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_main);\r\n"
+ "&gt;&#32;+}&#32;else&#32;if&#32;(ovlsys_priv-&gt;use_path&#32;==&#32;1)&#32;{\r\n"
+ "&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_ext;\r\n"
+ "&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_ext);\r\n"
+ "&gt;&#32;+}&#32;else&#32;{\r\n"
+ "&gt;&#32;+priv-&gt;path&#32;=&#32;mt8196_mtk_ovl_third;\r\n"
+ "&gt;&#32;+priv-&gt;path_size&#32;=&#32;ARRAY_SIZE(mt8196_mtk_ovl_third);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ret&#32;=&#32;ovlsys_adaptor_comp_init(dev,&#32;&amp;match);\r\n"
+ "&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)\r\n"
+ "&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+component_master_add_with_match(dev,&#32;&amp;mtk_disp_ovlsys_adaptor_master_ops,&#32;match);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+pm_runtime_enable(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ret&#32;=&#32;component_add(dev,&#32;&amp;mtk_disp_ovlsys_adaptor_comp_ops);\r\n"
+ "&gt;&#32;+if&#32;(ret&#32;!=&#32;0)&#32;{\r\n"
+ "&gt;&#32;+pm_runtime_disable(dev);\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;add&#32;component:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;void&#32;mtk_disp_ovlsys_adaptor_remove(struct&#32;platform_device&#32;*pdev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+component_master_del(&amp;pdev-&gt;dev,&#32;&amp;mtk_disp_ovlsys_adaptor_master_ops);\r\n"
+ "&gt;&#32;+pm_runtime_disable(&amp;pdev-&gt;dev);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;platform_driver&#32;mtk_disp_ovlsys_adaptor_driver&#32;=&#32;{\r\n"
+ "&gt;&#32;+.probe=&#32;mtk_disp_ovlsys_adaptor_probe,\r\n"
+ "&gt;&#32;+.remove=&#32;mtk_disp_ovlsys_adaptor_remove,\r\n"
+ "&gt;&#32;+.driver=&#32;{\r\n"
+ "&gt;&#32;+.name=&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,\r\n"
+ "&gt;&#32;+.owner=&#32;THIS_MODULE,\r\n"
+ "&gt;&#32;+},\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+MODULE_AUTHOR(&quot;Nancy&#32;Lin&#32;&lt;nancy.lin@mediatek.com&gt;&quot;);\r\n"
+ "&gt;&#32;+MODULE_DESCRIPTION(&quot;MediaTek&#32;Ovlsys&#32;Adaptor&#32;Driver&quot;);\r\n"
+ "&gt;&#32;+MODULE_LICENSE(&quot;GPL&quot;);\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;index&#32;27190057bd8e..7526bc38bcc7&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;@@&#32;-448,6&#32;+448,28&#32;@@&#32;static&#32;bool&#32;mtk_drm_find_mmsys_comp(struct&#32;mtk_drm_private&#32;*private,&#32;int&#32;comp_id\r\n"
+ "&gt;&#32;&#32;return&#32;false;\r\n"
+ "&gt;&#32;&#32;}\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_drm_mmsys_comp_in_path(struct&#32;mtk_drm_private&#32;*private,&#32;int&#32;comp_id)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+const&#32;struct&#32;mtk_mmsys_driver_data&#32;*drv_data&#32;=&#32;private-&gt;data;\r\n"
+ "&gt;&#32;+int&#32;i;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;main_path)\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;main_len;&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;main_path[i]&#32;==&#32;comp_id)\r\n"
+ "&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;ext_path)\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;ext_len;&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;ext_path[i]&#32;==&#32;comp_id)\r\n"
+ "&gt;&#32;+return&#32;1;\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;third_path)\r\n"
+ "&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;drv_data-&gt;third_len;&#32;i++)\r\n"
+ "&gt;&#32;+if&#32;(drv_data-&gt;third_path[i]&#32;==&#32;comp_id)\r\n"
+ "&gt;&#32;+return&#32;2;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;-1;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;static&#32;int&#32;mtk_drm_kms_init(struct&#32;drm_device&#32;*drm)\r\n"
+ "&gt;&#32;&#32;{\r\n"
+ "&gt;&#32;&#32;struct&#32;mtk_drm_private&#32;*private&#32;=&#32;drm-&gt;dev_private;\r\n"
+ "&gt;&#32;@@&#32;-463,8&#32;+485,8&#32;@@&#32;static&#32;int&#32;mtk_drm_kms_init(struct&#32;drm_device&#32;*drm)\r\n"
+ "&gt;&#32;&#32;if&#32;(ret)\r\n"
+ "&gt;&#32;&#32;goto&#32;put_mutex_dev;\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;-drm-&gt;mode_config.min_width&#32;=&#32;64;\r\n"
+ "&gt;&#32;-drm-&gt;mode_config.min_height&#32;=&#32;64;\r\n"
+ "&gt;&#32;+drm-&gt;mode_config.min_width&#32;=&#32;1;\r\n"
+ "&gt;&#32;+drm-&gt;mode_config.min_height&#32;=&#32;1;\r\n"
+ "\r\n"
+ "You&#32;change&#32;other&#32;SoC&#32;setting.\r\n"
+ "If&#32;8196&#32;has&#32;different&#32;setting,&#32;query&#32;min&#32;width/height&#32;from&#32;ddp&#32;component&#32;and&#32;separate&#32;this&#32;to&#32;another&#32;patch.\r\n"
+ "\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;&#32;/*\r\n"
+ "&gt;&#32;&#32;&#32;*&#32;set&#32;max&#32;width&#32;and&#32;height&#32;as&#32;default&#32;value(4096x4096).\r\n"
+ "&gt;&#32;@@&#32;-1107,6&#32;+1129,40&#32;@@&#32;static&#32;int&#32;mtk_drm_probe(struct&#32;platform_device&#32;*pdev)\r\n"
+ "&gt;&#32;&#32;component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);\r\n"
+ "&gt;&#32;&#32;}\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+if&#32;(mtk_drm_find_mmsys_comp(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0))&#32;{\r\n"
+ "&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;ovlsys_priv;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ovlsys_priv.mmsys_dev&#32;=&#32;private-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;+ovlsys_priv.use_path&#32;=\r\n"
+ "&gt;&#32;+mtk_drm_mmsys_comp_in_path(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0);\r\n"
+ "&gt;&#32;+ovl_adaptor&#32;=\r\n"
+ "&gt;&#32;+platform_device_register_data(dev,&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;PLATFORM_DEVID_AUTO,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;(void&#32;*)&amp;ovlsys_priv,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;sizeof(struct&#32;mtk_drm_ovlsys_private));\r\n"
+ "&gt;&#32;+private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0].dev&#32;=&#32;&amp;ovl_adaptor-&gt;dev;\r\n"
+ "&gt;&#32;+mtk_ddp_comp_init(NULL,&#32;&amp;private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0],\r\n"
+ "&gt;&#32;+&#32;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0);\r\n"
+ "&gt;&#32;+component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(mtk_drm_find_mmsys_comp(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1))&#32;{\r\n"
+ "&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;ovlsys_priv;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ovlsys_priv.mmsys_dev&#32;=&#32;private-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;+ovlsys_priv.use_path&#32;=\r\n"
+ "&gt;&#32;+mtk_drm_mmsys_comp_in_path(private,&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1);\r\n"
+ "&gt;&#32;+ovl_adaptor&#32;=\r\n"
+ "&gt;&#32;+platform_device_register_data(dev,&#32;&quot;mediatek-disp-ovlsys-adaptor&quot;,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;PLATFORM_DEVID_AUTO,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;(void&#32;*)&amp;ovlsys_priv,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;sizeof(struct&#32;mtk_drm_ovlsys_private));\r\n"
+ "&gt;&#32;+private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1].dev&#32;=&#32;&amp;ovl_adaptor-&gt;dev;\r\n"
+ "&gt;&#32;+mtk_ddp_comp_init(NULL,&#32;&amp;private-&gt;ddp_comp[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1],\r\n"
+ "&gt;&#32;+&#32;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1);\r\n"
+ "&gt;&#32;+component_match_add(dev,&#32;&amp;match,&#32;compare_dev,&#32;&amp;ovl_adaptor-&gt;dev);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;/*&#32;Iterate&#32;over&#32;sibling&#32;DISP&#32;function&#32;blocks&#32;*/\r\n"
+ "&gt;&#32;&#32;for_each_child_of_node(phandle-&gt;parent,&#32;node)&#32;{\r\n"
+ "&gt;&#32;&#32;enum&#32;mtk_ddp_comp_type&#32;comp_type;\r\n"
+ "&gt;&#32;@@&#32;-1268,6&#32;+1324,7&#32;@@&#32;static&#32;struct&#32;platform_driver&#32;*&#32;const&#32;mtk_drm_drivers[]&#32;=&#32;{\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_outproc_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_ovl_adaptor_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_ovl_driver,\r\n"
+ "&gt;&#32;+&amp;mtk_disp_ovlsys_adaptor_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_rdma_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_dpi_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_drm_platform_driver,\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.h\r\n"
+ "&gt;&#32;index&#32;c4717c37b0f1..aa17e743a1d0&#32;100644\r\n"
+ "&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.h\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.h\r\n"
+ "&gt;&#32;@@&#32;-11,7&#32;+11,9&#32;@@\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;&#32;#define&#32;MAX_CONNECTOR2\r\n"
+ "&gt;&#32;&#32;#define&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;(DDP_COMPONENT_ID_MAX&#32;+&#32;1)\r\n"
+ "&gt;&#32;-#define&#32;DDP_COMPONENT_DRM_ID_MAX&#32;(DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;+&#32;1)\r\n"
+ "&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0&#32;(DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;+&#32;1)\r\n"
+ "&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;(DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0&#32;+&#32;1)\r\n"
+ "&gt;&#32;+#define&#32;DDP_COMPONENT_DRM_ID_MAX&#32;(DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;+&#32;1)\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;&#32;enum&#32;mtk_crtc_path&#32;{\r\n"
+ "&gt;&#32;&#32;CRTC_MAIN,\r\n"
+ "&gt;&#32;@@&#32;-69,6&#32;+71,12&#32;@@&#32;struct&#32;mtk_drm_private&#32;{\r\n"
+ "&gt;&#32;&#32;struct&#32;mtk_drm_private&#32;**all_drm_private;\r\n"
+ "&gt;&#32;&#32;};\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+struct&#32;mtk_drm_ovlsys_private&#32;{\r\n"
+ "\r\n"
+ "ovlsys&#32;has&#32;its&#32;own&#32;private&#32;data&#32;structure.\r\n"
+ "mtk_ovlsys_platform_data&#32;is&#32;better.\r\n"
+ "\r\n"
+ "Regards,\r\n"
+ "CK\r\n"
+ "\r\n"
+ "\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*mmsys_dev;\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*mutex_dev;\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;use_path;\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_aal_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_blender_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ccorr_driver;\r\n"
+ "&gt;&#32;@@&#32;-79,6&#32;+87,7&#32;@@&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_merge_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_outproc_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovl_adaptor_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovl_driver;\r\n"
+ "&gt;&#32;+extern&#32;struct&#32;platform_driver&#32;mtk_disp_ovlsys_adaptor_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_rdma_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_dpi_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_dsi_driver;\r\n"
+ "\r\n"
+ "\r\n"
+ "</pre>\r\n"
+ "</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice\r\n"
+ " ********************\r\n"
+ "The information contained in this e-mail message (including any \r\n"
+ "attachments) may be confidential, proprietary, privileged, or otherwise\r\n"
+ "exempt from disclosure under applicable laws. It is intended to be \r\n"
+ "conveyed only to the designated recipient(s). Any use, dissemination, \r\n"
+ "distribution, printing, retaining or copying of this e-mail (including its \r\n"
+ "attachments) by unintended recipient(s) is strictly prohibited and may \r\n"
+ "be unlawful. If you are not an intended recipient of this e-mail, or believe\r\n"
+ " \r\n"
+ "that you have received this e-mail in error, please notify the sender \r\n"
+ "immediately (by replying to this e-mail), delete any and all copies of \r\n"
+ "this e-mail (including any attachments) from your system, and do not\r\n"
+ "disclose the content of this e-mail to any other person. Thank you!\r\n"
+ </pre><!--}-->
 
-d1526ced8493853d14c9622c584e81132c4a710b3a74535ecd0874b5ef2dc8c1
+0ae66f1c2474df620a3d9b0fc54e50d5c8ad0b0c71f6c8c5020d199b35f4d869

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.