aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2019-01-08 12:28:25 -0500
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-01-10 12:01:06 -0500
commit13d0add333afea7b2fef77473232b10dea3627dd (patch)
tree00b1cb6aab40b6e08ae001277a4ca4be75b96cb5
parent2b5ab0eeb5ca72ce1a8c7e0f6c5c1a4dd9bdc908 (diff)
drm/edid: Pass connector to AVI infoframe functions
Make life easier for drivers by simply passing the connector to drm_hdmi_avi_infoframe_from_display_mode() and drm_hdmi_avi_infoframe_quant_range(). That way drivers don't need to worry about is_hdmi2_sink mess. v2: Make is_hdmi2_sink() return true for sil-sii8620 Adapt to omap/vc4 changes Cc: Alex Deucher <alexander.deucher@amd.com> Cc: "Christian König" <christian.koenig@amd.com> Cc: "David (ChunMing) Zhou" <David1.Zhou@amd.com> Cc: Archit Taneja <architt@codeaurora.org> Cc: Andrzej Hajda <a.hajda@samsung.com> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: Inki Dae <inki.dae@samsung.com> Cc: Joonyoung Shim <jy0922.shim@samsung.com> Cc: Seung-Woo Kim <sw0312.kim@samsung.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Russell King <linux@armlinux.org.uk> Cc: CK Hu <ck.hu@mediatek.com> Cc: Philipp Zabel <p.zabel@pengutronix.de> Cc: Rob Clark <robdclark@gmail.com> Cc: Ben Skeggs <bskeggs@redhat.com> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Sandy Huang <hjc@rock-chips.com> Cc: "Heiko Stübner" <heiko@sntech.de> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org> Cc: Vincent Abriou <vincent.abriou@st.com> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Eric Anholt <eric@anholt.net> Cc: Shawn Guo <shawnguo@kernel.org> Cc: Ilia Mirkin <imirkin@alum.mit.edu> Cc: amd-gfx@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: nouveau@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Acked-by: Thierry Reding <treding@nvidia.com> Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190108172828.15184-1-ville.syrjala@linux.intel.com
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v10_0.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v11_0.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v6_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v8_0.c2
-rw-r--r--drivers/gpu/drm/bridge/analogix-anx78xx.c5
-rw-r--r--drivers/gpu/drm/bridge/sii902x.c3
-rw-r--r--drivers/gpu/drm/bridge/sil-sii8620.c3
-rw-r--r--drivers/gpu/drm/bridge/synopsys/dw-hdmi.c3
-rw-r--r--drivers/gpu/drm/drm_edid.c33
-rw-r--r--drivers/gpu/drm/exynos/exynos_hdmi.c3
-rw-r--r--drivers/gpu/drm/i2c/tda998x_drv.c3
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c14
-rw-r--r--drivers/gpu/drm/i915/intel_lspcon.c15
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c10
-rw-r--r--drivers/gpu/drm/mediatek/mtk_hdmi.c3
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi_bridge.c3
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/disp.c7
-rw-r--r--drivers/gpu/drm/omapdrm/omap_encoder.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_audio.c2
-rw-r--r--drivers/gpu/drm/rockchip/inno_hdmi.c4
-rw-r--r--drivers/gpu/drm/sti/sti_hdmi.c3
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c3
-rw-r--r--drivers/gpu/drm/tegra/hdmi.c3
-rw-r--r--drivers/gpu/drm/tegra/sor.c3
-rw-r--r--drivers/gpu/drm/vc4/vc4_hdmi.c9
-rw-r--r--drivers/gpu/drm/zte/zx_hdmi.c4
-rw-r--r--include/drm/drm_edid.h8
27 files changed, 91 insertions, 66 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 4cfecdce29a3..1f0426d2fc2a 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -1682,7 +1682,7 @@ static void dce_v10_0_afmt_setmode(struct drm_encoder *encoder,
1682 dce_v10_0_audio_write_sad_regs(encoder); 1682 dce_v10_0_audio_write_sad_regs(encoder);
1683 dce_v10_0_audio_write_latency_fields(encoder, mode); 1683 dce_v10_0_audio_write_latency_fields(encoder, mode);
1684 1684
1685 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 1685 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
1686 if (err < 0) { 1686 if (err < 0) {
1687 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); 1687 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err);
1688 return; 1688 return;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 7c868916d90f..2280b971d758 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -1724,7 +1724,7 @@ static void dce_v11_0_afmt_setmode(struct drm_encoder *encoder,
1724 dce_v11_0_audio_write_sad_regs(encoder); 1724 dce_v11_0_audio_write_sad_regs(encoder);
1725 dce_v11_0_audio_write_latency_fields(encoder, mode); 1725 dce_v11_0_audio_write_latency_fields(encoder, mode);
1726 1726
1727 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 1727 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
1728 if (err < 0) { 1728 if (err < 0) {
1729 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); 1729 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err);
1730 return; 1730 return;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index 17eaaba36017..db443ec53d3a 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -1423,6 +1423,7 @@ static void dce_v6_0_audio_set_avi_infoframe(struct drm_encoder *encoder,
1423 struct amdgpu_device *adev = dev->dev_private; 1423 struct amdgpu_device *adev = dev->dev_private;
1424 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); 1424 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
1425 struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; 1425 struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv;
1426 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder);
1426 struct hdmi_avi_infoframe frame; 1427 struct hdmi_avi_infoframe frame;
1427 u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE]; 1428 u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE];
1428 uint8_t *payload = buffer + 3; 1429 uint8_t *payload = buffer + 3;
@@ -1430,7 +1431,7 @@ static void dce_v6_0_audio_set_avi_infoframe(struct drm_encoder *encoder,
1430 ssize_t err; 1431 ssize_t err;
1431 u32 tmp; 1432 u32 tmp;
1432 1433
1433 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 1434 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
1434 if (err < 0) { 1435 if (err < 0) {
1435 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); 1436 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err);
1436 return; 1437 return;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 8c0576978d36..13da915991dd 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1616,7 +1616,7 @@ static void dce_v8_0_afmt_setmode(struct drm_encoder *encoder,
1616 dce_v8_0_audio_write_sad_regs(encoder); 1616 dce_v8_0_audio_write_sad_regs(encoder);
1617 dce_v8_0_audio_write_latency_fields(encoder, mode); 1617 dce_v8_0_audio_write_latency_fields(encoder, mode);
1618 1618
1619 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 1619 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
1620 if (err < 0) { 1620 if (err < 0) {
1621 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); 1621 DRM_ERROR("failed to setup AVI infoframe: %zd\n", err);
1622 return; 1622 return;
diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c
index f8433c93f463..e11309e9bc4f 100644
--- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
+++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
@@ -1094,8 +1094,9 @@ static void anx78xx_bridge_mode_set(struct drm_bridge *bridge,
1094 1094
1095 mutex_lock(&anx78xx->lock); 1095 mutex_lock(&anx78xx->lock);
1096 1096
1097 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, adjusted_mode, 1097 err = drm_hdmi_avi_infoframe_from_display_mode(&frame,
1098 false); 1098 &anx78xx->connector,
1099 adjusted_mode);
1099 if (err) { 1100 if (err) {
1100 DRM_ERROR("Failed to setup AVI infoframe: %d\n", err); 1101 DRM_ERROR("Failed to setup AVI infoframe: %d\n", err);
1101 goto unlock; 1102 goto unlock;
diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
index bfa902013aa4..a9b4f45ae87c 100644
--- a/drivers/gpu/drm/bridge/sii902x.c
+++ b/drivers/gpu/drm/bridge/sii902x.c
@@ -258,7 +258,8 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge,
258 if (ret) 258 if (ret)
259 return; 259 return;
260 260
261 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, adj, false); 261 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame,
262 &sii902x->connector, adj);
262 if (ret < 0) { 263 if (ret < 0) {
263 DRM_ERROR("couldn't fill AVI infoframe\n"); 264 DRM_ERROR("couldn't fill AVI infoframe\n");
264 return; 265 return;
diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
index a6e8f4591e63..0cc293a6ac24 100644
--- a/drivers/gpu/drm/bridge/sil-sii8620.c
+++ b/drivers/gpu/drm/bridge/sil-sii8620.c
@@ -1104,8 +1104,7 @@ static void sii8620_set_infoframes(struct sii8620 *ctx,
1104 int ret; 1104 int ret;
1105 1105
1106 ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, 1106 ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi,
1107 mode, 1107 NULL, mode);
1108 true);
1109 if (ctx->use_packed_pixel) 1108 if (ctx->use_packed_pixel)
1110 frm.avi.colorspace = HDMI_COLORSPACE_YUV422; 1109 frm.avi.colorspace = HDMI_COLORSPACE_YUV422;
1111 1110
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 64c3cf027518..88b720b63126 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1344,7 +1344,8 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode)
1344 u8 val; 1344 u8 val;
1345 1345
1346 /* Initialise info frame from DRM mode */ 1346 /* Initialise info frame from DRM mode */
1347 drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 1347 drm_hdmi_avi_infoframe_from_display_mode(&frame,
1348 &hdmi->connector, mode);
1348 1349
1349 if (hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format)) 1350 if (hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format))
1350 frame.colorspace = HDMI_COLORSPACE_YUV444; 1351 frame.colorspace = HDMI_COLORSPACE_YUV444;
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index b506e3622b08..cd25bd08bf53 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -4830,19 +4830,32 @@ void drm_set_preferred_mode(struct drm_connector *connector,
4830} 4830}
4831EXPORT_SYMBOL(drm_set_preferred_mode); 4831EXPORT_SYMBOL(drm_set_preferred_mode);
4832 4832
4833static bool is_hdmi2_sink(struct drm_connector *connector)
4834{
4835 /*
4836 * FIXME: sil-sii8620 doesn't have a connector around when
4837 * we need one, so we have to be prepared for a NULL connector.
4838 */
4839 if (!connector)
4840 return true;
4841
4842 return connector->display_info.hdmi.scdc.supported ||
4843 connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB420;
4844}
4845
4833/** 4846/**
4834 * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with 4847 * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with
4835 * data from a DRM display mode 4848 * data from a DRM display mode
4836 * @frame: HDMI AVI infoframe 4849 * @frame: HDMI AVI infoframe
4850 * @connector: the connector
4837 * @mode: DRM display mode 4851 * @mode: DRM display mode
4838 * @is_hdmi2_sink: Sink is HDMI 2.0 compliant
4839 * 4852 *
4840 * Return: 0 on success or a negative error code on failure. 4853 * Return: 0 on success or a negative error code on failure.
4841 */ 4854 */
4842int 4855int
4843drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, 4856drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
4844 const struct drm_display_mode *mode, 4857 struct drm_connector *connector,
4845 bool is_hdmi2_sink) 4858 const struct drm_display_mode *mode)
4846{ 4859{
4847 enum hdmi_picture_aspect picture_aspect; 4860 enum hdmi_picture_aspect picture_aspect;
4848 int err; 4861 int err;
@@ -4864,7 +4877,7 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
4864 * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we 4877 * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we
4865 * have to make sure we dont break HDMI 1.4 sinks. 4878 * have to make sure we dont break HDMI 1.4 sinks.
4866 */ 4879 */
4867 if (!is_hdmi2_sink && frame->video_code > 64) 4880 if (!is_hdmi2_sink(connector) && frame->video_code > 64)
4868 frame->video_code = 0; 4881 frame->video_code = 0;
4869 4882
4870 /* 4883 /*
@@ -4923,21 +4936,17 @@ EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
4923 * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe 4936 * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
4924 * quantization range information 4937 * quantization range information
4925 * @frame: HDMI AVI infoframe 4938 * @frame: HDMI AVI infoframe
4939 * @connector: the connector
4926 * @mode: DRM display mode 4940 * @mode: DRM display mode
4927 * @rgb_quant_range: RGB quantization range (Q) 4941 * @rgb_quant_range: RGB quantization range (Q)
4928 * @rgb_quant_range_selectable: Sink support selectable RGB quantization range (QS) 4942 * @rgb_quant_range_selectable: Sink support selectable RGB quantization range (QS)
4929 * @is_hdmi2_sink: HDMI 2.0 sink, which has different default recommendations
4930 *
4931 * Note that @is_hdmi2_sink can be derived by looking at the
4932 * &drm_scdc.supported flag stored in &drm_hdmi_info.scdc,
4933 * &drm_display_info.hdmi, which can be found in &drm_connector.display_info.
4934 */ 4943 */
4935void 4944void
4936drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, 4945drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
4946 struct drm_connector *connector,
4937 const struct drm_display_mode *mode, 4947 const struct drm_display_mode *mode,
4938 enum hdmi_quantization_range rgb_quant_range, 4948 enum hdmi_quantization_range rgb_quant_range,
4939 bool rgb_quant_range_selectable, 4949 bool rgb_quant_range_selectable)
4940 bool is_hdmi2_sink)
4941{ 4950{
4942 /* 4951 /*
4943 * CEA-861: 4952 * CEA-861:
@@ -4968,7 +4977,7 @@ drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
4968 * we limit non-zero YQ to HDMI 2.0 sinks only as HDMI 2.0 is based 4977 * we limit non-zero YQ to HDMI 2.0 sinks only as HDMI 2.0 is based
4969 * on on CEA-861-F. 4978 * on on CEA-861-F.
4970 */ 4979 */
4971 if (!is_hdmi2_sink || 4980 if (!is_hdmi2_sink(connector) ||
4972 rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED) 4981 rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED)
4973 frame->ycc_quantization_range = 4982 frame->ycc_quantization_range =
4974 HDMI_YCC_QUANTIZATION_RANGE_LIMITED; 4983 HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 2092a650df7d..b857df67aff0 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -819,7 +819,8 @@ static void hdmi_reg_infoframes(struct hdmi_context *hdata)
819 return; 819 return;
820 } 820 }
821 821
822 ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, m, false); 822 ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi,
823 &hdata->connector, m);
823 if (!ret) 824 if (!ret)
824 ret = hdmi_avi_infoframe_pack(&frm.avi, buf, sizeof(buf)); 825 ret = hdmi_avi_infoframe_pack(&frm.avi, buf, sizeof(buf));
825 if (ret > 0) { 826 if (ret > 0) {
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index a7c39f39793f..38c66fbc8276 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -849,7 +849,8 @@ tda998x_write_avi(struct tda998x_priv *priv, struct drm_display_mode *mode)
849{ 849{
850 union hdmi_infoframe frame; 850 union hdmi_infoframe frame;
851 851
852 drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); 852 drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
853 &priv->connector, mode);
853 frame.avi.quantization_range = HDMI_QUANTIZATION_RANGE_FULL; 854 frame.avi.quantization_range = HDMI_QUANTIZATION_RANGE_FULL;
854 855
855 tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, &frame); 856 tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, &frame);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index e2c6a2b3e8f2..8a260bd6954c 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -465,15 +465,12 @@ static void intel_hdmi_set_avi_infoframe(struct intel_encoder *encoder,
465 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); 465 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
466 const struct drm_display_mode *adjusted_mode = 466 const struct drm_display_mode *adjusted_mode =
467 &crtc_state->base.adjusted_mode; 467 &crtc_state->base.adjusted_mode;
468 struct drm_connector *connector = &intel_hdmi->attached_connector->base;
469 bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported ||
470 connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB420;
471 union hdmi_infoframe frame; 468 union hdmi_infoframe frame;
472 int ret; 469 int ret;
473 470
474 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, 471 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
475 adjusted_mode, 472 conn_state->connector,
476 is_hdmi2_sink); 473 adjusted_mode);
477 if (ret < 0) { 474 if (ret < 0) {
478 DRM_ERROR("couldn't fill AVI infoframe\n"); 475 DRM_ERROR("couldn't fill AVI infoframe\n");
479 return; 476 return;
@@ -486,12 +483,13 @@ static void intel_hdmi_set_avi_infoframe(struct intel_encoder *encoder,
486 else 483 else
487 frame.avi.colorspace = HDMI_COLORSPACE_RGB; 484 frame.avi.colorspace = HDMI_COLORSPACE_RGB;
488 485
489 drm_hdmi_avi_infoframe_quant_range(&frame.avi, adjusted_mode, 486 drm_hdmi_avi_infoframe_quant_range(&frame.avi,
487 conn_state->connector,
488 adjusted_mode,
490 crtc_state->limited_color_range ? 489 crtc_state->limited_color_range ?
491 HDMI_QUANTIZATION_RANGE_LIMITED : 490 HDMI_QUANTIZATION_RANGE_LIMITED :
492 HDMI_QUANTIZATION_RANGE_FULL, 491 HDMI_QUANTIZATION_RANGE_FULL,
493 intel_hdmi->rgb_quant_range_selectable, 492 intel_hdmi->rgb_quant_range_selectable);
494 is_hdmi2_sink);
495 493
496 drm_hdmi_avi_infoframe_content_type(&frame.avi, 494 drm_hdmi_avi_infoframe_content_type(&frame.avi,
497 conn_state); 495 conn_state);
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 96a8d9524b0c..c18f14d41f1d 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -462,10 +462,8 @@ void lspcon_set_infoframes(struct intel_encoder *encoder,
462 uint8_t buf[VIDEO_DIP_DATA_SIZE]; 462 uint8_t buf[VIDEO_DIP_DATA_SIZE];
463 struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base); 463 struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
464 struct intel_lspcon *lspcon = &dig_port->lspcon; 464 struct intel_lspcon *lspcon = &dig_port->lspcon;
465 struct intel_dp *intel_dp = &dig_port->dp; 465 const struct drm_display_mode *adjusted_mode =
466 struct drm_connector *connector = &intel_dp->attached_connector->base; 466 &crtc_state->base.adjusted_mode;
467 const struct drm_display_mode *mode = &crtc_state->base.adjusted_mode;
468 bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported;
469 467
470 if (!lspcon->active) { 468 if (!lspcon->active) {
471 DRM_ERROR("Writing infoframes while LSPCON disabled ?\n"); 469 DRM_ERROR("Writing infoframes while LSPCON disabled ?\n");
@@ -473,7 +471,8 @@ void lspcon_set_infoframes(struct intel_encoder *encoder,
473 } 471 }
474 472
475 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, 473 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
476 mode, is_hdmi2_sink); 474 conn_state->connector,
475 adjusted_mode);
477 if (ret < 0) { 476 if (ret < 0) {
478 DRM_ERROR("couldn't fill AVI infoframe\n"); 477 DRM_ERROR("couldn't fill AVI infoframe\n");
479 return; 478 return;
@@ -488,11 +487,13 @@ void lspcon_set_infoframes(struct intel_encoder *encoder,
488 frame.avi.colorspace = HDMI_COLORSPACE_RGB; 487 frame.avi.colorspace = HDMI_COLORSPACE_RGB;
489 } 488 }
490 489
491 drm_hdmi_avi_infoframe_quant_range(&frame.avi, mode, 490 drm_hdmi_avi_infoframe_quant_range(&frame.avi,
491 conn_state->connector,
492 adjusted_mode,
492 crtc_state->limited_color_range ? 493 crtc_state->limited_color_range ?
493 HDMI_QUANTIZATION_RANGE_LIMITED : 494 HDMI_QUANTIZATION_RANGE_LIMITED :
494 HDMI_QUANTIZATION_RANGE_FULL, 495 HDMI_QUANTIZATION_RANGE_FULL,
495 false, is_hdmi2_sink); 496 false);
496 497
497 ret = hdmi_infoframe_pack(&frame, buf, sizeof(buf)); 498 ret = hdmi_infoframe_pack(&frame, buf, sizeof(buf));
498 if (ret < 0) { 499 if (ret < 0) {
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 5805ec1aba12..1277d31adb54 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -981,7 +981,8 @@ static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo,
981} 981}
982 982
983static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, 983static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
984 const struct intel_crtc_state *pipe_config) 984 const struct intel_crtc_state *pipe_config,
985 const struct drm_connector_state *conn_state)
985{ 986{
986 uint8_t sdvo_data[HDMI_INFOFRAME_SIZE(AVI)]; 987 uint8_t sdvo_data[HDMI_INFOFRAME_SIZE(AVI)];
987 union hdmi_infoframe frame; 988 union hdmi_infoframe frame;
@@ -989,8 +990,8 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
989 ssize_t len; 990 ssize_t len;
990 991
991 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, 992 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
992 &pipe_config->base.adjusted_mode, 993 conn_state->connector,
993 false); 994 &pipe_config->base.adjusted_mode);
994 if (ret < 0) { 995 if (ret < 0) {
995 DRM_ERROR("couldn't fill AVI infoframe\n"); 996 DRM_ERROR("couldn't fill AVI infoframe\n");
996 return false; 997 return false;
@@ -1316,7 +1317,8 @@ static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder,
1316 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI); 1317 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI);
1317 intel_sdvo_set_colorimetry(intel_sdvo, 1318 intel_sdvo_set_colorimetry(intel_sdvo,
1318 SDVO_COLORIMETRY_RGB256); 1319 SDVO_COLORIMETRY_RGB256);
1319 intel_sdvo_set_avi_infoframe(intel_sdvo, crtc_state); 1320 intel_sdvo_set_avi_infoframe(intel_sdvo,
1321 crtc_state, conn_state);
1320 } else 1322 } else
1321 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI); 1323 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI);
1322 1324
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 862f3ec22131..f3ef7bf80563 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -981,7 +981,8 @@ static int mtk_hdmi_setup_avi_infoframe(struct mtk_hdmi *hdmi,
981 u8 buffer[17]; 981 u8 buffer[17];
982 ssize_t err; 982 ssize_t err;
983 983
984 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 984 err = drm_hdmi_avi_infoframe_from_display_mode(&frame,
985 &hdmi->conn, mode);
985 if (err < 0) { 986 if (err < 0) {
986 dev_err(hdmi->dev, 987 dev_err(hdmi->dev,
987 "Failed to get AVI infoframe from mode: %zd\n", err); 988 "Failed to get AVI infoframe from mode: %zd\n", err);
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index 7e357077ed26..5ed4cab2819f 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -101,7 +101,8 @@ static void msm_hdmi_config_avi_infoframe(struct hdmi *hdmi)
101 u32 val; 101 u32 val;
102 int len; 102 int len;
103 103
104 drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); 104 drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
105 hdmi->connector, mode);
105 106
106 len = hdmi_infoframe_pack(&frame, buffer, sizeof(buffer)); 107 len = hdmi_infoframe_pack(&frame, buffer, sizeof(buffer));
107 if (len < 0) { 108 if (len < 0) {
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 4a56841958c8..f36146d4d9b7 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -554,7 +554,7 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct drm_display_mode *mode)
554 u32 max_ac_packet; 554 u32 max_ac_packet;
555 union hdmi_infoframe avi_frame; 555 union hdmi_infoframe avi_frame;
556 union hdmi_infoframe vendor_frame; 556 union hdmi_infoframe vendor_frame;
557 bool scdc_supported, high_tmds_clock_ratio = false, scrambling = false; 557 bool high_tmds_clock_ratio = false, scrambling = false;
558 u8 config; 558 u8 config;
559 int ret; 559 int ret;
560 int size; 560 int size;
@@ -564,10 +564,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct drm_display_mode *mode)
564 return; 564 return;
565 565
566 hdmi = &nv_connector->base.display_info.hdmi; 566 hdmi = &nv_connector->base.display_info.hdmi;
567 scdc_supported = hdmi->scdc.supported;
568 567
569 ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame.avi, mode, 568 ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame.avi,
570 scdc_supported); 569 &nv_connector->base, mode);
571 if (!ret) { 570 if (!ret) {
572 /* We have an AVI InfoFrame, populate it to the display */ 571 /* We have an AVI InfoFrame, populate it to the display */
573 args.pwr.avi_infoframe_length 572 args.pwr.avi_infoframe_length
diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
index 452e625f6ce3..4566e0a75cb8 100644
--- a/drivers/gpu/drm/omapdrm/omap_encoder.c
+++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
@@ -128,8 +128,8 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder,
128 if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) { 128 if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) {
129 struct hdmi_avi_infoframe avi; 129 struct hdmi_avi_infoframe avi;
130 130
131 r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, 131 r = drm_hdmi_avi_infoframe_from_display_mode(&avi, connector,
132 false); 132 adjusted_mode);
133 if (r == 0) 133 if (r == 0)
134 dssdev->ops->hdmi.set_infoframe(dssdev, &avi); 134 dssdev->ops->hdmi.set_infoframe(dssdev, &avi);
135 } 135 }
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index 770e31f5fd1b..5a7d48339b32 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -516,7 +516,7 @@ static int radeon_audio_set_avi_packet(struct drm_encoder *encoder,
516 if (!connector) 516 if (!connector)
517 return -EINVAL; 517 return -EINVAL;
518 518
519 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 519 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
520 if (err < 0) { 520 if (err < 0) {
521 DRM_ERROR("failed to setup AVI infoframe: %d\n", err); 521 DRM_ERROR("failed to setup AVI infoframe: %d\n", err);
522 return err; 522 return err;
diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
index 1c02b3e61299..27c945e030a0 100644
--- a/drivers/gpu/drm/rockchip/inno_hdmi.c
+++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
@@ -295,7 +295,9 @@ static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
295 union hdmi_infoframe frame; 295 union hdmi_infoframe frame;
296 int rc; 296 int rc;
297 297
298 rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); 298 rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
299 &hdmi->connector,
300 mode);
299 301
300 if (hdmi->hdmi_data.enc_out_format == HDMI_COLORSPACE_YUV444) 302 if (hdmi->hdmi_data.enc_out_format == HDMI_COLORSPACE_YUV444)
301 frame.avi.colorspace = HDMI_COLORSPACE_YUV444; 303 frame.avi.colorspace = HDMI_COLORSPACE_YUV444;
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index ccf718404a1c..4b86878f8ddf 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -434,7 +434,8 @@ static int hdmi_avi_infoframe_config(struct sti_hdmi *hdmi)
434 434
435 DRM_DEBUG_DRIVER("\n"); 435 DRM_DEBUG_DRIVER("\n");
436 436
437 ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe, mode, false); 437 ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe,
438 hdmi->drm_connector, mode);
438 if (ret < 0) { 439 if (ret < 0) {
439 DRM_ERROR("failed to setup AVI infoframe: %d\n", ret); 440 DRM_ERROR("failed to setup AVI infoframe: %d\n", ret);
440 return ret; 441 return ret;
diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
index 061d2e0d9011..554a6f4561f3 100644
--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
@@ -52,7 +52,8 @@ static int sun4i_hdmi_setup_avi_infoframes(struct sun4i_hdmi *hdmi,
52 u8 buffer[17]; 52 u8 buffer[17];
53 int i, ret; 53 int i, ret;
54 54
55 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 55 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame,
56 &hdmi->connector, mode);
56 if (ret < 0) { 57 if (ret < 0) {
57 DRM_ERROR("Failed to get infoframes from mode\n"); 58 DRM_ERROR("Failed to get infoframes from mode\n");
58 return ret; 59 return ret;
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
index 0082468f703c..a7566c67bfb0 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -741,7 +741,8 @@ static void tegra_hdmi_setup_avi_infoframe(struct tegra_hdmi *hdmi,
741 u8 buffer[17]; 741 u8 buffer[17];
742 ssize_t err; 742 ssize_t err;
743 743
744 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 744 err = drm_hdmi_avi_infoframe_from_display_mode(&frame,
745 &hdmi->output.connector, mode);
745 if (err < 0) { 746 if (err < 0) {
746 dev_err(hdmi->dev, "failed to setup AVI infoframe: %zd\n", err); 747 dev_err(hdmi->dev, "failed to setup AVI infoframe: %zd\n", err);
747 return; 748 return;
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index b129da2e5afd..d90bf5f6a67a 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -2116,7 +2116,8 @@ tegra_sor_hdmi_setup_avi_infoframe(struct tegra_sor *sor,
2116 value &= ~INFOFRAME_CTRL_ENABLE; 2116 value &= ~INFOFRAME_CTRL_ENABLE;
2117 tegra_sor_writel(sor, value, SOR_HDMI_AVI_INFOFRAME_CTRL); 2117 tegra_sor_writel(sor, value, SOR_HDMI_AVI_INFOFRAME_CTRL);
2118 2118
2119 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); 2119 err = drm_hdmi_avi_infoframe_from_display_mode(&frame,
2120 &sor->output.connector, mode);
2120 if (err < 0) { 2121 if (err < 0) {
2121 dev_err(sor->dev, "failed to setup AVI infoframe: %d\n", err); 2122 dev_err(sor->dev, "failed to setup AVI infoframe: %d\n", err);
2122 return err; 2123 return err;
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 2f276222e30f..4f9a80f7f242 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -424,18 +424,19 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
424 union hdmi_infoframe frame; 424 union hdmi_infoframe frame;
425 int ret; 425 int ret;
426 426
427 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); 427 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
428 hdmi->connector, mode);
428 if (ret < 0) { 429 if (ret < 0) {
429 DRM_ERROR("couldn't fill AVI infoframe\n"); 430 DRM_ERROR("couldn't fill AVI infoframe\n");
430 return; 431 return;
431 } 432 }
432 433
433 drm_hdmi_avi_infoframe_quant_range(&frame.avi, mode, 434 drm_hdmi_avi_infoframe_quant_range(&frame.avi,
435 hdmi->connector, mode,
434 vc4_encoder->limited_rgb_range ? 436 vc4_encoder->limited_rgb_range ?
435 HDMI_QUANTIZATION_RANGE_LIMITED : 437 HDMI_QUANTIZATION_RANGE_LIMITED :
436 HDMI_QUANTIZATION_RANGE_FULL, 438 HDMI_QUANTIZATION_RANGE_FULL,
437 vc4_encoder->rgb_range_selectable, 439 vc4_encoder->rgb_range_selectable);
438 false);
439 440
440 frame.avi.right_bar = cstate->tv.margins.right; 441 frame.avi.right_bar = cstate->tv.margins.right;
441 frame.avi.left_bar = cstate->tv.margins.left; 442 frame.avi.left_bar = cstate->tv.margins.left;
diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
index 78655269d843..9fc98bb4f3d9 100644
--- a/drivers/gpu/drm/zte/zx_hdmi.c
+++ b/drivers/gpu/drm/zte/zx_hdmi.c
@@ -125,7 +125,9 @@ static int zx_hdmi_config_video_avi(struct zx_hdmi *hdmi,
125 union hdmi_infoframe frame; 125 union hdmi_infoframe frame;
126 int ret; 126 int ret;
127 127
128 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); 128 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
129 &hdmi->connector,
130 mode);
129 if (ret) { 131 if (ret) {
130 DRM_DEV_ERROR(hdmi->dev, "failed to get avi infoframe: %d\n", 132 DRM_DEV_ERROR(hdmi->dev, "failed to get avi infoframe: %d\n",
131 ret); 133 ret);
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index e3c404833115..9db6f130df65 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -352,18 +352,18 @@ drm_load_edid_firmware(struct drm_connector *connector)
352 352
353int 353int
354drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, 354drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
355 const struct drm_display_mode *mode, 355 struct drm_connector *connector,
356 bool is_hdmi2_sink); 356 const struct drm_display_mode *mode);
357int 357int
358drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, 358drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame,
359 struct drm_connector *connector, 359 struct drm_connector *connector,
360 const struct drm_display_mode *mode); 360 const struct drm_display_mode *mode);
361void 361void
362drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, 362drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
363 struct drm_connector *connector,
363 const struct drm_display_mode *mode, 364 const struct drm_display_mode *mode,
364 enum hdmi_quantization_range rgb_quant_range, 365 enum hdmi_quantization_range rgb_quant_range,
365 bool rgb_quant_range_selectable, 366 bool rgb_quant_range_selectable);
366 bool is_hdmi2_sink);
367 367
368/** 368/**
369 * drm_eld_mnl - Get ELD monitor name length in bytes. 369 * drm_eld_mnl - Get ELD monitor name length in bytes.