add ovl mout on support Signed-off-by: Yongqiang Niu <yongqiang.niu@xxxxxxxxxxxx> --- drivers/soc/mediatek/mmsys/mt8192-mmsys.c | 23 +++++++++++++++++++++++ drivers/soc/mediatek/mtk-mmsys.c | 8 ++++++++ include/linux/soc/mediatek/mtk-mmsys.h | 3 +++ 3 files changed, 34 insertions(+) diff --git a/drivers/soc/mediatek/mmsys/mt8192-mmsys.c b/drivers/soc/mediatek/mmsys/mt8192-mmsys.c index 006d41d..06080ad 100644 --- a/drivers/soc/mediatek/mmsys/mt8192-mmsys.c +++ b/drivers/soc/mediatek/mmsys/mt8192-mmsys.c @@ -134,10 +134,33 @@ static void mtk_mmsys_ddp_sout_sel(void __iomem *config_regs, } } +static int mtk_mmsys_ovl_mout_en(enum mtk_ddp_comp_id cur, + enum mtk_ddp_comp_id next, + unsigned int *addr) +{ + int value = -1; + + *addr = MT8192_MMSYS_OVL_MOUT_EN; + + if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_OVL_2L0) + value = DISP_OVL0_GO_BG; + else if (cur == DDP_COMPONENT_OVL_2L0 && next == DDP_COMPONENT_OVL0) + value = DISP_OVL0_2L_GO_BG; + else if (cur == DDP_COMPONENT_OVL0) + value = DISP_OVL0_GO_BLEND; + else if (cur == DDP_COMPONENT_OVL_2L0) + value = DISP_OVL0_2L_GO_BLEND; + else + value = -1; + + return value; +} + static struct mtk_mmsys_conn_funcs mmsys_funcs = { .mout_en = mtk_mmsys_ddp_mout_en, .sel_in = mtk_mmsys_ddp_sel_in, .sout_sel = mtk_mmsys_ddp_sout_sel, + .ovl_mout_en = mtk_mmsys_ovl_mout_en, }; static int mmsys_probe(struct platform_device *pdev) diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c index 828d59e..1362d01 100644 --- a/drivers/soc/mediatek/mtk-mmsys.c +++ b/drivers/soc/mediatek/mtk-mmsys.c @@ -76,6 +76,14 @@ void mtk_mmsys_ddp_connect(struct device *dev, reg = readl_relaxed(config_regs + addr) | value; writel_relaxed(reg, config_regs + addr); } + + if (priv_funcs->ovl_mout_en) { + value = priv_funcs->ovl_mout_en(cur, next, &addr); + if (value >= 0) { + reg = readl_relaxed(config_regs + addr) | value; + writel_relaxed(reg, config_regs + addr); + } + } } EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect); diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h index 8ef3eaa..eefc7b1 100644 --- a/include/linux/soc/mediatek/mtk-mmsys.h +++ b/include/linux/soc/mediatek/mtk-mmsys.h @@ -55,6 +55,9 @@ struct mtk_mmsys_conn_funcs { void (*sout_sel)(void __iomem *config_regs, enum mtk_ddp_comp_id cur, enum mtk_ddp_comp_id next); + int (*ovl_mout_en)(enum mtk_ddp_comp_id cur, + enum mtk_ddp_comp_id next, + unsigned int *addr); }; void mtk_mmsys_register_conn_funcs(struct device *dev, -- 1.8.1.1.dirty