89 lines
3.1 KiB
Diff
89 lines
3.1 KiB
Diff
From 3c3cfcb93f6e6e1cede0cdfe3ec24f16ee108929 Mon Sep 17 00:00:00 2001
|
|
From: Jagan Teki <jagan@edgeble.ai>
|
|
Date: Mon, 31 Jul 2023 16:30:04 +0530
|
|
Subject: [PATCH] drm/rockchip: vop: Add rv1126 vop_lite support
|
|
|
|
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 | 55 +++++++++++++++++++++
|
|
1 file changed, 55 insertions(+)
|
|
|
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
|
@@ -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_dri
|
|
.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);
|