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

diff --git a/N1/2.bin b/N1/2.bin
new file mode 100644
index 0000000..812ffd6
--- /dev/null
+++ b/N1/2.bin
@@ -0,0 +1,438 @@
+<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;OUTPROC&#32;handles&#32;the&#32;post-stage&#32;of&#32;pixel&#32;processing&#32;in
+&gt;&#32;the&#32;overlapping&#32;procedure.OUTPROC&#32;manages&#32;pixels&#32;for
+&gt;&#32;gamma&#32;correction&#32;and&#32;ensures&#32;that&#32;pixel&#32;values&#32;are
+&gt;&#32;within&#32;the&#32;correct&#32;range.
+&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;1&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#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;14&#32;++
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.c&#32;|&#32;244&#32;++++++++++++++++++++
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.h&#32;|&#32;&#32;22&#32;++
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+
+&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+
+&gt;&#32;&#32;8&#32;files&#32;changed,&#32;285&#32;insertions(+)
+&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.c
+&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.h
+&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;a7b9ebe27f68..9546bc6b7b2e&#32;100644
+&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/Makefile
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/Makefile
+&gt;&#32;@@&#32;-10,6&#32;+10,7&#32;@@&#32;mediatek-drm-y&#32;:=&#32;mtk_crtc.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;&#32;mtk_disp_ovl.o&#32;&#92;
+&gt;&#32;+&#32;&#32;mtk_disp_outproc.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_ovl_adaptor.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_disp_rdma.o&#32;&#92;
+&gt;&#32;&#32;&#32;&#32;mtk_drm_drv.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;e65c6df987f2..cc780744f060&#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;-447,6&#32;+447,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_DSI]&#32;=&#32;&quot;dsi&quot;,
+&gt;&#32;&#32;[MTK_OVL_BLENDER]&#32;=&#32;&quot;blender&quot;,
+&gt;&#32;&#32;[MTK_OVL_EXDMA]&#32;=&#32;&quot;exdma&quot;,
+&gt;&#32;+[MTK_OVL_OUTPROC]&#32;=&#32;&quot;outproc&quot;,
+&gt;&#32;&#32;};
+&gt;&#32;&#32;
+&gt;&#32;&#32;struct&#32;mtk_ddp_comp_match&#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;075ba5683f93..b33d3289b8b6&#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;-45,6&#32;+45,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{
+&gt;&#32;&#32;MTK_DSI,
+&gt;&#32;&#32;MTK_OVL_BLENDER,
+&gt;&#32;&#32;MTK_OVL_EXDMA,
+&gt;&#32;+MTK_OVL_OUTPROC,
+&gt;&#32;&#32;MTK_DDP_COMP_TYPE_MAX,
+&gt;&#32;&#32;};
+&gt;&#32;&#32;
+&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;719191f05b27..44d2cbe919dc&#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;-64,6&#32;+64,20&#32;@@&#32;void&#32;mtk_dither_set_common(void&#32;__iomem&#32;*regs,&#32;struct&#32;cmdq_client_reg&#32;*cmdq_reg,
+&gt;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;unsigned&#32;int&#32;cfg,
+&gt;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;dither_en,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);
+&gt;&#32;&#32;
+&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev);
+&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);
+&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),
+&gt;&#32;+&#32;void&#32;*vblank_cb_data);
+&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+
+&gt;&#32;&#32;void&#32;mtk_dpi_start(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;void&#32;mtk_dpi_stop(struct&#32;device&#32;*dev);
+&gt;&#32;&#32;unsigned&#32;int&#32;mtk_dpi_encoder_index(struct&#32;device&#32;*dev);
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_outproc.c&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.c
+&gt;&#32;new&#32;file&#32;mode&#32;100644
+&gt;&#32;index&#32;000000000000..af473eb2fb77
+&gt;&#32;---&#32;/dev/null
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.c
+&gt;&#32;@@&#32;-0,0&#32;+1,244&#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_framebuffer.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_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/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;+
+&gt;&#32;+#include&#32;&quot;mtk_crtc.h&quot;
+&gt;&#32;+#include&#32;&quot;mtk_ddp_comp.h&quot;
+&gt;&#32;+#include&#32;&lt;linux/of.h&gt;
+&gt;&#32;+#include&#32;&quot;mtk_drm_drv.h&quot;
+&gt;&#32;+#include&#32;&quot;mtk_disp_outproc.h&quot;
+&gt;&#32;+
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_INTEN0x004
+&gt;&#32;+#define&#32;OVL_OUTPROC_FME_CPL_INTENBIT(1)
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_INTSTA0x008
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_DATAPATH_CON0x010
+&gt;&#32;+#define&#32;DATAPATH_CON_OUTPUT_CLAMPBIT(26)
+&gt;&#32;+
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_EN0x020
+&gt;&#32;+#define&#32;OVL_OUTPROC_OVL_ENBIT(0)
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_RST0x024
+&gt;&#32;+#define&#32;OVL_OUTPROC_RSTBIT(0)
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL0x028
+&gt;&#32;+#define&#32;OVL_OUTPROC_BYPASS_SHADOWBIT(2)
+&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_ROI_SIZE0x030
+&gt;&#32;+
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;{
+&gt;&#32;+void&#32;__iomem*regs;
+&gt;&#32;+struct&#32;clk*clk;
+&gt;&#32;+void(*vblank_cb)(void&#32;*data);
+&gt;&#32;+void*vblank_cb_data;
+&gt;&#32;+intirq;
+&gt;&#32;+struct&#32;cmdq_client_regcmdq_reg;
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),
+&gt;&#32;+&#32;void&#32;*vblank_cb_data)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+priv-&gt;vblank_cb&#32;=&#32;vblank_cb;
+&gt;&#32;+priv-&gt;vblank_cb_data&#32;=&#32;vblank_cb_data;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+priv-&gt;vblank_cb&#32;=&#32;NULL;
+&gt;&#32;+priv-&gt;vblank_cb_data&#32;=&#32;NULL;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+writel(OVL_OUTPROC_FME_CPL_INTEN,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTEN);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+writel(0x0,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTEN);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;irqreturn_t&#32;mtk_disp_outproc_irq_handler(int&#32;irq,&#32;void&#32;*dev_id)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_id;
+&gt;&#32;+
+&gt;&#32;+writel(0x0,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTSTA);
+&gt;&#32;+
+&gt;&#32;+if&#32;(!priv-&gt;vblank_cb)
+&gt;&#32;+return&#32;IRQ_NONE;
+&gt;&#32;+
+&gt;&#32;+priv-&gt;vblank_cb(priv-&gt;vblank_cb_data);
+&gt;&#32;+
+&gt;&#32;+return&#32;IRQ_HANDLED;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,
+&gt;&#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_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+unsigned&#32;int&#32;tmp;
+&gt;&#32;+
+&gt;&#32;+dev_dbg(dev,&#32;&quot;%s-w:%d,&#32;h:%d&#92;n&quot;,&#32;__func__,&#32;w,&#32;h);
+&gt;&#32;+
+&gt;&#32;+tmp&#32;=&#32;readl(priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL);
+&gt;&#32;+tmp&#32;=&#32;tmp&#32;|&#32;OVL_OUTPROC_BYPASS_SHADOW;
+&gt;&#32;+writel(tmp,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL);
+
+Move&#32;bypass&#32;shadow&#32;to&#32;mtk_disp_outproc_start().
+
+&gt;&#32;+
+&gt;&#32;+mtk_ddp_write_mask(cmdq_pkt,&#32;h&#32;&lt;&lt;&#32;16&#32;|&#32;w,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_ROI_SIZE,&#32;&#126;0);
+
+mtk_ddp_write();
+
+&gt;&#32;+mtk_ddp_write_mask(cmdq_pkt,&#32;DATAPATH_CON_OUTPUT_CLAMP,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_DATAPATH_CON,&#32;DATAPATH_CON_OUTPUT_CLAMP);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;OVL_OUTPROC_RST,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_RST,&#32;OVL_OUTPROC_RST);
+
+writel();
+
+&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_RST,&#32;OVL_OUTPROC_RST);
+
+Some&#32;hardware&#32;reset&#32;before&#32;start.
+Some&#32;hardware&#32;reset&#32;after&#32;stop.
+
+Could&#32;align&#32;this&#63;
+
+&gt;&#32;+mtk_ddp_write(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_INTSTA);
+&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;OVL_OUTPROC_OVL_EN,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_EN,&#32;OVL_OUTPROC_OVL_EN);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+mtk_ddp_write(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_INTEN);
+
+OVL&#32;driver&#32;does&#32;not&#32;disable&#32;interrupt&#32;when&#32;stop.
+Align&#32;this&#32;with&#32;OVL&#32;driver.
+
+&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,
+&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_EN,&#32;OVL_OUTPROC_OVL_EN);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+return&#32;clk_prepare_enable(priv-&gt;clk);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);
+&gt;&#32;+
+&gt;&#32;+clk_disable_unprepare(priv-&gt;clk);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;mtk_disp_outproc_bind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,
+&gt;&#32;+&#32;void&#32;*data)
+&gt;&#32;+{
+&gt;&#32;+return&#32;0;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;void&#32;mtk_disp_outproc_unbind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,&#32;void&#32;*data)
+&gt;&#32;+{
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;component_ops&#32;mtk_disp_outproc_component_ops&#32;=&#32;{
+&gt;&#32;+.bind=&#32;mtk_disp_outproc_bind,
+&gt;&#32;+.unbind&#32;=&#32;mtk_disp_outproc_unbind,
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+static&#32;int&#32;mtk_disp_outproc_probe(struct&#32;platform_device&#32;*pdev)
+&gt;&#32;+{
+&gt;&#32;+struct&#32;device&#32;*dev&#32;=&#32;&amp;pdev-&gt;dev;
+&gt;&#32;+struct&#32;resource&#32;*res;
+&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv;
+&gt;&#32;+int&#32;ret&#32;=&#32;0;
+&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;+res&#32;=&#32;platform_get_resource(pdev,&#32;IORESOURCE_MEM,&#32;0);
+&gt;&#32;+priv-&gt;regs&#32;=&#32;devm_ioremap_resource(dev,&#32;res);
+&gt;&#32;+if&#32;(IS_ERR(priv-&gt;regs))&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;failed&#32;to&#32;ioremap&#32;outproc&#92;n&quot;);
+&gt;&#32;+return&#32;PTR_ERR(priv-&gt;regs);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+priv-&gt;clk&#32;=&#32;devm_clk_get(dev,&#32;NULL);
+&gt;&#32;+if&#32;(IS_ERR(priv-&gt;clk))&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;failed&#32;to&#32;get&#32;outproc&#32;clk&#92;n&quot;);
+&gt;&#32;+return&#32;PTR_ERR(priv-&gt;clk);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)
+&gt;&#32;+ret&#32;=&#32;cmdq_dev_get_client_reg(dev,&#32;&amp;priv-&gt;cmdq_reg,&#32;0);
+&gt;&#32;+if&#32;(ret)
+&gt;&#32;+dev_dbg(dev,&#32;&quot;No&#32;mediatek,gce-client-reg&#92;n&quot;);
+&gt;&#32;+#endif
+&gt;&#32;+
+&gt;&#32;+if&#32;(of_property_read_u32_index(dev-&gt;of_node,&#32;&quot;interrupts&quot;,&#32;0,&#32;&amp;ret))&#32;{
+&gt;&#32;+dev_dbg(dev,&#32;&quot;interrupts&#32;not&#32;defined&#92;n&quot;);
+
+In&#32;binding&#32;document,&#32;interrupt&#32;is&#32;required.
+So&#32;return&#32;with&#32;error&#32;code.
+
+&gt;&#32;+}&#32;else&#32;{
+&gt;&#32;+priv-&gt;irq&#32;=&#32;platform_get_irq(pdev,&#32;0);
+&gt;&#32;+if&#32;(priv-&gt;irq&#32;&lt;&#32;0)
+&gt;&#32;+priv-&gt;irq&#32;=&#32;0;
+
+In&#32;binding&#32;document,&#32;interrupt&#32;is&#32;required.
+So&#32;return&#32;with&#32;error&#32;code.
+
+Regards,
+CK
+
+&gt;&#32;+
+&gt;&#32;+if&#32;(priv-&gt;irq)&#32;{
+&gt;&#32;+ret&#32;=&#32;devm_request_irq(dev,&#32;priv-&gt;irq,&#32;mtk_disp_outproc_irq_handler,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;IRQF_TRIGGER_NONE,&#32;dev_name(dev),&#32;priv);
+&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;request&#32;irq&#32;%d:&#32;%d&#92;n&quot;,&#32;priv-&gt;irq,&#32;ret);
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+platform_set_drvdata(pdev,&#32;priv);
+&gt;&#32;+
+&gt;&#32;+ret&#32;=&#32;component_add(dev,&#32;&amp;mtk_disp_outproc_component_ops);
+&gt;&#32;+if&#32;(ret)
+&gt;&#32;+dev_notice(dev,&#32;&quot;Failed&#32;to&#32;add&#32;component:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;+
+&gt;&#32;+return&#32;ret;
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;void&#32;mtk_disp_outproc_remove(struct&#32;platform_device&#32;*pdev)
+&gt;&#32;+{
+&gt;&#32;+component_del(&amp;pdev-&gt;dev,&#32;&amp;mtk_disp_outproc_component_ops);
+&gt;&#32;+}
+&gt;&#32;+
+&gt;&#32;+static&#32;const&#32;struct&#32;of_device_id&#32;mtk_disp_outproc_driver_dt_match[]&#32;=&#32;{
+&gt;&#32;+{&#32;.compatible&#32;=&#32;&quot;mediatek,mt8196-outproc&quot;},
+&gt;&#32;+{},
+&gt;&#32;+};
+&gt;&#32;+
+&gt;&#32;+MODULE_DEVICE_TABLE(of,&#32;mtk_disp_outproc_driver_dt_match);
+&gt;&#32;+
+&gt;&#32;+struct&#32;platform_driver&#32;mtk_disp_outproc_driver&#32;=&#32;{
+&gt;&#32;+.probe=&#32;mtk_disp_outproc_probe,
+&gt;&#32;+.remove=&#32;mtk_disp_outproc_remove,
+&gt;&#32;+.driver=&#32;{
+&gt;&#32;+.name=&#32;&quot;mediatek-disp-outproc&quot;,
+&gt;&#32;+.owner=&#32;THIS_MODULE,
+&gt;&#32;+.of_match_table&#32;=&#32;mtk_disp_outproc_driver_dt_match,
+&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;Output&#32;processing&#32;Driver&quot;);
+&gt;&#32;+MODULE_LICENSE(&quot;GPL&quot;);
+&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_outproc.h&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.h
+&gt;&#32;new&#32;file&#32;mode&#32;100644
+&gt;&#32;index&#32;000000000000..22ee5d845eae
+&gt;&#32;---&#32;/dev/null
+&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.h
+&gt;&#32;@@&#32;-0,0&#32;+1,22&#32;@@
+&gt;&#32;+/*&#32;SPDX-License-Identifier:&#32;GPL-2.0-only&#32;*/
+&gt;&#32;+/*
+&gt;&#32;+&#32;*&#32;Copyright&#32;(c)&#32;2021&#32;MediaTek&#32;Inc.
+&gt;&#32;+&#32;*/
+&gt;&#32;+
+&gt;&#32;+#ifndef&#32;__MTK_DISP_OUTPROC_H__
+&gt;&#32;+#define&#32;__MTK_DISP_OUTPROC_H__
+&gt;&#32;+
+&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev);
+&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;h,&#32;unsigned&#32;int&#32;vrefresh,
+&gt;&#32;+&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);
+&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,
+&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),
+&gt;&#32;+&#32;void&#32;*vblank_cb_data);
+&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev);
+&gt;&#32;+#endif
+&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;e4a0d9fe4e2d..27190057bd8e&#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;-1265,6&#32;+1265,7&#32;@@&#32;static&#32;struct&#32;platform_driver&#32;*&#32;const&#32;mtk_drm_drivers[]&#32;=&#32;{
+&gt;&#32;&#32;&amp;mtk_disp_exdma_driver,
+&gt;&#32;&#32;&amp;mtk_disp_gamma_driver,
+&gt;&#32;&#32;&amp;mtk_disp_merge_driver,
+&gt;&#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;&#32;&amp;mtk_disp_rdma_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;89178de1478f..c4717c37b0f1&#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;-76,6&#32;+76,7&#32;@@&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_color_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_exdma_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_gamma_driver;
+&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_merge_driver;
+&gt;&#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;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_rdma_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 aac2928..d8ed99f 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"
@@ -444,5 +444,445 @@
  ">  extern struct platform_driver mtk_disp_ovl_adaptor_driver;\n"
  ">  extern struct platform_driver mtk_disp_ovl_driver;\n"
  >  extern struct platform_driver mtk_disp_rdma_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;OUTPROC&#32;handles&#32;the&#32;post-stage&#32;of&#32;pixel&#32;processing&#32;in\r\n"
