Merge commit '7244492f8f62292994fb7596b1deb6cf2f8cc767'

* commit '7244492f8f62292994fb7596b1deb6cf2f8cc767':
  drm/rockchip: vop2: Support enable both hdr and dci
  arm64: dts: rockchip: add Tablet Board devicetree for RK3576S SoC

Change-Id: I9d8c8a8069e13ae75f1ca3e55a824b02e47a35a1
This commit is contained in:
Tao Huang
2024-10-11 20:19:45 +08:00
3 changed files with 1333 additions and 8 deletions

View File

@@ -279,6 +279,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-vehicle-evb-v10-linux.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-vehicle-evb-v20.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-vehicle-evb-v20-linux.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576s-evb1-v10.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576s-tablet-v10.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-dsi-dsc-MV2100UZ1.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-edp-8lanes-M280DCA.dtb

File diff suppressed because it is too large Load Diff

View File

@@ -3246,10 +3246,16 @@ static void vop2_setup_csc_mode(struct vop2_video_port *vp,
int is_output_yuv = vcstate->yuv_overlay;
struct vop2_win *win = to_vop2_win(pstate->plane);
int csc_y2r_bit_depth = CSC_10BIT_DEPTH;
int input_color_range = pstate->color_range;
if (win->feature & WIN_FEATURE_Y2R_13BIT_DEPTH)
csc_y2r_bit_depth = CSC_13BIT_DEPTH;
if ((win->feature & WIN_FEATURE_DCI) && vpstate->dci_data) {
is_input_yuv = true;
input_color_range = DRM_COLOR_YCBCR_FULL_RANGE;
}
vpstate->y2r_en = 0;
vpstate->r2y_en = 0;
vpstate->csc_mode = 0;
@@ -3259,7 +3265,7 @@ static void vop2_setup_csc_mode(struct vop2_video_port *vp,
if (is_input_yuv) {
vpstate->y2r_en = 1;
vpstate->csc_mode = vop2_convert_csc_mode(pstate->color_encoding,
pstate->color_range,
input_color_range,
CSC_13BIT_DEPTH);
}
return;
@@ -3267,7 +3273,7 @@ static void vop2_setup_csc_mode(struct vop2_video_port *vp,
if (is_input_yuv) {
vpstate->y2r_en = 1;
vpstate->csc_mode = vop2_convert_csc_mode(pstate->color_encoding,
pstate->color_range,
input_color_range,
csc_y2r_bit_depth);
}
return;
@@ -3303,15 +3309,16 @@ static void vop2_setup_csc_mode(struct vop2_video_port *vp,
}
}
if ((win->feature & WIN_FEATURE_DCI) && vpstate->dci_data)
is_input_yuv = true;
if (is_input_yuv && !is_output_yuv) {
vpstate->y2r_en = 1;
vpstate->csc_mode = vop2_convert_csc_mode(pstate->color_encoding, pstate->color_range, csc_y2r_bit_depth);
vpstate->csc_mode = vop2_convert_csc_mode(pstate->color_encoding,
input_color_range,
csc_y2r_bit_depth);
} else if (!is_input_yuv && is_output_yuv) {
vpstate->r2y_en = 1;
vpstate->csc_mode = vop2_convert_csc_mode(vcstate->color_encoding, vcstate->color_range, CSC_10BIT_DEPTH);
vpstate->csc_mode = vop2_convert_csc_mode(vcstate->color_encoding,
vcstate->color_range,
CSC_10BIT_DEPTH);
/**
* VOP YUV overlay only can support YUV limit range, so force
@@ -11509,7 +11516,7 @@ static void vop3_post_csc_config(struct drm_crtc *crtc, struct post_acm *acm, st
if (is_yuv_output(vcstate->bus_format))
convert_mode.is_output_yuv = true;
if (vp->has_dci_enabled_win)
if (!vcstate->yuv_overlay || vp->has_dci_enabled_win)
convert_mode.is_input_full_range = true;
else if (has_yuv_plane)
convert_mode.is_input_full_range =