|
@@ -117,26 +117,34 @@ static const struct vop_intr rk3036_intr = {
|
|
|
.intrs = rk3036_vop_intrs,
|
|
|
.nintrs = ARRAY_SIZE(rk3036_vop_intrs),
|
|
|
.line_flag_num[0] = VOP_REG(RK3036_INT_STATUS, 0xfff, 12),
|
|
|
- .status = VOP_REG(RK3036_INT_STATUS, 0xf, 0),
|
|
|
- .enable = VOP_REG(RK3036_INT_STATUS, 0xf, 4),
|
|
|
- .clear = VOP_REG(RK3036_INT_STATUS, 0xf, 8),
|
|
|
+ .status = VOP_REG_SYNC(RK3036_INT_STATUS, 0xf, 0),
|
|
|
+ .enable = VOP_REG_SYNC(RK3036_INT_STATUS, 0xf, 4),
|
|
|
+ .clear = VOP_REG_SYNC(RK3036_INT_STATUS, 0xf, 8),
|
|
|
};
|
|
|
|
|
|
-static const struct vop_ctrl rk3036_ctrl_data = {
|
|
|
- .standby = VOP_REG_SYNC(RK3036_SYS_CTRL, 0x1, 30),
|
|
|
- .out_mode = VOP_REG(RK3036_DSP_CTRL0, 0xf, 0),
|
|
|
- .pin_pol = VOP_REG(RK3036_DSP_CTRL0, 0xf, 4),
|
|
|
- .dsp_blank = VOP_REG(RK3036_DSP_CTRL1, 0x1, 24),
|
|
|
+static const struct vop_modeset rk3036_modeset = {
|
|
|
.htotal_pw = VOP_REG(RK3036_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
|
|
|
.hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0),
|
|
|
.vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0),
|
|
|
.vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct vop_output rk3036_output = {
|
|
|
+ .pin_pol = VOP_REG(RK3036_DSP_CTRL0, 0xf, 4),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct vop_common rk3036_common = {
|
|
|
+ .standby = VOP_REG_SYNC(RK3036_SYS_CTRL, 0x1, 30),
|
|
|
+ .out_mode = VOP_REG(RK3036_DSP_CTRL0, 0xf, 0),
|
|
|
+ .dsp_blank = VOP_REG(RK3036_DSP_CTRL1, 0x1, 24),
|
|
|
.cfg_done = VOP_REG_SYNC(RK3036_REG_CFG_DONE, 0x1, 0),
|
|
|
};
|
|
|
|
|
|
static const struct vop_data rk3036_vop = {
|
|
|
- .ctrl = &rk3036_ctrl_data,
|
|
|
.intr = &rk3036_intr,
|
|
|
+ .common = &rk3036_common,
|
|
|
+ .modeset = &rk3036_modeset,
|
|
|
+ .output = &rk3036_output,
|
|
|
.win = rk3036_vop_win_data,
|
|
|
.win_size = ARRAY_SIZE(rk3036_vop_win_data),
|
|
|
};
|
|
@@ -206,27 +214,32 @@ static const struct vop_win_phy rk3288_win23_data = {
|
|
|
.dst_alpha_ctl = VOP_REG(RK3288_WIN2_DST_ALPHA_CTRL, 0xff, 0),
|
|
|
};
|
|
|
|
|
|
-static const struct vop_ctrl rk3288_ctrl_data = {
|
|
|
- .standby = VOP_REG_SYNC(RK3288_SYS_CTRL, 0x1, 22),
|
|
|
- .gate_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 23),
|
|
|
- .mmu_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 20),
|
|
|
+static const struct vop_modeset rk3288_modeset = {
|
|
|
+ .htotal_pw = VOP_REG(RK3288_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
|
|
|
+ .hact_st_end = VOP_REG(RK3288_DSP_HACT_ST_END, 0x1fff1fff, 0),
|
|
|
+ .vtotal_pw = VOP_REG(RK3288_DSP_VTOTAL_VS_END, 0x1fff1fff, 0),
|
|
|
+ .vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0),
|
|
|
+ .hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
|
|
|
+ .vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct vop_output rk3288_output = {
|
|
|
+ .pin_pol = VOP_REG(RK3288_DSP_CTRL0, 0xf, 4),
|
|
|
.rgb_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 12),
|
|
|
.hdmi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 13),
|
|
|
.edp_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 14),
|
|
|
.mipi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 15),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct vop_common rk3288_common = {
|
|
|
+ .standby = VOP_REG_SYNC(RK3288_SYS_CTRL, 0x1, 22),
|
|
|
+ .gate_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 23),
|
|
|
+ .mmu_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 20),
|
|
|
.dither_down = VOP_REG(RK3288_DSP_CTRL1, 0xf, 1),
|
|
|
.dither_up = VOP_REG(RK3288_DSP_CTRL1, 0x1, 6),
|
|
|
.data_blank = VOP_REG(RK3288_DSP_CTRL0, 0x1, 19),
|
|
|
.dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18),
|
|
|
.out_mode = VOP_REG(RK3288_DSP_CTRL0, 0xf, 0),
|
|
|
- .pin_pol = VOP_REG(RK3288_DSP_CTRL0, 0xf, 4),
|
|
|
- .htotal_pw = VOP_REG(RK3288_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
|
|
|
- .hact_st_end = VOP_REG(RK3288_DSP_HACT_ST_END, 0x1fff1fff, 0),
|
|
|
- .vtotal_pw = VOP_REG(RK3288_DSP_VTOTAL_VS_END, 0x1fff1fff, 0),
|
|
|
- .vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0),
|
|
|
- .hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
|
|
|
- .vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
|
|
|
- .global_regdone_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 11),
|
|
|
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
|
|
|
};
|
|
|
|
|
@@ -266,37 +279,13 @@ static const struct vop_intr rk3288_vop_intr = {
|
|
|
static const struct vop_data rk3288_vop = {
|
|
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
|
|
.intr = &rk3288_vop_intr,
|
|
|
- .ctrl = &rk3288_ctrl_data,
|
|
|
+ .common = &rk3288_common,
|
|
|
+ .modeset = &rk3288_modeset,
|
|
|
+ .output = &rk3288_output,
|
|
|
.win = rk3288_vop_win_data,
|
|
|
.win_size = ARRAY_SIZE(rk3288_vop_win_data),
|
|
|
};
|
|
|
|
|
|
-static const struct vop_ctrl rk3399_ctrl_data = {
|
|
|
- .standby = VOP_REG_SYNC(RK3399_SYS_CTRL, 0x1, 22),
|
|
|
- .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23),
|
|
|
- .dp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 11),
|
|
|
- .rgb_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 12),
|
|
|
- .hdmi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 13),
|
|
|
- .edp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 14),
|
|
|
- .mipi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 15),
|
|
|
- .dither_down = VOP_REG(RK3399_DSP_CTRL1, 0xf, 1),
|
|
|
- .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6),
|
|
|
- .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19),
|
|
|
- .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0),
|
|
|
- .rgb_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16),
|
|
|
- .dp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16),
|
|
|
- .hdmi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 20),
|
|
|
- .edp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 24),
|
|
|
- .mipi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 28),
|
|
|
- .htotal_pw = VOP_REG(RK3399_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
|
|
|
- .hact_st_end = VOP_REG(RK3399_DSP_HACT_ST_END, 0x1fff1fff, 0),
|
|
|
- .vtotal_pw = VOP_REG(RK3399_DSP_VTOTAL_VS_END, 0x1fff1fff, 0),
|
|
|
- .vact_st_end = VOP_REG(RK3399_DSP_VACT_ST_END, 0x1fff1fff, 0),
|
|
|
- .hpost_st_end = VOP_REG(RK3399_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
|
|
|
- .vpost_st_end = VOP_REG(RK3399_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
|
|
|
- .cfg_done = VOP_REG_MASK_SYNC(RK3399_REG_CFG_DONE, 0x1, 0),
|
|
|
-};
|
|
|
-
|
|
|
static const int rk3399_vop_intrs[] = {
|
|
|
FS_INTR,
|
|
|
0, 0,
|
|
@@ -317,10 +306,30 @@ static const struct vop_intr rk3399_vop_intr = {
|
|
|
.clear = VOP_REG_MASK_SYNC(RK3399_INTR_CLEAR0, 0xffff, 0),
|
|
|
};
|
|
|
|
|
|
+static const struct vop_output rk3399_output = {
|
|
|
+ .dp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16),
|
|
|
+ .rgb_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16),
|
|
|
+ .hdmi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 20),
|
|
|
+ .edp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 24),
|
|
|
+ .mipi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 28),
|
|
|
+ .dp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 11),
|
|
|
+ .rgb_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 12),
|
|
|
+ .hdmi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 13),
|
|
|
+ .edp_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 14),
|
|
|
+ .mipi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 15),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct vop_misc rk3399_misc = {
|
|
|
+ .global_regdone_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 11),
|
|
|
+};
|
|
|
+
|
|
|
static const struct vop_data rk3399_vop_big = {
|
|
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
|
|
.intr = &rk3399_vop_intr,
|
|
|
- .ctrl = &rk3399_ctrl_data,
|
|
|
+ .common = &rk3288_common,
|
|
|
+ .modeset = &rk3288_modeset,
|
|
|
+ .output = &rk3399_output,
|
|
|
+ .misc = &rk3399_misc,
|
|
|
/*
|
|
|
* rk3399 vop big windows register layout is same as rk3288.
|
|
|
*/
|
|
@@ -337,7 +346,10 @@ static const struct vop_win_data rk3399_vop_lit_win_data[] = {
|
|
|
|
|
|
static const struct vop_data rk3399_vop_lit = {
|
|
|
.intr = &rk3399_vop_intr,
|
|
|
- .ctrl = &rk3399_ctrl_data,
|
|
|
+ .common = &rk3288_common,
|
|
|
+ .modeset = &rk3288_modeset,
|
|
|
+ .output = &rk3399_output,
|
|
|
+ .misc = &rk3399_misc,
|
|
|
/*
|
|
|
* rk3399 vop lit windows register layout is same as rk3288,
|
|
|
* but cut off the win1 and win3 windows.
|