+ "&gt;&#32;the&#32;overlapping&#32;procedure.OUTPROC&#32;manages&#32;pixels&#32;for\r\n"
+ "&gt;&#32;gamma&#32;correction&#32;and&#32;ensures&#32;that&#32;pixel&#32;values&#32;are\r\n"
+ "&gt;&#32;within&#32;the&#32;correct&#32;range.\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;1&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#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;14&#32;++\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.c&#32;|&#32;244&#32;++++++++++++++++++++\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.h&#32;|&#32;&#32;22&#32;++\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+\r\n"
+ "&gt;&#32;&#32;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#32;&#32;&#32;&#32;&#32;&#32;|&#32;&#32;&#32;1&#32;+\r\n"
+ "&gt;&#32;&#32;8&#32;files&#32;changed,&#32;285&#32;insertions(+)\r\n"
+ "&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.c\r\n"
+ "&gt;&#32;&#32;create&#32;mode&#32;100644&#32;drivers/gpu/drm/mediatek/mtk_disp_outproc.h\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;a7b9ebe27f68..9546bc6b7b2e&#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;-10,6&#32;+10,7&#32;@@&#32;mediatek-drm-y&#32;:=&#32;mtk_crtc.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;&#32;mtk_disp_ovl.o&#32;&#92;\r\n"
+ "&gt;&#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;&#32;&#32;&#32;mtk_disp_rdma.o&#32;&#92;\r\n"
+ "&gt;&#32;&#32;&#32;&#32;mtk_drm_drv.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;e65c6df987f2..cc780744f060&#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;-447,6&#32;+447,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_DSI]&#32;=&#32;&quot;dsi&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_OVL_BLENDER]&#32;=&#32;&quot;blender&quot;,\r\n"
+ "&gt;&#32;&#32;[MTK_OVL_EXDMA]&#32;=&#32;&quot;exdma&quot;,\r\n"
+ "&gt;&#32;+[MTK_OVL_OUTPROC]&#32;=&#32;&quot;outproc&quot;,\r\n"
+ "&gt;&#32;&#32;};\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;&#32;struct&#32;mtk_ddp_comp_match&#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;075ba5683f93..b33d3289b8b6&#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;-45,6&#32;+45,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{\r\n"
+ "&gt;&#32;&#32;MTK_DSI,\r\n"
+ "&gt;&#32;&#32;MTK_OVL_BLENDER,\r\n"
+ "&gt;&#32;&#32;MTK_OVL_EXDMA,\r\n"
+ "&gt;&#32;+MTK_OVL_OUTPROC,\r\n"
+ "&gt;&#32;&#32;MTK_DDP_COMP_TYPE_MAX,\r\n"
+ "&gt;&#32;&#32;};\r\n"
+ "&gt;&#32;&#32;\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;719191f05b27..44d2cbe919dc&#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;-64,6&#32;+64,20&#32;@@&#32;void&#32;mtk_dither_set_common(void&#32;__iomem&#32;*regs,&#32;struct&#32;cmdq_client_reg&#32;*cmdq_reg,\r\n"
+ "&gt;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;bpc,&#32;unsigned&#32;int&#32;cfg,\r\n"
+ "&gt;&#32;&#32;&#32;&#32;&#32;unsigned&#32;int&#32;dither_en,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);\r\n"
+ "&gt;&#32;&#32;\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,\r\n"
+ "&gt;&#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;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),\r\n"
+ "&gt;&#32;+&#32;void&#32;*vblank_cb_data);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_dpi_start(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;void&#32;mtk_dpi_stop(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;&#32;unsigned&#32;int&#32;mtk_dpi_encoder_index(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_disp_outproc.c&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.c\r\n"
+ "&gt;&#32;new&#32;file&#32;mode&#32;100644\r\n"
+ "&gt;&#32;index&#32;000000000000..af473eb2fb77\r\n"
+ "&gt;&#32;---&#32;/dev/null\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.c\r\n"
+ "&gt;&#32;@@&#32;-0,0&#32;+1,244&#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_framebuffer.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_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/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;+\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_crtc.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_ddp_comp.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&lt;linux/of.h&gt;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_drm_drv.h&quot;\r\n"
+ "&gt;&#32;+#include&#32;&quot;mtk_disp_outproc.h&quot;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_INTEN0x004\r\n"
+ "&gt;&#32;+#define&#32;OVL_OUTPROC_FME_CPL_INTENBIT(1)\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_INTSTA0x008\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_DATAPATH_CON0x010\r\n"
+ "&gt;&#32;+#define&#32;DATAPATH_CON_OUTPUT_CLAMPBIT(26)\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_EN0x020\r\n"
+ "&gt;&#32;+#define&#32;OVL_OUTPROC_OVL_ENBIT(0)\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_RST0x024\r\n"
+ "&gt;&#32;+#define&#32;OVL_OUTPROC_RSTBIT(0)\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL0x028\r\n"
+ "&gt;&#32;+#define&#32;OVL_OUTPROC_BYPASS_SHADOWBIT(2)\r\n"
+ "&gt;&#32;+#define&#32;DISP_REG_OVL_OUTPROC_ROI_SIZE0x030\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;{\r\n"
+ "&gt;&#32;+void&#32;__iomem*regs;\r\n"
+ "&gt;&#32;+struct&#32;clk*clk;\r\n"
+ "&gt;&#32;+void(*vblank_cb)(void&#32;*data);\r\n"
+ "&gt;&#32;+void*vblank_cb_data;\r\n"
+ "&gt;&#32;+intirq;\r\n"
+ "&gt;&#32;+struct&#32;cmdq_client_regcmdq_reg;\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),\r\n"
+ "&gt;&#32;+&#32;void&#32;*vblank_cb_data)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;vblank_cb&#32;=&#32;vblank_cb;\r\n"
+ "&gt;&#32;+priv-&gt;vblank_cb_data&#32;=&#32;vblank_cb_data;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;vblank_cb&#32;=&#32;NULL;\r\n"
+ "&gt;&#32;+priv-&gt;vblank_cb_data&#32;=&#32;NULL;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+writel(OVL_OUTPROC_FME_CPL_INTEN,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTEN);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+writel(0x0,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTEN);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;irqreturn_t&#32;mtk_disp_outproc_irq_handler(int&#32;irq,&#32;void&#32;*dev_id)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_id;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+writel(0x0,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_INTSTA);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(!priv-&gt;vblank_cb)\r\n"
+ "&gt;&#32;+return&#32;IRQ_NONE;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;vblank_cb(priv-&gt;vblank_cb_data);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;IRQ_HANDLED;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,\r\n"
+ "&gt;&#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;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_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+unsigned&#32;int&#32;tmp;\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;%s-w:%d,&#32;h:%d&#92;n&quot;,&#32;__func__,&#32;w,&#32;h);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+tmp&#32;=&#32;readl(priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL);\r\n"
+ "&gt;&#32;+tmp&#32;=&#32;tmp&#32;|&#32;OVL_OUTPROC_BYPASS_SHADOW;\r\n"
+ "&gt;&#32;+writel(tmp,&#32;priv-&gt;regs&#32;+&#32;DISP_REG_OVL_OUTPROC_SHADOW_CTRL);\r\n"
+ "\r\n"
+ "Move&#32;bypass&#32;shadow&#32;to&#32;mtk_disp_outproc_start().\r\n"
+ "\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(cmdq_pkt,&#32;h&#32;&lt;&lt;&#32;16&#32;|&#32;w,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_ROI_SIZE,&#32;&#126;0);\r\n"
+ "\r\n"
+ "mtk_ddp_write();\r\n"
+ "\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(cmdq_pkt,&#32;DATAPATH_CON_OUTPUT_CLAMP,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_DATAPATH_CON,&#32;DATAPATH_CON_OUTPUT_CLAMP);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;OVL_OUTPROC_RST,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_RST,&#32;OVL_OUTPROC_RST);\r\n"
+ "\r\n"
+ "writel();\r\n"
+ "\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_RST,&#32;OVL_OUTPROC_RST);\r\n"
+ "\r\n"
+ "Some&#32;hardware&#32;reset&#32;before&#32;start.\r\n"
+ "Some&#32;hardware&#32;reset&#32;after&#32;stop.\r\n"
+ "\r\n"
+ "Could&#32;align&#32;this&#63;\r\n"
+ "\r\n"
+ "&gt;&#32;+mtk_ddp_write(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_INTSTA);\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;OVL_OUTPROC_OVL_EN,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_EN,&#32;OVL_OUTPROC_OVL_EN);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+mtk_ddp_write(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_INTEN);\r\n"
+ "\r\n"
+ "OVL&#32;driver&#32;does&#32;not&#32;disable&#32;interrupt&#32;when&#32;stop.\r\n"
+ "Align&#32;this&#32;with&#32;OVL&#32;driver.\r\n"
+ "\r\n"
+ "&gt;&#32;+mtk_ddp_write_mask(NULL,&#32;0,&#32;&amp;priv-&gt;cmdq_reg,&#32;priv-&gt;regs,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;DISP_REG_OVL_OUTPROC_EN,&#32;OVL_OUTPROC_OVL_EN);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+return&#32;clk_prepare_enable(priv-&gt;clk);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv&#32;=&#32;dev_get_drvdata(dev);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+clk_disable_unprepare(priv-&gt;clk);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_disp_outproc_bind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,\r\n"
+ "&gt;&#32;+&#32;void&#32;*data)\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_outproc_unbind(struct&#32;device&#32;*dev,&#32;struct&#32;device&#32;*master,&#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_outproc_component_ops&#32;=&#32;{\r\n"
+ "&gt;&#32;+.bind=&#32;mtk_disp_outproc_bind,\r\n"
+ "&gt;&#32;+.unbind&#32;=&#32;mtk_disp_outproc_unbind,\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;int&#32;mtk_disp_outproc_probe(struct&#32;platform_device&#32;*pdev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+struct&#32;device&#32;*dev&#32;=&#32;&amp;pdev-&gt;dev;\r\n"
+ "&gt;&#32;+struct&#32;resource&#32;*res;\r\n"
+ "&gt;&#32;+struct&#32;mtk_disp_outproc&#32;*priv;\r\n"
+ "&gt;&#32;+int&#32;ret&#32;=&#32;0;\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;+res&#32;=&#32;platform_get_resource(pdev,&#32;IORESOURCE_MEM,&#32;0);\r\n"
+ "&gt;&#32;+priv-&gt;regs&#32;=&#32;devm_ioremap_resource(dev,&#32;res);\r\n"
+ "&gt;&#32;+if&#32;(IS_ERR(priv-&gt;regs))&#32;{\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;failed&#32;to&#32;ioremap&#32;outproc&#92;n&quot;);\r\n"
+ "&gt;&#32;+return&#32;PTR_ERR(priv-&gt;regs);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+priv-&gt;clk&#32;=&#32;devm_clk_get(dev,&#32;NULL);\r\n"
+ "&gt;&#32;+if&#32;(IS_ERR(priv-&gt;clk))&#32;{\r\n"
+ "&gt;&#32;+dev_err(dev,&#32;&quot;failed&#32;to&#32;get&#32;outproc&#32;clk&#92;n&quot;);\r\n"
+ "&gt;&#32;+return&#32;PTR_ERR(priv-&gt;clk);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)\r\n"
+ "&gt;&#32;+ret&#32;=&#32;cmdq_dev_get_client_reg(dev,&#32;&amp;priv-&gt;cmdq_reg,&#32;0);\r\n"
+ "&gt;&#32;+if&#32;(ret)\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;No&#32;mediatek,gce-client-reg&#92;n&quot;);\r\n"
+ "&gt;&#32;+#endif\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(of_property_read_u32_index(dev-&gt;of_node,&#32;&quot;interrupts&quot;,&#32;0,&#32;&amp;ret))&#32;{\r\n"
+ "&gt;&#32;+dev_dbg(dev,&#32;&quot;interrupts&#32;not&#32;defined&#92;n&quot;);\r\n"
+ "\r\n"
+ "In&#32;binding&#32;document,&#32;interrupt&#32;is&#32;required.\r\n"
+ "So&#32;return&#32;with&#32;error&#32;code.\r\n"
+ "\r\n"
+ "&gt;&#32;+}&#32;else&#32;{\r\n"
+ "&gt;&#32;+priv-&gt;irq&#32;=&#32;platform_get_irq(pdev,&#32;0);\r\n"
+ "&gt;&#32;+if&#32;(priv-&gt;irq&#32;&lt;&#32;0)\r\n"
+ "&gt;&#32;+priv-&gt;irq&#32;=&#32;0;\r\n"
+ "\r\n"
+ "In&#32;binding&#32;document,&#32;interrupt&#32;is&#32;required.\r\n"
+ "So&#32;return&#32;with&#32;error&#32;code.\r\n"
+ "\r\n"
+ "Regards,\r\n"
+ "CK\r\n"
+ "\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+if&#32;(priv-&gt;irq)&#32;{\r\n"
+ "&gt;&#32;+ret&#32;=&#32;devm_request_irq(dev,&#32;priv-&gt;irq,&#32;mtk_disp_outproc_irq_handler,\r\n"
+ "&gt;&#32;+&#32;&#32;&#32;&#32;&#32;&#32;&#32;IRQF_TRIGGER_NONE,&#32;dev_name(dev),&#32;priv);\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;request&#32;irq&#32;%d:&#32;%d&#92;n&quot;,&#32;priv-&gt;irq,&#32;ret);\r\n"
+ "&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+platform_set_drvdata(pdev,&#32;priv);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+ret&#32;=&#32;component_add(dev,&#32;&amp;mtk_disp_outproc_component_ops);\r\n"
+ "&gt;&#32;+if&#32;(ret)\r\n"
+ "&gt;&#32;+dev_notice(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;+return&#32;ret;\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;void&#32;mtk_disp_outproc_remove(struct&#32;platform_device&#32;*pdev)\r\n"
+ "&gt;&#32;+{\r\n"
+ "&gt;&#32;+component_del(&amp;pdev-&gt;dev,&#32;&amp;mtk_disp_outproc_component_ops);\r\n"
+ "&gt;&#32;+}\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+static&#32;const&#32;struct&#32;of_device_id&#32;mtk_disp_outproc_driver_dt_match[]&#32;=&#32;{\r\n"
+ "&gt;&#32;+{&#32;.compatible&#32;=&#32;&quot;mediatek,mt8196-outproc&quot;},\r\n"
+ "&gt;&#32;+{},\r\n"
+ "&gt;&#32;+};\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+MODULE_DEVICE_TABLE(of,&#32;mtk_disp_outproc_driver_dt_match);\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+struct&#32;platform_driver&#32;mtk_disp_outproc_driver&#32;=&#32;{\r\n"
+ "&gt;&#32;+.probe=&#32;mtk_disp_outproc_probe,\r\n"
+ "&gt;&#32;+.remove=&#32;mtk_disp_outproc_remove,\r\n"
+ "&gt;&#32;+.driver=&#32;{\r\n"
+ "&gt;&#32;+.name=&#32;&quot;mediatek-disp-outproc&quot;,\r\n"
+ "&gt;&#32;+.owner=&#32;THIS_MODULE,\r\n"
+ "&gt;&#32;+.of_match_table&#32;=&#32;mtk_disp_outproc_driver_dt_match,\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;Output&#32;processing&#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_disp_outproc.h&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.h\r\n"
+ "&gt;&#32;new&#32;file&#32;mode&#32;100644\r\n"
+ "&gt;&#32;index&#32;000000000000..22ee5d845eae\r\n"
+ "&gt;&#32;---&#32;/dev/null\r\n"
+ "&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_disp_outproc.h\r\n"
+ "&gt;&#32;@@&#32;-0,0&#32;+1,22&#32;@@\r\n"
+ "&gt;&#32;+/*&#32;SPDX-License-Identifier:&#32;GPL-2.0-only&#32;*/\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;+#ifndef&#32;__MTK_DISP_OUTPROC_H__\r\n"
+ "&gt;&#32;+#define&#32;__MTK_DISP_OUTPROC_H__\r\n"
+ "&gt;&#32;+\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_start(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_stop(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+int&#32;mtk_disp_outproc_clk_enable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_clk_disable(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_config(struct&#32;device&#32;*dev,&#32;unsigned&#32;int&#32;w,\r\n"
+ "&gt;&#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;unsigned&#32;int&#32;bpc,&#32;struct&#32;cmdq_pkt&#32;*cmdq_pkt);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_register_vblank_cb(struct&#32;device&#32;*dev,\r\n"
+ "&gt;&#32;+&#32;void&#32;(*vblank_cb)(void&#32;*),\r\n"
+ "&gt;&#32;+&#32;void&#32;*vblank_cb_data);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_unregister_vblank_cb(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_enable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+void&#32;mtk_disp_outproc_disable_vblank(struct&#32;device&#32;*dev);\r\n"
+ "&gt;&#32;+#endif\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;e4a0d9fe4e2d..27190057bd8e&#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;-1265,6&#32;+1265,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_exdma_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_gamma_driver,\r\n"
+ "&gt;&#32;&#32;&amp;mtk_disp_merge_driver,\r\n"
+ "&gt;&#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;&#32;&amp;mtk_disp_rdma_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;89178de1478f..c4717c37b0f1&#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;-76,6&#32;+76,7&#32;@@&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_color_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_exdma_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_gamma_driver;\r\n"
+ "&gt;&#32;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_merge_driver;\r\n"
+ "&gt;&#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;&#32;extern&#32;struct&#32;platform_driver&#32;mtk_disp_rdma_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><!--}-->
 
-2cf863108065cb3be2863fed0cfebf4f0e4134869fcb355ff095cf7efa020045
+60490f96ec68cc160379c2807c49760e1c0d684bf137d73f06cabe0ff49f81b3

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.