|
@@ -2358,8 +2358,15 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode,
|
|
static enum dc_color_depth
|
|
static enum dc_color_depth
|
|
convert_color_depth_from_display_info(const struct drm_connector *connector)
|
|
convert_color_depth_from_display_info(const struct drm_connector *connector)
|
|
{
|
|
{
|
|
|
|
+ struct dm_connector_state *dm_conn_state =
|
|
|
|
+ to_dm_connector_state(connector->state);
|
|
uint32_t bpc = connector->display_info.bpc;
|
|
uint32_t bpc = connector->display_info.bpc;
|
|
|
|
|
|
|
|
+ /* TODO: Remove this when there's support for max_bpc in drm */
|
|
|
|
+ if (dm_conn_state && bpc > dm_conn_state->max_bpc)
|
|
|
|
+ /* Round down to nearest even number. */
|
|
|
|
+ bpc = dm_conn_state->max_bpc - (dm_conn_state->max_bpc & 1);
|
|
|
|
+
|
|
switch (bpc) {
|
|
switch (bpc) {
|
|
case 0:
|
|
case 0:
|
|
/*
|
|
/*
|
|
@@ -2943,6 +2950,9 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector,
|
|
} else if (property == adev->mode_info.underscan_property) {
|
|
} else if (property == adev->mode_info.underscan_property) {
|
|
dm_new_state->underscan_enable = val;
|
|
dm_new_state->underscan_enable = val;
|
|
ret = 0;
|
|
ret = 0;
|
|
|
|
+ } else if (property == adev->mode_info.max_bpc_property) {
|
|
|
|
+ dm_new_state->max_bpc = val;
|
|
|
|
+ ret = 0;
|
|
}
|
|
}
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
@@ -2985,6 +2995,9 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
|
|
} else if (property == adev->mode_info.underscan_property) {
|
|
} else if (property == adev->mode_info.underscan_property) {
|
|
*val = dm_state->underscan_enable;
|
|
*val = dm_state->underscan_enable;
|
|
ret = 0;
|
|
ret = 0;
|
|
|
|
+ } else if (property == adev->mode_info.max_bpc_property) {
|
|
|
|
+ *val = dm_state->max_bpc;
|
|
|
|
+ ret = 0;
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -3795,6 +3808,9 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
|
|
drm_object_attach_property(&aconnector->base.base,
|
|
drm_object_attach_property(&aconnector->base.base,
|
|
adev->mode_info.underscan_vborder_property,
|
|
adev->mode_info.underscan_vborder_property,
|
|
0);
|
|
0);
|
|
|
|
+ drm_object_attach_property(&aconnector->base.base,
|
|
|
|
+ adev->mode_info.max_bpc_property,
|
|
|
|
+ 0);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|