Skip to content

Commit 37aa52b

Browse files
committed
drm/i915: Add broadcast RGB property for DP MST
Add the "Broadcast RGB" property to MST connectors, and implement the same logic for it as we have in the SST code. v2: Extract and reuse intel_dp_limited_color_range() Cc: Ivan Vlk <[email protected]> Tested-by: Ivan Vlk <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108821 Signed-off-by: Ville Syrjälä <[email protected]> Reviewed-by: Jani Nikula <[email protected]> #v1 Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 547fcf9 commit 37aa52b

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

drivers/gpu/drm/i915/intel_dp.c

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2107,6 +2107,29 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
21072107
return 0;
21082108
}
21092109

2110+
bool intel_dp_limited_color_range(const struct intel_crtc_state *crtc_state,
2111+
const struct drm_connector_state *conn_state)
2112+
{
2113+
const struct intel_digital_connector_state *intel_conn_state =
2114+
to_intel_digital_connector_state(conn_state);
2115+
const struct drm_display_mode *adjusted_mode =
2116+
&crtc_state->base.adjusted_mode;
2117+
2118+
if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
2119+
/*
2120+
* See:
2121+
* CEA-861-E - 5.1 Default Encoding Parameters
2122+
* VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
2123+
*/
2124+
return crtc_state->pipe_bpp != 18 &&
2125+
drm_default_rgb_quant_range(adjusted_mode) ==
2126+
HDMI_QUANTIZATION_RANGE_LIMITED;
2127+
} else {
2128+
return intel_conn_state->broadcast_rgb ==
2129+
INTEL_BROADCAST_RGB_LIMITED;
2130+
}
2131+
}
2132+
21102133
int
21112134
intel_dp_compute_config(struct intel_encoder *encoder,
21122135
struct intel_crtc_state *pipe_config,
@@ -2175,20 +2198,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
21752198
if (ret < 0)
21762199
return ret;
21772200

2178-
if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) {
2179-
/*
2180-
* See:
2181-
* CEA-861-E - 5.1 Default Encoding Parameters
2182-
* VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
2183-
*/
2184-
pipe_config->limited_color_range =
2185-
pipe_config->pipe_bpp != 18 &&
2186-
drm_default_rgb_quant_range(adjusted_mode) ==
2187-
HDMI_QUANTIZATION_RANGE_LIMITED;
2188-
} else {
2189-
pipe_config->limited_color_range =
2190-
intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
2191-
}
2201+
pipe_config->limited_color_range =
2202+
intel_dp_limited_color_range(pipe_config, conn_state);
21922203

21932204
if (!pipe_config->dsc_params.compression_enable)
21942205
intel_link_compute_m_n(pipe_config->pipe_bpp,

drivers/gpu/drm/i915/intel_dp_mst.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
7777
if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port))
7878
pipe_config->has_audio = true;
7979

80+
pipe_config->limited_color_range =
81+
intel_dp_limited_color_range(pipe_config, conn_state);
82+
8083
mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
8184
pipe_config->pbn = mst_pbn;
8285

@@ -117,7 +120,11 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
117120
struct drm_crtc *new_crtc = new_conn_state->crtc;
118121
struct drm_crtc_state *crtc_state;
119122
struct drm_dp_mst_topology_mgr *mgr;
120-
int ret = 0;
123+
int ret;
124+
125+
ret = intel_digital_connector_atomic_check(connector, new_conn_state);
126+
if (ret)
127+
return ret;
121128

122129
if (!old_conn_state->crtc)
123130
return 0;
@@ -354,11 +361,13 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
354361
static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
355362
.detect = intel_dp_mst_detect,
356363
.fill_modes = drm_helper_probe_single_connector_modes,
364+
.atomic_get_property = intel_digital_connector_atomic_get_property,
365+
.atomic_set_property = intel_digital_connector_atomic_set_property,
357366
.late_register = intel_connector_register,
358367
.early_unregister = intel_connector_unregister,
359368
.destroy = intel_connector_destroy,
360369
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
361-
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
370+
.atomic_duplicate_state = intel_digital_connector_duplicate_state,
362371
};
363372

364373
static int intel_dp_mst_get_modes(struct drm_connector *connector)
@@ -487,6 +496,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
487496
if (ret)
488497
goto err;
489498

499+
intel_attach_broadcast_rgb_property(connector);
500+
490501
return connector;
491502

492503
err:

drivers/gpu/drm/i915/intel_drv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,6 +1908,8 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
19081908
void intel_csr_ucode_resume(struct drm_i915_private *);
19091909

19101910
/* intel_dp.c */
1911+
bool intel_dp_limited_color_range(const struct intel_crtc_state *crtc_state,
1912+
const struct drm_connector_state *conn_state);
19111913
bool intel_dp_port_enabled(struct drm_i915_private *dev_priv,
19121914
i915_reg_t dp_reg, enum port port,
19131915
enum pipe *pipe);

0 commit comments

Comments
 (0)