mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
drm/rockchip: vop2: support vop splice mode in loader protect
when the hdisplay more than 4096, vop need use splice mode to output image. So another vop port need config in load protect function. Signed-off-by: Zhang Yubing <yubing.zhang@rock-chips.com> Change-Id: I64b7726397553af4aeb3cf35ef751b73345497ad
This commit is contained in:
@@ -5078,7 +5078,11 @@ static int vop2_crtc_loader_protect(struct drm_crtc *crtc, bool on)
|
||||
struct vop2_video_port *vp = to_vop2_video_port(crtc);
|
||||
struct vop2 *vop2 = vp->vop2;
|
||||
struct rockchip_drm_private *private = crtc->dev->dev_private;
|
||||
struct vop2_win *win;
|
||||
const struct vop2_video_port_data *vp_data = &vop2->data->vp[vp->id];
|
||||
struct vop2_video_port *splice_vp = &vop2->vps[vp_data->splice_vp_id];
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_display_mode *mode;
|
||||
struct vop2_win *win, *splice_win;
|
||||
|
||||
if (on == vp->loader_protect)
|
||||
return 0;
|
||||
@@ -5090,9 +5094,30 @@ static int vop2_crtc_loader_protect(struct drm_crtc *crtc, bool on)
|
||||
vop2_initial(crtc);
|
||||
if (crtc->primary) {
|
||||
win = to_vop2_win(crtc->primary);
|
||||
if (win->pd && VOP_WIN_GET(vop2, win, enable)) {
|
||||
win->pd->ref_count++;
|
||||
win->pd->vp_mask |= BIT(vp->id);
|
||||
if (VOP_WIN_GET(vop2, win, enable)) {
|
||||
if (win->pd) {
|
||||
win->pd->ref_count++;
|
||||
win->pd->vp_mask |= BIT(vp->id);
|
||||
}
|
||||
|
||||
crtc_state = drm_atomic_get_crtc_state(crtc->state->state, crtc);
|
||||
mode = &crtc_state->adjusted_mode;
|
||||
if (mode->hdisplay > VOP2_MAX_VP_OUTPUT_WIDTH) {
|
||||
splice_win = vop2_find_win_by_phys_id(vop2,
|
||||
win->splice_win_id);
|
||||
splice_win->splice_mode_right = true;
|
||||
splice_win->left_win = win;
|
||||
win->splice_win = splice_win;
|
||||
splice_vp->win_mask |= BIT(splice_win->phys_id);
|
||||
splice_win->vp_mask = BIT(splice_vp->id);
|
||||
vop2->active_vp_mask |= BIT(splice_vp->id);
|
||||
|
||||
if (splice_win->pd &&
|
||||
VOP_WIN_GET(vop2, splice_win, enable)) {
|
||||
splice_win->pd->ref_count++;
|
||||
splice_win->pd->vp_mask |= BIT(splice_vp->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
drm_crtc_vblank_on(crtc);
|
||||
|
||||
Reference in New Issue
Block a user