@@ -389,17 +389,23 @@ static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur,
return value;
}
-static void mtk_ddp_sout_sel(struct regmap *config_regs,
- enum mtk_ddp_comp_id cur,
- enum mtk_ddp_comp_id next)
+static unsigned int mtk_ddp_sout_sel(enum mtk_ddp_comp_id cur,
+ enum mtk_ddp_comp_id next,
+ unsigned int *addr)
{
+ unsigned int value;
+
if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) {
- regmap_write(config_regs, DISP_REG_CONFIG_OUT_SEL,
- BLS_TO_DSI_RDMA1_TO_DPI1);
+ *addr = DISP_REG_CONFIG_OUT_SEL;
+ value = BLS_TO_DSI_RDMA1_TO_DPI1;
} else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) {
- regmap_write(config_regs, DISP_REG_CONFIG_OUT_SEL,
- BLS_TO_DPI_RDMA1_TO_DSI);
+ *addr = DISP_REG_CONFIG_OUT_SEL;
+ value = BLS_TO_DPI_RDMA1_TO_DSI;
+ } else {
+ value = 0;
}
+
+ return value;
}
void mtk_ddp_add_comp_to_path(struct regmap *config_regs,
@@ -412,7 +418,9 @@ void mtk_ddp_add_comp_to_path(struct regmap *config_regs,
if (value)
regmap_update_bits(config_regs, addr, value, value);
- mtk_ddp_sout_sel(config_regs, cur, next);
+ value = mtk_ddp_sout_sel(cur, next, &addr);
+ if (value)
+ regmap_update_bits(config_regs, addr, value, value);
value = mtk_ddp_sel_in(cur, next, &addr);
if (value)
there will be more sout case in the future, make the sout function format same mtk_ddp_sel_in Signed-off-by: Yongqiang Niu <yongqiang.niu@mediatek.com> --- drivers/gpu/drm/mediatek/mtk_drm_ddp.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)