mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
drm/rockchip: vop: make vop version code more readable
Change-Id: I0d95ba93c1fa2d837a867a69ff8646b8143d36f2 Signed-off-by: Chaoyi Chen <chaoyi.chen@rock-chips.com>
This commit is contained in:
@@ -868,7 +868,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win *win,
|
||||
if (!win->phy->scl)
|
||||
return;
|
||||
|
||||
if ((adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) && vop->version == VOP_VERSION(2, 2)) {
|
||||
if ((adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) &&
|
||||
vop->version == VOP_VERSION_RK3036) {
|
||||
VOP_SCL_SET(vop, win, scale_yrgb_x, ((src_w << 12) / dst_w));
|
||||
VOP_SCL_SET(vop, win, scale_yrgb_y, ((src_h << 12) / dst_h));
|
||||
if (is_yuv) {
|
||||
@@ -1683,7 +1684,7 @@ static void vop_initial(struct drm_crtc *crtc)
|
||||
VOP_CTRL_SET(vop, afbdc_en, 0);
|
||||
vop_enable_debug_irq(crtc);
|
||||
|
||||
if (vop->version == VOP_VERSION(2, 0xd)) {
|
||||
if (vop->version == VOP_VERSION_RK3576_LITE) {
|
||||
VOP_GRF_SET(vop, grf, grf_vopl_sel, 1);
|
||||
VOP_CTRL_SET(vop, enable, 1);
|
||||
}
|
||||
@@ -1990,8 +1991,7 @@ static void vop_plane_atomic_disable(struct drm_plane *plane,
|
||||
* vop will access the freed memory lead to iommu pagefault.
|
||||
* so we add this reset to workaround.
|
||||
*/
|
||||
if (VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 5 &&
|
||||
win->win_id == 2)
|
||||
if (vop->version == VOP_VERSION_PX30_LITE && win->win_id == 2)
|
||||
VOP_WIN_SET(vop, win, yrgb_mst, 0);
|
||||
|
||||
spin_unlock(&vop->reg_lock);
|
||||
@@ -2121,7 +2121,9 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||
dsp_h = 4;
|
||||
actual_h = dsp_h * actual_h / drm_rect_height(dest);
|
||||
}
|
||||
if ((vop->version == VOP_VERSION(2, 2) || vop->version >= VOP_VERSION(2, 0xd)) &&
|
||||
if ((vop->version == VOP_VERSION_RK3036 ||
|
||||
vop->version == VOP_VERSION_RK3506 ||
|
||||
vop->version == VOP_VERSION_RK3576_LITE) &&
|
||||
(adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE))
|
||||
dsp_h = dsp_h / 2;
|
||||
|
||||
@@ -2136,7 +2138,9 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||
|
||||
dsp_stx = dest->x1 + mode->crtc_htotal - mode->crtc_hsync_start;
|
||||
dsp_sty = dest->y1 + mode->crtc_vtotal - mode->crtc_vsync_start;
|
||||
if ((vop->version == VOP_VERSION(2, 2) || vop->version >= VOP_VERSION(2, 0xd)) &&
|
||||
if ((vop->version == VOP_VERSION_RK3036 ||
|
||||
vop->version == VOP_VERSION_RK3506 ||
|
||||
vop->version == VOP_VERSION_RK3576_LITE) &&
|
||||
(adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE))
|
||||
dsp_sty = dest->y1 / 2 + mode->crtc_vtotal - mode->crtc_vsync_start;
|
||||
dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
|
||||
@@ -2596,7 +2600,7 @@ static int vop_crtc_enable_vblank(struct drm_crtc *crtc)
|
||||
|
||||
spin_lock_irqsave(&vop->irq_lock, flags);
|
||||
|
||||
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7) {
|
||||
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328) {
|
||||
VOP_INTR_SET_TYPE(vop, clear, FS_FIELD_INTR, 1);
|
||||
VOP_INTR_SET_TYPE(vop, enable, FS_FIELD_INTR, 1);
|
||||
} else {
|
||||
@@ -2619,7 +2623,7 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc)
|
||||
|
||||
spin_lock_irqsave(&vop->irq_lock, flags);
|
||||
|
||||
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7)
|
||||
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328)
|
||||
VOP_INTR_SET_TYPE(vop, enable, FS_FIELD_INTR, 0);
|
||||
else
|
||||
VOP_INTR_SET_TYPE(vop, enable, FS_INTR, 0);
|
||||
@@ -2928,12 +2932,13 @@ vop_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode)
|
||||
return MODE_BAD_HVALUE;
|
||||
|
||||
if ((mode->flags & DRM_MODE_FLAG_INTERLACE) &&
|
||||
VOP_MAJOR(vop->version) == 3 &&
|
||||
VOP_MINOR(vop->version) <= 2)
|
||||
(vop->version == VOP_VERSION_RK3288 || vop->version == VOP_VERSION_RK3288W ||
|
||||
vop->version == VOP_VERSION_RK3368))
|
||||
return MODE_BAD;
|
||||
|
||||
/*
|
||||
* Dclk need to be double if BT656 interface and vop version >= 2.12.
|
||||
* That is RV1126/RV1106/RK3576_LITE/RK3506
|
||||
*/
|
||||
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
|
||||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
|
||||
@@ -3322,6 +3327,7 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||
|
||||
/*
|
||||
* Dclk need to be double if BT656 interface and vop version >= 2.12.
|
||||
* That is RV1126/RV1106/RK3576_LITE/RK3506
|
||||
*/
|
||||
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
|
||||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
|
||||
@@ -3427,6 +3433,9 @@ static void vop_update_csc(struct drm_crtc *crtc)
|
||||
struct vop *vop = to_vop(crtc);
|
||||
u32 val;
|
||||
|
||||
/*
|
||||
* When using BT656, set RV1126/RV1106/RK3576_LITE/RK3506 to P8888 mode.
|
||||
*/
|
||||
if ((s->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
|
||||
!(vop->data->feature & VOP_FEATURE_OUTPUT_10BIT)) ||
|
||||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
|
||||
@@ -3443,8 +3452,7 @@ static void vop_update_csc(struct drm_crtc *crtc)
|
||||
* For RK3576 vopl, rg_swap and rb_swap need to be enabled in
|
||||
* YUV444 bus_format.
|
||||
*/
|
||||
if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 0xd) &&
|
||||
s->bus_format == MEDIA_BUS_FMT_YUV8_1X24)
|
||||
if (vop->version == VOP_VERSION_RK3576_LITE && s->bus_format == MEDIA_BUS_FMT_YUV8_1X24)
|
||||
VOP_CTRL_SET(vop, dsp_data_swap, DSP_RG_SWAP | DSP_RB_SWAP);
|
||||
|
||||
VOP_CTRL_SET(vop, out_mode, s->output_mode);
|
||||
@@ -3460,13 +3468,13 @@ static void vop_update_csc(struct drm_crtc *crtc)
|
||||
|
||||
/*
|
||||
* Background color is 10bit depth if vop version >= 3.5
|
||||
* That is RK3399/RK3228/RK3328
|
||||
*/
|
||||
if (!is_yuv_output(s->bus_format))
|
||||
val = 0;
|
||||
else if (vop->version == VOP_VERSION(2, 0xd))
|
||||
else if (vop->version == VOP_VERSION_RK3576_LITE)
|
||||
val = 0;
|
||||
else if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) == 8 &&
|
||||
s->hdr.pre_overlay)
|
||||
else if (vop->version == VOP_VERSION_RK3328 && s->hdr.pre_overlay)
|
||||
val = 0;
|
||||
else if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 5)
|
||||
val = 0x20010200;
|
||||
@@ -3566,7 +3574,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
vop_crtc_load_lut(crtc);
|
||||
|
||||
if (vop->mcu_timing.mcu_pix_total) {
|
||||
if (vop->version >= VOP_VERSION(2, 0xd))
|
||||
if (vop->version == VOP_VERSION_RK3576_LITE ||
|
||||
vop->version == VOP_VERSION_RK3506)
|
||||
vop_set_out_mode(vop, s->output_mode);
|
||||
else
|
||||
vop_set_out_mode(vop, ROCKCHIP_OUT_MODE_P888);
|
||||
@@ -3575,7 +3584,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
dclk_inv = (s->bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) ? 1 : 0;
|
||||
/* For improving signal quality, dclk need to be inverted by default on rv1106. */
|
||||
if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 12))
|
||||
if (vop->version == VOP_VERSION_RV1106)
|
||||
dclk_inv = !dclk_inv;
|
||||
|
||||
VOP_CTRL_SET(vop, dclk_pol, dclk_inv);
|
||||
@@ -3635,7 +3644,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
* RK3576 DSI CTRL hsync/vsync polarity is positive and can't update,
|
||||
* so set VOP hsync/vsync polarity as positive by default.
|
||||
*/
|
||||
if (vop->version == VOP_VERSION(2, 0xd))
|
||||
if (vop->version == VOP_VERSION_RK3576_LITE)
|
||||
val = BIT(HSYNC_POSITIVE) | BIT(VSYNC_POSITIVE);
|
||||
VOP_CTRL_SET(vop, mipi_en, 1);
|
||||
VOP_CTRL_SET(vop, mipi_pin_pol, val);
|
||||
@@ -3706,8 +3715,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
act_end = vact_end;
|
||||
}
|
||||
|
||||
if (VOP_MAJOR(vop->version) == 3 &&
|
||||
(VOP_MINOR(vop->version) == 2 || VOP_MINOR(vop->version) == 8))
|
||||
if (vop->version == VOP_VERSION_RK3368 || vop->version == VOP_VERSION_RK3328)
|
||||
for_ddr_freq = 1000;
|
||||
VOP_INTR_SET(vop, line_flag_num[0], act_end);
|
||||
VOP_INTR_SET(vop, line_flag_num[1],
|
||||
@@ -4201,7 +4209,7 @@ static void vop_tv_config_update(struct drm_crtc *crtc,
|
||||
VOP_CTRL_SET(vop, bcsh_sin_hue, sin_hue);
|
||||
VOP_CTRL_SET(vop, bcsh_cos_hue, cos_hue);
|
||||
VOP_CTRL_SET(vop, bcsh_out_mode, BCSH_OUT_MODE_NORMAL_VIDEO);
|
||||
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) == 0)
|
||||
if (vop->version == VOP_VERSION_RK3288)
|
||||
VOP_CTRL_SET(vop, auto_gate_en, 0);
|
||||
VOP_CTRL_SET(vop, bcsh_en, s->bcsh_en);
|
||||
}
|
||||
@@ -4248,7 +4256,7 @@ static void vop_cfg_update(struct drm_crtc *crtc,
|
||||
|
||||
static bool vop_fs_irq_is_pending(struct vop *vop)
|
||||
{
|
||||
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7)
|
||||
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328)
|
||||
return VOP_INTR_GET_TYPE(vop, status, FS_FIELD_INTR);
|
||||
else
|
||||
return VOP_INTR_GET_TYPE(vop, status, FS_INTR);
|
||||
|
||||
@@ -21,7 +21,24 @@
|
||||
#define VOP_MAJOR(version) ((version) >> 8)
|
||||
#define VOP_MINOR(version) ((version) & 0xff)
|
||||
|
||||
#define VOP_VERSION_RK3576_LITE VOP_VERSION(0x2, 0xd)
|
||||
#define VOP_VERSION_RK3066 VOP_VERSION(2, 1)
|
||||
#define VOP_VERSION_RK3036 VOP_VERSION(2, 2)
|
||||
#define VOP_VERSION_RK3126 VOP_VERSION(2, 4)
|
||||
#define VOP_VERSION_PX30_LITE VOP_VERSION(2, 5)
|
||||
#define VOP_VERSION_PX30_BIG VOP_VERSION(2, 6)
|
||||
#define VOP_VERSION_RK3308 VOP_VERSION(2, 7)
|
||||
#define VOP_VERSION_RV1126 VOP_VERSION(2, 0xb)
|
||||
#define VOP_VERSION_RV1106 VOP_VERSION(2, 0xc)
|
||||
#define VOP_VERSION_RK3576_LITE VOP_VERSION(2, 0xd)
|
||||
#define VOP_VERSION_RK3506 VOP_VERSION(2, 0xe)
|
||||
#define VOP_VERSION_RK3288 VOP_VERSION(3, 0)
|
||||
#define VOP_VERSION_RK3288W VOP_VERSION(3, 1)
|
||||
#define VOP_VERSION_RK3368 VOP_VERSION(3, 2)
|
||||
#define VOP_VERSION_RK3366 VOP_VERSION(3, 4)
|
||||
#define VOP_VERSION_RK3399_BIG VOP_VERSION(3, 5)
|
||||
#define VOP_VERSION_RK3399_LITE VOP_VERSION(3, 6)
|
||||
#define VOP_VERSION_RK3228 VOP_VERSION(3, 7)
|
||||
#define VOP_VERSION_RK3328 VOP_VERSION(3, 8)
|
||||
|
||||
#define VOP2_VERSION(major, minor, build) ((major) << 24 | (minor) << 16 | (build))
|
||||
#define VOP2_MAJOR(version) (((version) >> 24) & 0xff)
|
||||
|
||||
Reference in New Issue
Block a user