drm/rockchip: vop2: move cubic lut to rockchip drm driver
move cubic lut support from drm croe to rockchip drm driver and remove depend on NO_GKI. Signed-off-by: Sandy Huang <hjc@rock-chips.com> Change-Id: I8fb6ba4fc927bf9f7e1b38c180986b1e25393347
This commit is contained in:
@@ -20,13 +20,6 @@ config DRM_ROCKCHIP
|
||||
|
||||
if DRM_ROCKCHIP
|
||||
|
||||
config ROCKCHIP_DRM_CUBIC_LUT
|
||||
bool "Support 3D cubic LUT"
|
||||
depends on NO_GKI
|
||||
help
|
||||
This add properties to support provision of a 3D cubic
|
||||
look up table, allowing for color specific adjustments.
|
||||
|
||||
config ROCKCHIP_DRM_DEBUG
|
||||
bool "Rockchip DRM debug"
|
||||
depends on DEBUG_FS
|
||||
|
||||
@@ -1337,6 +1337,9 @@ static int rockchip_drm_create_properties(struct drm_device *dev)
|
||||
private->aclk_prop = drm_property_create_range(dev, 0, "ACLK", 0, UINT_MAX);
|
||||
private->bg_prop = drm_property_create_range(dev, 0, "BACKGROUND", 0, UINT_MAX);
|
||||
private->line_flag_prop = drm_property_create_range(dev, 0, "LINE_FLAG1", 0, UINT_MAX);
|
||||
private->cubic_lut_prop = drm_property_create(dev, DRM_MODE_PROP_BLOB, "CUBIC_LUT", 0);
|
||||
private->cubic_lut_size_prop = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE,
|
||||
"CUBIC_LUT_SIZE", 0, UINT_MAX);
|
||||
|
||||
return drm_mode_create_tv_properties(dev, 0, NULL);
|
||||
}
|
||||
|
||||
@@ -255,6 +255,7 @@ struct rockchip_crtc_state {
|
||||
struct drm_property_blob *hdr_ext_data;
|
||||
struct drm_property_blob *acm_lut_data;
|
||||
struct drm_property_blob *post_csc_data;
|
||||
struct drm_property_blob *cubic_lut_data;
|
||||
|
||||
int request_refresh_rate;
|
||||
int max_refresh_rate;
|
||||
@@ -452,6 +453,8 @@ struct rockchip_drm_private {
|
||||
struct drm_property *aclk_prop;
|
||||
struct drm_property *bg_prop;
|
||||
struct drm_property *line_flag_prop;
|
||||
struct drm_property *cubic_lut_prop;
|
||||
struct drm_property *cubic_lut_size_prop;
|
||||
|
||||
/* private plane prop */
|
||||
struct drm_property *eotf_prop;
|
||||
|
||||
@@ -3524,7 +3524,6 @@ static int vop2_crtc_atomic_gamma_set(struct drm_crtc *crtc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ROCKCHIP_DRM_CUBIC_LUT)
|
||||
static int vop2_crtc_atomic_cubic_lut_set(struct drm_crtc *crtc,
|
||||
struct drm_crtc_state *old_state)
|
||||
{
|
||||
@@ -3597,18 +3596,12 @@ static int vop2_crtc_atomic_cubic_lut_set(struct drm_crtc *crtc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void drm_crtc_enable_cubic_lut(struct drm_crtc *crtc, unsigned int cubic_lut_size)
|
||||
static void vop2_attach_cubic_lut_prop(struct drm_crtc *crtc, unsigned int cubic_lut_size)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct drm_mode_config *config = &dev->mode_config;
|
||||
struct rockchip_drm_private *private = crtc->dev->dev_private;
|
||||
|
||||
if (cubic_lut_size) {
|
||||
drm_object_attach_property(&crtc->base,
|
||||
config->cubic_lut_property, 0);
|
||||
drm_object_attach_property(&crtc->base,
|
||||
config->cubic_lut_size_property,
|
||||
cubic_lut_size);
|
||||
}
|
||||
drm_object_attach_property(&crtc->base, private->cubic_lut_prop, 0);
|
||||
drm_object_attach_property(&crtc->base, private->cubic_lut_size_prop, cubic_lut_size);
|
||||
}
|
||||
|
||||
static void vop2_cubic_lut_init(struct vop2 *vop2)
|
||||
@@ -3628,12 +3621,9 @@ static void vop2_cubic_lut_init(struct vop2 *vop2)
|
||||
vp->cubic_lut_len = vp_data->cubic_lut_len;
|
||||
|
||||
if (vp->cubic_lut_len)
|
||||
drm_crtc_enable_cubic_lut(crtc, vp->cubic_lut_len);
|
||||
vop2_attach_cubic_lut_prop(crtc, vp->cubic_lut_len);
|
||||
}
|
||||
}
|
||||
#else
|
||||
static void vop2_cubic_lut_init(struct vop2 *vop2) { }
|
||||
#endif
|
||||
|
||||
static int vop2_core_clks_prepare_enable(struct vop2 *vop2)
|
||||
{
|
||||
@@ -9755,13 +9745,11 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_crtc_state
|
||||
vp->gamma_lut = crtc->state->gamma_lut->data;
|
||||
vop2_crtc_atomic_gamma_set(crtc, crtc->state);
|
||||
}
|
||||
#if defined(CONFIG_ROCKCHIP_DRM_CUBIC_LUT)
|
||||
if (crtc->state->cubic_lut || vp->cubic_lut) {
|
||||
if (crtc->state->cubic_lut)
|
||||
vp->cubic_lut = crtc->state->cubic_lut->data;
|
||||
if (vcstate->cubic_lut_data || vp->cubic_lut) {
|
||||
if (vcstate->cubic_lut_data)
|
||||
vp->cubic_lut = vcstate->cubic_lut_data->data;
|
||||
vop2_crtc_atomic_cubic_lut_set(crtc, crtc->state);
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
VOP_MODULE_SET(vop2, vp, cubic_lut_update_en, 0);
|
||||
}
|
||||
@@ -9874,6 +9862,8 @@ static struct drm_crtc_state *vop2_crtc_duplicate_state(struct drm_crtc *crtc)
|
||||
drm_property_blob_get(vcstate->acm_lut_data);
|
||||
if (vcstate->post_csc_data)
|
||||
drm_property_blob_get(vcstate->post_csc_data);
|
||||
if (vcstate->cubic_lut_data)
|
||||
drm_property_blob_get(vcstate->cubic_lut_data);
|
||||
|
||||
__drm_atomic_helper_crtc_duplicate_state(crtc, &vcstate->base);
|
||||
return &vcstate->base;
|
||||
@@ -9888,6 +9878,7 @@ static void vop2_crtc_destroy_state(struct drm_crtc *crtc,
|
||||
drm_property_blob_put(vcstate->hdr_ext_data);
|
||||
drm_property_blob_put(vcstate->acm_lut_data);
|
||||
drm_property_blob_put(vcstate->post_csc_data);
|
||||
drm_property_blob_put(vcstate->cubic_lut_data);
|
||||
kfree(vcstate);
|
||||
}
|
||||
|
||||
@@ -10034,6 +10025,11 @@ static int vop2_crtc_atomic_get_property(struct drm_crtc *crtc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (property == private->cubic_lut_prop) {
|
||||
*val = (vcstate->cubic_lut_data) ? vcstate->cubic_lut_data->base.id : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DRM_ERROR("failed to get vop2 crtc property: %s\n", property->name);
|
||||
|
||||
return -EINVAL;
|
||||
@@ -10159,6 +10155,16 @@ static int vop2_crtc_atomic_set_property(struct drm_crtc *crtc,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (property == private->cubic_lut_prop) {
|
||||
ret = vop2_atomic_replace_property_blob_from_id(drm_dev,
|
||||
&vcstate->cubic_lut_data,
|
||||
val,
|
||||
-1, sizeof(struct drm_color_lut),
|
||||
&replaced);
|
||||
state->color_mgmt_changed |= replaced;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DRM_ERROR("failed to set vop2 crtc property %s\n", property->name);
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
Reference in New Issue
Block a user