]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/mediatek: mtk_dsi: Add registers to pdata to fix MT8186/MT8188
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Thu, 19 Dec 2024 11:27:33 +0000 (12:27 +0100)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Mon, 30 Dec 2024 14:50:38 +0000 (14:50 +0000)
Registers DSI_VM_CMD and DSI_SHADOW_DEBUG start at different
addresses in both MT8186 and MT8188 compared to the older IPs.

Add two members in struct mtk_dsi_driver_data to specify the
offsets for these two registers on a per-SoC basis, then do
specify those in all of the currently present SoC driver data.

This fixes writes to the Video Mode Command Packet Control
register, fixing enablement of command packet transmission
(VM_CMD_EN) and allowance of this transmission during the
VFP period (TS_VFP_EN) on both MT8186 and MT8188.

Fixes: 03d7adc41027 ("drm/mediatek: Add mt8186 dsi compatible to mtk_dsi.c")
Fixes: 814d5341f314 ("drm/mediatek: Add mt8188 dsi compatible to mtk_dsi.c")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20241219112733.47907-1-angelogioacchino.delregno@collabora.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_dsi.c

index 3907863579b9e1e278e0fdec16429c97b1901ee2..39f0623a6f0a742ed46d26e3815d1ced3bebd6d5 100644 (file)
 #define CLK_HS_POST                    GENMASK(15, 8)
 #define CLK_HS_EXIT                    GENMASK(23, 16)
 
-#define DSI_VM_CMD_CON         0x130
+/* DSI_VM_CMD_CON */
 #define VM_CMD_EN                      BIT(0)
 #define TS_VFP_EN                      BIT(5)
 
-#define DSI_SHADOW_DEBUG       0x190U
+/* DSI_SHADOW_DEBUG */
 #define FORCE_COMMIT                   BIT(0)
 #define BYPASS_SHADOW                  BIT(1)
 
@@ -187,6 +187,8 @@ struct phy;
 
 struct mtk_dsi_driver_data {
        const u32 reg_cmdq_off;
+       const u32 reg_vm_cmd_off;
+       const u32 reg_shadow_dbg_off;
        bool has_shadow_ctl;
        bool has_size_ctl;
        bool cmdq_long_packet_ctl;
@@ -366,8 +368,8 @@ static void mtk_dsi_set_mode(struct mtk_dsi *dsi)
 
 static void mtk_dsi_set_vm_cmd(struct mtk_dsi *dsi)
 {
-       mtk_dsi_mask(dsi, DSI_VM_CMD_CON, VM_CMD_EN, VM_CMD_EN);
-       mtk_dsi_mask(dsi, DSI_VM_CMD_CON, TS_VFP_EN, TS_VFP_EN);
+       mtk_dsi_mask(dsi, dsi->driver_data->reg_vm_cmd_off, VM_CMD_EN, VM_CMD_EN);
+       mtk_dsi_mask(dsi, dsi->driver_data->reg_vm_cmd_off, TS_VFP_EN, TS_VFP_EN);
 }
 
 static void mtk_dsi_rxtx_control(struct mtk_dsi *dsi)
@@ -713,7 +715,7 @@ static int mtk_dsi_poweron(struct mtk_dsi *dsi)
 
        if (dsi->driver_data->has_shadow_ctl)
                writel(FORCE_COMMIT | BYPASS_SHADOW,
-                      dsi->regs + DSI_SHADOW_DEBUG);
+                      dsi->regs + dsi->driver_data->reg_shadow_dbg_off);
 
        mtk_dsi_reset_engine(dsi);
        mtk_dsi_phy_timconfig(dsi);
@@ -1262,26 +1264,36 @@ static void mtk_dsi_remove(struct platform_device *pdev)
 
 static const struct mtk_dsi_driver_data mt8173_dsi_driver_data = {
        .reg_cmdq_off = 0x200,
+       .reg_vm_cmd_off = 0x130,
+       .reg_shadow_dbg_off = 0x190
 };
 
 static const struct mtk_dsi_driver_data mt2701_dsi_driver_data = {
        .reg_cmdq_off = 0x180,
+       .reg_vm_cmd_off = 0x130,
+       .reg_shadow_dbg_off = 0x190
 };
 
 static const struct mtk_dsi_driver_data mt8183_dsi_driver_data = {
        .reg_cmdq_off = 0x200,
+       .reg_vm_cmd_off = 0x130,
+       .reg_shadow_dbg_off = 0x190,
        .has_shadow_ctl = true,
        .has_size_ctl = true,
 };
 
 static const struct mtk_dsi_driver_data mt8186_dsi_driver_data = {
        .reg_cmdq_off = 0xd00,
+       .reg_vm_cmd_off = 0x200,
+       .reg_shadow_dbg_off = 0xc00,
        .has_shadow_ctl = true,
        .has_size_ctl = true,
 };
 
 static const struct mtk_dsi_driver_data mt8188_dsi_driver_data = {
        .reg_cmdq_off = 0xd00,
+       .reg_vm_cmd_off = 0x200,
+       .reg_shadow_dbg_off = 0xc00,
        .has_shadow_ctl = true,
        .has_size_ctl = true,
        .cmdq_long_packet_ctl = true,