drm/rockchip: vop: Add rv1126 vop_lite support
authorJagan Teki <jagan@edgeble.ai>
Mon, 31 Jul 2023 11:00:04 +0000 (16:30 +0530)
committerHeiko Stuebner <heiko@sntech.de>
Thu, 10 Aug 2023 20:54:44 +0000 (22:54 +0200)
RV1126 VOP_LITE supports the video output processing ofMIPI DSI,
RGB display interfaces with max output resolution of 1920x1080.

Add support for rv1126 vop.

Signed-off-by: Jagan Teki <jagan@edgeble.ai>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230731110012.2913742-7-jagan@edgeble.ai
drivers/gpu/drm/rockchip/rockchip_vop_reg.c

index 7b28050067769d96baac6c8e6d05a944c61ed676..d053ef0275526ec19502386b1828f0d087c957d6 100644 (file)
@@ -1120,6 +1120,59 @@ static const struct vop_data rk3328_vop = {
        .max_output = { 4096, 2160 },
 };
 
+static const struct vop_common rv1126_common = {
+       .standby = VOP_REG_SYNC(PX30_SYS_CTRL2, 0x1, 1),
+       .out_mode = VOP_REG(PX30_DSP_CTRL2, 0xf, 16),
+       .dsp_blank = VOP_REG(PX30_DSP_CTRL2, 0x1, 14),
+       .dither_down_en = VOP_REG(PX30_DSP_CTRL2, 0x1, 8),
+       .dither_down_sel = VOP_REG(PX30_DSP_CTRL2, 0x1, 7),
+       .dither_down_mode = VOP_REG(PX30_DSP_CTRL2, 0x1, 6),
+       .cfg_done = VOP_REG_SYNC(PX30_REG_CFG_DONE, 0x1, 0),
+       .dither_up = VOP_REG(PX30_DSP_CTRL2, 0x1, 2),
+       .dsp_lut_en = VOP_REG(PX30_DSP_CTRL2, 0x1, 5),
+       .gate_en = VOP_REG(PX30_DSP_CTRL2, 0x1, 0),
+};
+
+static const struct vop_modeset rv1126_modeset = {
+       .htotal_pw = VOP_REG(PX30_DSP_HTOTAL_HS_END, 0x0fff0fff, 0),
+       .hact_st_end = VOP_REG(PX30_DSP_HACT_ST_END, 0x0fff0fff, 0),
+       .vtotal_pw = VOP_REG(PX30_DSP_VTOTAL_VS_END, 0x0fff0fff, 0),
+       .vact_st_end = VOP_REG(PX30_DSP_VACT_ST_END, 0x0fff0fff, 0),
+};
+
+static const struct vop_output rv1126_output = {
+       .rgb_dclk_pol = VOP_REG(PX30_DSP_CTRL0, 0x1, 1),
+       .rgb_pin_pol = VOP_REG(PX30_DSP_CTRL0, 0x7, 2),
+       .rgb_en = VOP_REG(PX30_DSP_CTRL0, 0x1, 0),
+       .mipi_dclk_pol = VOP_REG(PX30_DSP_CTRL0, 0x1, 25),
+       .mipi_pin_pol = VOP_REG(PX30_DSP_CTRL0, 0x7, 26),
+       .mipi_en = VOP_REG(PX30_DSP_CTRL0, 0x1, 24),
+};
+
+static const struct vop_misc rv1126_misc = {
+       .global_regdone_en = VOP_REG(PX30_SYS_CTRL2, 0x1, 13),
+};
+
+static const struct vop_win_data rv1126_vop_win_data[] = {
+       { .base = 0x00, .phy = &px30_win0_data,
+         .type = DRM_PLANE_TYPE_OVERLAY },
+       { .base = 0x00, .phy = &px30_win2_data,
+         .type = DRM_PLANE_TYPE_PRIMARY },
+};
+
+static const struct vop_data rv1126_vop = {
+       .version = VOP_VERSION(2, 0xb),
+       .intr = &px30_intr,
+       .common = &rv1126_common,
+       .modeset = &rv1126_modeset,
+       .output = &rv1126_output,
+       .misc = &rv1126_misc,
+       .win = rv1126_vop_win_data,
+       .win_size = ARRAY_SIZE(rv1126_vop_win_data),
+       .max_output = { 1920, 1080 },
+       .lut_size = 1024,
+};
+
 static const struct of_device_id vop_driver_dt_match[] = {
        { .compatible = "rockchip,rk3036-vop",
          .data = &rk3036_vop },
@@ -1147,6 +1200,8 @@ static const struct of_device_id vop_driver_dt_match[] = {
          .data = &rk3228_vop },
        { .compatible = "rockchip,rk3328-vop",
          .data = &rk3328_vop },
+       { .compatible = "rockchip,rv1126-vop",
+         .data = &rv1126_vop },
        {},
 };
 MODULE_DEVICE_TABLE(of, vop_driver_dt_match);