Commit 3c3cfcb9 authored by Jagan Teki's avatar Jagan Teki Committed by Heiko Stuebner
Browse files

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: default avatarJagan Teki <jagan@edgeble.ai>
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230731110012.2913742-7-jagan@edgeble.ai
parent aadbaac8
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -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);