mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
drm/rockchip: vop: update crtc feature
1. add overscan feature to indicate rk3588 can't support overscan; 2. add more feature info for rk3588; 3. fix some feature character error; Signed-off-by: Sandy Huang <hjc@rock-chips.com> Change-Id: I708e506db87c36078453232530bfb4d78e779010
This commit is contained in:
@@ -3686,6 +3686,7 @@ static void vop_cfg_update(struct drm_crtc *crtc,
|
||||
struct rockchip_crtc_state *s =
|
||||
to_rockchip_crtc_state(crtc->state);
|
||||
struct vop *vop = to_vop(crtc);
|
||||
const struct vop_data *vop_data = vop->data;
|
||||
|
||||
spin_lock(&vop->reg_lock);
|
||||
|
||||
@@ -3713,7 +3714,8 @@ static void vop_cfg_update(struct drm_crtc *crtc,
|
||||
VOP_CTRL_SET(vop, afbdc_en, s->afbdc_en);
|
||||
|
||||
VOP_CTRL_SET(vop, dsp_layer_sel, s->dsp_layer_sel);
|
||||
vop_post_config(crtc);
|
||||
if (vop_data->feature & VOP_FEATURE_OVERSCAN)
|
||||
vop_post_config(crtc);
|
||||
|
||||
spin_unlock(&vop->reg_lock);
|
||||
}
|
||||
@@ -4409,9 +4411,9 @@ static int vop_crtc_create_feature_property(struct vop *vop, struct drm_crtc *cr
|
||||
|
||||
if (vop_data->feature & VOP_FEATURE_ALPHA_SCALE)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE);
|
||||
if (vop_data->feature & VOP_FEATURE_ALPHA_HDR10)
|
||||
if (vop_data->feature & VOP_FEATURE_HDR10)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_HDR10);
|
||||
if (vop_data->feature & VOP_FEATURE_ALPHA_NEXT_HDR)
|
||||
if (vop_data->feature & VOP_FEATURE_NEXT_HDR)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_NEXT_HDR);
|
||||
|
||||
prop = drm_property_create_bitmask(vop->drm_dev,
|
||||
|
||||
@@ -32,10 +32,11 @@
|
||||
#define VOP_FEATURE_OUTPUT_RGB10 BIT(0)
|
||||
#define VOP_FEATURE_INTERNAL_RGB BIT(1)
|
||||
#define VOP_FEATURE_ALPHA_SCALE BIT(2)
|
||||
#define VOP_FEATURE_ALPHA_HDR10 BIT(3)
|
||||
#define VOP_FEATURE_ALPHA_NEXT_HDR BIT(4)
|
||||
#define VOP_FEATURE_HDR10 BIT(3)
|
||||
#define VOP_FEATURE_NEXT_HDR BIT(4)
|
||||
/* a feature to splice two windows and two vps to support resolution > 4096 */
|
||||
#define VOP_FEATURE_SPLICE BIT(5)
|
||||
#define VOP_FEATURE_OVERSCAN BIT(6)
|
||||
|
||||
#define VOP_FEATURE_OUTPUT_10BIT VOP_FEATURE_OUTPUT_RGB10
|
||||
|
||||
|
||||
@@ -5476,7 +5476,8 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state
|
||||
else
|
||||
clk_set_rate(vp->dclk, adjusted_mode->crtc_clock * 1000);
|
||||
|
||||
vop2_post_config(crtc);
|
||||
if (vp_data->feature & VOP_FEATURE_OVERSCAN)
|
||||
vop2_post_config(crtc);
|
||||
|
||||
if (vcstate->dsc_enable)
|
||||
vop2_crtc_enable_dsc(crtc, old_state);
|
||||
@@ -6357,6 +6358,8 @@ static void vop2_cfg_update(struct drm_crtc *crtc,
|
||||
struct vop2_video_port *vp = to_vop2_video_port(crtc);
|
||||
struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state);
|
||||
struct vop2 *vop2 = vp->vop2;
|
||||
const struct vop2_data *vop2_data = vop2->data;
|
||||
const struct vop2_video_port_data *vp_data = &vop2_data->vp[vp->id];
|
||||
uint32_t val;
|
||||
uint32_t r, g, b;
|
||||
|
||||
@@ -6386,7 +6389,8 @@ static void vop2_cfg_update(struct drm_crtc *crtc,
|
||||
|
||||
vop2_tv_config_update(crtc, old_crtc_state);
|
||||
|
||||
vop2_post_config(crtc);
|
||||
if (vp_data->feature & VOP_FEATURE_OVERSCAN)
|
||||
vop2_post_config(crtc);
|
||||
|
||||
spin_unlock(&vop2->reg_lock);
|
||||
}
|
||||
@@ -7259,9 +7263,9 @@ static int vop2_crtc_create_feature_property(struct vop2 *vop2, struct drm_crtc
|
||||
|
||||
if (vp_data->feature & VOP_FEATURE_ALPHA_SCALE)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE);
|
||||
if (vp_data->feature & VOP_FEATURE_ALPHA_HDR10)
|
||||
if (vp_data->feature & VOP_FEATURE_HDR10)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_HDR10);
|
||||
if (vp_data->feature & VOP_FEATURE_ALPHA_NEXT_HDR)
|
||||
if (vp_data->feature & VOP_FEATURE_NEXT_HDR)
|
||||
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_NEXT_HDR);
|
||||
|
||||
prop = drm_property_create_bitmask(vop2->drm_dev,
|
||||
@@ -7443,14 +7447,16 @@ static int vop2_create_crtc(struct vop2 *vop2)
|
||||
drm_object_attach_property(&crtc->base, private->aclk_prop, 0);
|
||||
drm_object_attach_property(&crtc->base, private->bg_prop, 0);
|
||||
drm_object_attach_property(&crtc->base, private->line_flag_prop, 0);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_left_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_right_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_top_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_bottom_margin_property, 100);
|
||||
if (vp_data->feature & VOP_FEATURE_OVERSCAN) {
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_left_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_right_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_top_margin_property, 100);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_bottom_margin_property, 100);
|
||||
}
|
||||
vop2_crtc_create_plane_mask_property(vop2, crtc);
|
||||
vop2_crtc_create_feature_property(vop2, crtc);
|
||||
registered_num_crtcs++;
|
||||
|
||||
@@ -806,7 +806,8 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
|
||||
{
|
||||
.id = 0,
|
||||
.soc_id = { 0x3568, 0x3566 },
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_ALPHA_HDR10,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
|
||||
VOP_FEATURE_HDR10 | VOP_FEATURE_OVERSCAN,
|
||||
.gamma_lut_len = 1024,
|
||||
.cubic_lut_len = 729, /* 9x9x9 */
|
||||
.max_output = { 4096, 2304 },
|
||||
@@ -818,7 +819,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
|
||||
{
|
||||
.id = 1,
|
||||
.soc_id = { 0x3568, 0x3566 },
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.gamma_lut_len = 1024,
|
||||
.max_output = { 2048, 1536 },
|
||||
.pre_scan_max_dly = { 40, 40, 40, 40 },
|
||||
@@ -827,7 +828,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
|
||||
},
|
||||
{
|
||||
.id = 2,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.soc_id = { 0x3568, 0x3566 },
|
||||
.gamma_lut_len = 1024,
|
||||
.max_output = { 1920, 1080 },
|
||||
@@ -1099,7 +1100,8 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
|
||||
.id = 0,
|
||||
.splice_vp_id = 1,
|
||||
.soc_id = { 0x3588, 0x3588 },
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
|
||||
VOP_FEATURE_HDR10 | VOP_FEATURE_NEXT_HDR,
|
||||
.gamma_lut_len = 1024,
|
||||
.cubic_lut_len = 729, /* 9x9x9 */
|
||||
.dclk_max = 600000000,
|
||||
@@ -1113,6 +1115,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
|
||||
{
|
||||
.id = 1,
|
||||
.soc_id = { 0x3588, 0x3588 },
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_HDR10,
|
||||
.gamma_lut_len = 1024,
|
||||
.dclk_max = 600000000,
|
||||
.max_output = { 4096, 2304 },
|
||||
@@ -1125,6 +1128,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
|
||||
{
|
||||
.id = 2,
|
||||
.soc_id = { 0x3588, 0x3588 },
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.gamma_lut_len = 1024,
|
||||
.dclk_max = 600000000,
|
||||
.max_output = { 4096, 2304 },
|
||||
@@ -1135,6 +1139,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
|
||||
{
|
||||
.id = 3,
|
||||
.soc_id = { 0x3588, 0x3588 },
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.gamma_lut_len = 1024,
|
||||
.dclk_max = 200000000,
|
||||
.max_output = { 2048, 1536 },
|
||||
@@ -1142,7 +1147,6 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
|
||||
.intr = &rk3588_vp3_intr,
|
||||
.regs = &rk3588_vop_vp3_regs,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -398,7 +398,7 @@ static const struct vop_data rk3288_vop_big = {
|
||||
.soc_id = 0x3288,
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 0),
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {3840, 2160},
|
||||
.intr = &rk3288_vop_intr,
|
||||
@@ -412,7 +412,7 @@ static const struct vop_data rk3288_vop_lit = {
|
||||
.soc_id = 0x3288,
|
||||
.vop_id = 1,
|
||||
.version = VOP_VERSION(3, 0),
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {2560, 1600},
|
||||
.intr = &rk3288_vop_intr,
|
||||
@@ -521,7 +521,7 @@ static const struct vop_data rk3368_vop = {
|
||||
.soc_id = 0x3368,
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 2),
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {4096, 2160},
|
||||
.intr = &rk3368_vop_intr,
|
||||
@@ -548,7 +548,7 @@ static const struct vop_data rk3366_vop = {
|
||||
.soc_id = 0x3366,
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 4),
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {4096, 2160},
|
||||
.intr = &rk3366_vop_intr,
|
||||
@@ -709,7 +709,7 @@ static const struct vop_data rk3399_vop_big = {
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 5),
|
||||
.csc_table = &rk3399_csc_table,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {4096, 2160},
|
||||
.intr = &rk3366_vop_intr,
|
||||
@@ -738,7 +738,7 @@ static const struct vop_data rk3399_vop_lit = {
|
||||
.soc_id = 0x3399,
|
||||
.vop_id = 1,
|
||||
.version = VOP_VERSION(3, 6),
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.csc_table = &rk3399_csc_table,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {2560, 1600},
|
||||
@@ -759,7 +759,7 @@ static const struct vop_data rk3228_vop = {
|
||||
.soc_id = 0x3228,
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 7),
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {4096, 2160},
|
||||
.intr = &rk3366_vop_intr,
|
||||
@@ -1152,7 +1152,8 @@ static const struct vop_data rk3328_vop = {
|
||||
.soc_id = 0x3328,
|
||||
.vop_id = 0,
|
||||
.version = VOP_VERSION(3, 8),
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
|
||||
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_HDR10 |
|
||||
VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
|
||||
.hdr_table = &rk3328_hdr_table,
|
||||
.max_input = {4096, 8192},
|
||||
.max_output = {4096, 2160},
|
||||
|
||||
Reference in New Issue
Block a user