Commit d2ae586f authored by Nancy.Lin's avatar Nancy.Lin Committed by Chun-Kuang Hu

drm/mediatek: Add display merge start/stop API for cmdq support

Add merge start/stop API for cmdq support. The ovl_adaptor merges
are configured with each drm plane update. Need to enable/disable
merge with cmdq making sure all the settings taken effect in the
same vblank.
Signed-off-by: default avatarNancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: default avatarBo-Chen Chen <rex-bc.chen@mediatek.com>
Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20220620091930.27797-6-nancy.lin@mediatek.com/Signed-off-by: default avatarChun-Kuang Hu <chunkuang.hu@kernel.org>
parent 7e4727f7
...@@ -66,6 +66,8 @@ void mtk_merge_stop(struct device *dev); ...@@ -66,6 +66,8 @@ void mtk_merge_stop(struct device *dev);
void mtk_merge_advance_config(struct device *dev, unsigned int l_w, unsigned int r_w, void mtk_merge_advance_config(struct device *dev, unsigned int l_w, unsigned int r_w,
unsigned int h, unsigned int vrefresh, unsigned int bpc, unsigned int h, unsigned int vrefresh, unsigned int bpc,
struct cmdq_pkt *cmdq_pkt); struct cmdq_pkt *cmdq_pkt);
void mtk_merge_start_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt);
void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt);
void mtk_ovl_bgclr_in_on(struct device *dev); void mtk_ovl_bgclr_in_on(struct device *dev);
void mtk_ovl_bgclr_in_off(struct device *dev); void mtk_ovl_bgclr_in_off(struct device *dev);
......
...@@ -67,17 +67,29 @@ struct mtk_disp_merge { ...@@ -67,17 +67,29 @@ struct mtk_disp_merge {
}; };
void mtk_merge_start(struct device *dev) void mtk_merge_start(struct device *dev)
{
mtk_merge_start_cmdq(dev, NULL);
}
void mtk_merge_stop(struct device *dev)
{
mtk_merge_stop_cmdq(dev, NULL);
}
void mtk_merge_start_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt)
{ {
struct mtk_disp_merge *priv = dev_get_drvdata(dev); struct mtk_disp_merge *priv = dev_get_drvdata(dev);
writel(MERGE_EN, priv->regs + DISP_REG_MERGE_CTRL); mtk_ddp_write(cmdq_pkt, 1, &priv->cmdq_reg, priv->regs,
DISP_REG_MERGE_CTRL);
} }
void mtk_merge_stop(struct device *dev) void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt)
{ {
struct mtk_disp_merge *priv = dev_get_drvdata(dev); struct mtk_disp_merge *priv = dev_get_drvdata(dev);
writel(0x0, priv->regs + DISP_REG_MERGE_CTRL); mtk_ddp_write(cmdq_pkt, 0, &priv->cmdq_reg, priv->regs,
DISP_REG_MERGE_CTRL);
} }
static void mtk_merge_fifo_setting(struct mtk_disp_merge *priv, static void mtk_merge_fifo_setting(struct mtk_disp_merge *priv,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment