From a2fcc90d0d5e985d4504ca1b82b79db4ce8c592f Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Thu, 16 Sep 2021 15:39:59 +0800 Subject: [PATCH] drm/rockchip: vop2: use property create by rockchip drm drv As some property can be used by both of rockchip_drm_vop2.c and rockchip_drm_vop.c, so we delete some property create at vop2.c and instead by rockchip drm driver common property. Signed-off-by: Sandy Huang Change-Id: If4f327db79a455da75c7d4af04d2fe3aab19a6f0 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 56 ++++++-------------- drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 4 +- 2 files changed, 19 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 68473938507f..f8d9855f79de 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -543,11 +543,6 @@ struct vop2 { struct vop2_wb wb; struct dentry *debugfs; struct drm_info_list *debugfs_files; - struct drm_property *soc_id_prop; - struct drm_property *vp_id_prop; - struct drm_property *aclk_prop; - struct drm_property *bg_prop; - struct drm_property *line_flag_prop; struct drm_prop_enum_list *plane_name_list; bool is_iommu_enabled; bool is_iommu_needed; @@ -5535,6 +5530,8 @@ static int vop2_crtc_atomic_get_property(struct drm_crtc *crtc, struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(state); struct vop2_video_port *vp = to_vop2_video_port(crtc); 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]; if (property == mode_config->tv_left_margin_property) { *val = vcstate->left_margin; @@ -5557,23 +5554,23 @@ static int vop2_crtc_atomic_get_property(struct drm_crtc *crtc, } if (property == private->alpha_scale_prop) { - *val = (vop2->data->feature & VOP_FEATURE_ALPHA_SCALE) ? 1 : 0; + *val = (vp_data->feature & VOP_FEATURE_ALPHA_SCALE) ? 1 : 0; return 0; } - if (property == vop2->aclk_prop) { + if (property == private->aclk_prop) { /* KHZ, keep align with mode->clock */ *val = clk_get_rate(vop2->aclk) / 1000; return 0; } - if (property == vop2->bg_prop) { + if (property == private->bg_prop) { *val = vcstate->background; return 0; } - if (property == vop2->line_flag_prop) { + if (property == private->line_flag_prop) { *val = vcstate->line_flag; return 0; } @@ -5589,10 +5586,9 @@ static int vop2_crtc_atomic_set_property(struct drm_crtc *crtc, uint64_t val) { struct drm_device *drm_dev = crtc->dev; + struct rockchip_drm_private *private = drm_dev->dev_private; struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(state); struct drm_mode_config *mode_config = &drm_dev->mode_config; - struct vop2_video_port *vp = to_vop2_video_port(crtc); - struct vop2 *vop2 = vp->vop2; if (property == mode_config->tv_left_margin_property) { vcstate->left_margin = val; @@ -5615,12 +5611,12 @@ static int vop2_crtc_atomic_set_property(struct drm_crtc *crtc, } - if (property == vop2->bg_prop) { + if (property == private->bg_prop) { vcstate->background = val; return 0; } - if (property == vop2->line_flag_prop) { + if (property == private->line_flag_prop) { vcstate->line_flag = val; return 0; } @@ -6151,6 +6147,7 @@ static int vop2_create_crtc(struct vop2 *vop2) bool be_used_for_primary_plane = false; bool find_primary_plane = false; bool bootloader_initialized = false; + struct rockchip_drm_private *private = drm_dev->dev_private; /* all planes can attach to any crtc */ possible_crtcs = (1 << vop2_data->nr_vps) - 1; @@ -6284,11 +6281,12 @@ static int vop2_create_crtc(struct vop2 *vop2) init_completion(&vp->line_flag_completion); rockchip_register_crtc_funcs(crtc, &private_crtc_funcs); soc_id = vop2_soc_id_fixup(soc_id); - drm_object_attach_property(&crtc->base, vop2->soc_id_prop, soc_id); - drm_object_attach_property(&crtc->base, vop2->vp_id_prop, vp->id); - drm_object_attach_property(&crtc->base, vop2->aclk_prop, 0); - drm_object_attach_property(&crtc->base, vop2->bg_prop, 0); - drm_object_attach_property(&crtc->base, vop2->line_flag_prop, 0); + drm_object_attach_property(&crtc->base, private->soc_id_prop, soc_id); + drm_object_attach_property(&crtc->base, private->port_id_prop, vp->id); + 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, private->alpha_scale_prop, 0); drm_object_attach_property(&crtc->base, drm_dev->mode_config.tv_left_margin_property, 100); drm_object_attach_property(&crtc->base, @@ -6364,7 +6362,6 @@ static int vop2_win_init(struct vop2 *vop2) struct drm_prop_enum_list *plane_name_list; struct vop2_win *win; struct vop2_layer *layer; - struct drm_property *prop; char name[DRM_PROP_NAME_LEN]; unsigned int num_wins = 0; uint8_t plane_id = 0; @@ -6461,27 +6458,6 @@ static int vop2_win_init(struct vop2 *vop2) vop2->plane_name_list = plane_name_list; - prop = drm_property_create_object(vop2->drm_dev, - DRM_MODE_PROP_ATOMIC | DRM_MODE_PROP_IMMUTABLE, - "SOC_ID", DRM_MODE_OBJECT_CRTC); - vop2->soc_id_prop = prop; - - prop = drm_property_create_object(vop2->drm_dev, - DRM_MODE_PROP_ATOMIC | DRM_MODE_PROP_IMMUTABLE, - "PORT_ID", DRM_MODE_OBJECT_CRTC); - vop2->vp_id_prop = prop; - - vop2->aclk_prop = drm_property_create_range(vop2->drm_dev, 0, "ACLK", 0, UINT_MAX); - vop2->bg_prop = drm_property_create_range(vop2->drm_dev, 0, "BACKGROUND", 0, UINT_MAX); - - vop2->line_flag_prop = drm_property_create_range(vop2->drm_dev, 0, "LINE_FLAG1", 0, UINT_MAX); - - if (!vop2->soc_id_prop || !vop2->vp_id_prop || !vop2->aclk_prop || !vop2->bg_prop || - !vop2->line_flag_prop) { - DRM_DEV_ERROR(vop2->dev, "failed to create soc_id/vp_id/aclk property\n"); - return -ENOMEM; - } - return 0; } diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c index b882ba7763c8..1782f5da8f89 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c @@ -646,7 +646,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = { { .id = 0, .soc_id = { 0x3568, 0x3566 }, - .feature = VOP_FEATURE_OUTPUT_10BIT, + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE, .gamma_lut_len = 1024, .cubic_lut_len = 729, /* 9x9x9 */ .max_output = { 4096, 2304 }, @@ -658,6 +658,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = { { .id = 1, .soc_id = { 0x3568, 0x3566 }, + .feature = VOP_FEATURE_ALPHA_SCALE, .gamma_lut_len = 1024, .max_output = { 2048, 1536 }, .pre_scan_max_dly = { 40, 40, 40, 40 }, @@ -666,6 +667,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = { }, { .id = 2, + .feature = VOP_FEATURE_ALPHA_SCALE, .soc_id = { 0x3568, 0x3566 }, .gamma_lut_len = 1024, .max_output = { 1920, 1080 },