mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
drm/rockchip: vop2: Add "DIMMING_DATA" property for local dimming
The user can update the dimming data via "DIMMING_DATA" property, and it will be sent to the panel supported local dimming function in the rockchip dimming panel driver. Change-Id: I7dba541450fce86be064d0205af0f595b1712aea Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
This commit is contained in:
@@ -1516,6 +1516,9 @@ static int rockchip_drm_create_properties(struct drm_device *dev)
|
||||
private->cubic_lut_size_prop = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE,
|
||||
"CUBIC_LUT_SIZE", 0, UINT_MAX);
|
||||
|
||||
private->dimming_data_prop = drm_property_create(dev, DRM_MODE_PROP_BLOB,
|
||||
"DIMMING_DATA", 0);
|
||||
|
||||
return drm_mode_create_tv_properties(dev, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -298,6 +298,8 @@ struct rockchip_crtc_state {
|
||||
*/
|
||||
bool sharp_en;
|
||||
|
||||
bool dimming_changed;
|
||||
|
||||
struct drm_tv_connector_state *tv_state;
|
||||
int left_margin;
|
||||
int right_margin;
|
||||
@@ -347,6 +349,7 @@ struct rockchip_crtc_state {
|
||||
struct drm_property_blob *post_csc_data;
|
||||
struct drm_property_blob *post_sharp_data;
|
||||
struct drm_property_blob *cubic_lut_data;
|
||||
struct drm_property_blob *dimming_data;
|
||||
|
||||
int request_refresh_rate;
|
||||
int max_refresh_rate;
|
||||
@@ -579,6 +582,9 @@ struct rockchip_drm_private {
|
||||
struct drm_property *connector_id_prop;
|
||||
struct drm_property *split_area_prop;
|
||||
|
||||
/* private local dimming prop */
|
||||
struct drm_property *dimming_data_prop;
|
||||
|
||||
const struct rockchip_crtc_funcs *crtc_funcs[ROCKCHIP_MAX_CRTC];
|
||||
|
||||
uint64_t iommu_fault_count;
|
||||
|
||||
@@ -13635,6 +13635,8 @@ static struct drm_crtc_state *vop2_crtc_duplicate_state(struct drm_crtc *crtc)
|
||||
drm_property_blob_get(vcstate->cubic_lut_data);
|
||||
if (vcstate->post_sharp_data)
|
||||
drm_property_blob_get(vcstate->post_sharp_data);
|
||||
if (vcstate->dimming_data)
|
||||
drm_property_blob_get(vcstate->dimming_data);
|
||||
|
||||
__drm_atomic_helper_crtc_duplicate_state(crtc, &vcstate->base);
|
||||
return &vcstate->base;
|
||||
@@ -13651,6 +13653,7 @@ static void vop2_crtc_destroy_state(struct drm_crtc *crtc,
|
||||
drm_property_blob_put(vcstate->post_csc_data);
|
||||
drm_property_blob_put(vcstate->cubic_lut_data);
|
||||
drm_property_blob_put(vcstate->post_sharp_data);
|
||||
drm_property_blob_put(vcstate->dimming_data);
|
||||
kfree(vcstate);
|
||||
}
|
||||
|
||||
@@ -13846,6 +13849,11 @@ static int vop2_crtc_atomic_get_property(struct drm_crtc *crtc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (property == private->dimming_data_prop) {
|
||||
*val = (vcstate->dimming_data) ? vcstate->dimming_data->base.id : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DRM_ERROR("failed to get vop2 crtc property: %s\n", property->name);
|
||||
|
||||
return -EINVAL;
|
||||
@@ -14006,6 +14014,16 @@ static int vop2_crtc_atomic_set_property(struct drm_crtc *crtc,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (property == private->dimming_data_prop) {
|
||||
ret = vop2_atomic_replace_property_blob_from_id(drm_dev,
|
||||
&vcstate->dimming_data,
|
||||
val,
|
||||
-1, -1,
|
||||
&replaced);
|
||||
vcstate->dimming_changed |= replaced;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DRM_ERROR("failed to set vop2 crtc property %s\n", property->name);
|
||||
|
||||
return -EINVAL;
|
||||
@@ -15327,6 +15345,7 @@ static int vop2_create_crtc(struct vop2 *vop2, uint8_t enabled_vp_mask)
|
||||
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->dimming_data_prop, 0);
|
||||
if (vp_data->feature & VOP_FEATURE_OVERSCAN) {
|
||||
drm_object_attach_property(&crtc->base,
|
||||
drm_dev->mode_config.tv_left_margin_property, 100);
|
||||
|
||||
Reference in New Issue
Block a user