drm/rockchip: vop: add CRTC feature interaction with userspace

move alpha scale to crtc feature and add hdr10/dolby hdr info to
feature to interaction with userspace, and remove alpha_scale_prop from
rockchip_drm_drv.c

Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Change-Id: Ic56c7a53c890702ce4a70167ea9926aa32b29fa7
This commit is contained in:
Sandy Huang
2021-09-28 16:25:53 +08:00
parent 2bc4f70d30
commit bd3ab87c3e
3 changed files with 37 additions and 14 deletions

View File

@@ -425,12 +425,6 @@ static int rockchip_drm_create_properties(struct drm_device *dev)
return -ENOMEM;
private->color_space_prop = prop;
prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,
"ALPHA_SCALE", 0, 1);
if (!prop)
return -ENOMEM;
private->alpha_scale_prop = prop;
prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,
"ASYNC_COMMIT", 0, 1);
if (!prop)

View File

@@ -220,7 +220,6 @@ struct rockchip_drm_private {
/* private plane prop */
struct drm_property *eotf_prop;
struct drm_property *color_space_prop;
struct drm_property *alpha_scale_prop;
struct drm_property *async_commit_prop;
struct drm_property *share_id_prop;

View File

@@ -233,6 +233,7 @@ struct vop {
struct drm_info_list *debugfs_files;
struct drm_property *plane_feature_prop;
struct drm_property *plane_mask_prop;
struct drm_property *feature_prop;
bool is_iommu_enabled;
bool is_iommu_needed;
@@ -3964,18 +3965,12 @@ static int vop_crtc_atomic_get_property(struct drm_crtc *crtc,
return 0;
}
if (property == private->alpha_scale_prop) {
*val = (vop->data->feature & VOP_FEATURE_ALPHA_SCALE) ? 1 : 0;
return 0;
}
if (property == private->aclk_prop) {
/* KHZ, keep align with mode->clock */
*val = clk_get_rate(vop->aclk) / 1000;
return 0;
}
if (property == private->bg_prop) {
*val = vop->background;
return 0;
@@ -4374,6 +4369,41 @@ static int vop_crtc_create_plane_mask_property(struct vop *vop, struct drm_crtc
return 0;
}
static int vop_crtc_create_feature_property(struct vop *vop, struct drm_crtc *crtc)
{
const struct vop_data *vop_data = vop->data;
struct drm_property *prop;
u64 feature = 0;
static const struct drm_prop_enum_list props[] = {
{ ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE, "ALPHA_SCALE" },
{ ROCKCHIP_DRM_CRTC_FEATURE_HDR10, "HDR10" },
{ ROCKCHIP_DRM_CRTC_FEATURE_DOLBY_HDR, "DOLBY_HDR" },
};
if (vop_data->feature & VOP_FEATURE_ALPHA_SCALE)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE);
if (vop_data->feature & VOP_FEATURE_ALPHA_HDR10)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_HDR10);
if (vop_data->feature & VOP_FEATURE_ALPHA_DOLBY_HDR)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_DOLBY_HDR);
prop = drm_property_create_bitmask(vop->drm_dev,
DRM_MODE_PROP_IMMUTABLE, "FEATURE",
props, ARRAY_SIZE(props),
0xffffffff);
if (!prop) {
DRM_DEV_ERROR(vop->dev, "create FEATURE prop for vop%d failed\n", vop->id);
return -ENOMEM;
}
vop->feature_prop = prop;
drm_object_attach_property(&crtc->base, vop->feature_prop, feature);
return 0;
}
static int vop_create_crtc(struct vop *vop)
{
struct device *dev = vop->dev;
@@ -4455,7 +4485,6 @@ static int vop_create_crtc(struct vop *vop)
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);
#define VOP_ATTACH_MODE_CONFIG_PROP(prop, v) \
drm_object_attach_property(&crtc->base, drm_dev->mode_config.prop, v)
@@ -4466,6 +4495,7 @@ static int vop_create_crtc(struct vop *vop)
VOP_ATTACH_MODE_CONFIG_PROP(tv_bottom_margin_property, 100);
#undef VOP_ATTACH_MODE_CONFIG_PROP
vop_crtc_create_plane_mask_property(vop, crtc);
vop_crtc_create_feature_property(vop, crtc);
if (vop->lut_regs) {
u16 *r_base, *g_base, *b_base;