On Tue, 20 Nov 2018, Ville Syrjala <ville.syrjala@xxxxxxxxxxxxxxx> wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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. Overall looks about right and nice, Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> But please do take that with a grain of salt for everything outside of i915 and drm core. Please also find a few comments inline below. > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: "Christian König" <christian.koenig@xxxxxxx> > Cc: "David (ChunMing) Zhou" <David1.Zhou@xxxxxxx> > Cc: Archit Taneja <architt@xxxxxxxxxxxxxx> > Cc: Andrzej Hajda <a.hajda@xxxxxxxxxxx> > Cc: Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx> > Cc: Inki Dae <inki.dae@xxxxxxxxxxx> > Cc: Joonyoung Shim <jy0922.shim@xxxxxxxxxxx> > Cc: Seung-Woo Kim <sw0312.kim@xxxxxxxxxxx> > Cc: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxx> > Cc: CK Hu <ck.hu@xxxxxxxxxxxx> > Cc: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> > Cc: Rob Clark <robdclark@xxxxxxxxx> > Cc: Ben Skeggs <bskeggs@xxxxxxxxxx> > Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > Cc: Sandy Huang <hjc@xxxxxxxxxxxxxx> > Cc: "Heiko Stübner" <heiko@xxxxxxxxx> > Cc: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx> > Cc: Vincent Abriou <vincent.abriou@xxxxxx> > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > Cc: Eric Anholt <eric@xxxxxxxxxx> > Cc: Shawn Guo <shawnguo@xxxxxxxxxx> > Cc: Ilia Mirkin <imirkin@xxxxxxxxxxxx> > Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: linux-arm-msm@xxxxxxxxxxxxxxx > Cc: freedreno@xxxxxxxxxxxxxxxxxxxxx > Cc: nouveau@xxxxxxxxxxxxxxxxxxxxx > Cc: linux-tegra@xxxxxxxxxxxxxxx > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 3 ++- > drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 2 +- > drivers/gpu/drm/bridge/analogix-anx78xx.c | 5 ++-- > drivers/gpu/drm/bridge/sii902x.c | 3 ++- > drivers/gpu/drm/bridge/sil-sii8620.c | 3 +-- > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 ++- > drivers/gpu/drm/drm_edid.c | 33 ++++++++++++++--------- > drivers/gpu/drm/exynos/exynos_hdmi.c | 3 ++- > drivers/gpu/drm/i2c/tda998x_drv.c | 3 ++- > drivers/gpu/drm/i915/intel_hdmi.c | 14 +++++----- > drivers/gpu/drm/i915/intel_lspcon.c | 15 ++++++----- > drivers/gpu/drm/i915/intel_sdvo.c | 10 ++++--- > drivers/gpu/drm/mediatek/mtk_hdmi.c | 3 ++- > drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 3 ++- > drivers/gpu/drm/nouveau/dispnv50/disp.c | 7 +++-- > drivers/gpu/drm/omapdrm/omap_encoder.c | 5 ++-- > drivers/gpu/drm/radeon/radeon_audio.c | 2 +- > drivers/gpu/drm/rockchip/inno_hdmi.c | 4 ++- > drivers/gpu/drm/sti/sti_hdmi.c | 3 ++- > drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 3 ++- > drivers/gpu/drm/tegra/hdmi.c | 3 ++- > drivers/gpu/drm/tegra/sor.c | 3 ++- > drivers/gpu/drm/vc4/vc4_hdmi.c | 11 +++++--- > drivers/gpu/drm/zte/zx_hdmi.c | 4 ++- > include/drm/drm_edid.h | 8 +++--- > 27 files changed, 94 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, > dce_v10_0_audio_write_sad_regs(encoder); > dce_v10_0_audio_write_latency_fields(encoder, mode); > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); > if (err < 0) { > DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); > 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, > dce_v11_0_audio_write_sad_regs(encoder); > dce_v11_0_audio_write_latency_fields(encoder, mode); > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); > if (err < 0) { > DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); > 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, > struct amdgpu_device *adev = dev->dev_private; > struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); > struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; > + struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); > struct hdmi_avi_infoframe frame; > u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE]; > uint8_t *payload = buffer + 3; > @@ -1430,7 +1431,7 @@ static void dce_v6_0_audio_set_avi_infoframe(struct drm_encoder *encoder, > ssize_t err; > u32 tmp; > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); > if (err < 0) { > DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); > 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, > dce_v8_0_audio_write_sad_regs(encoder); > dce_v8_0_audio_write_latency_fields(encoder, mode); > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); > if (err < 0) { > DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); > 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, > > mutex_lock(&anx78xx->lock); > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, adjusted_mode, > - false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &anx78xx->connector, > + adjusted_mode); > if (err) { > DRM_ERROR("Failed to setup AVI infoframe: %d\n", err); > 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, > if (ret) > return; > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, adj, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &sii902x->connector, adj); > if (ret < 0) { > DRM_ERROR("couldn't fill AVI infoframe\n"); > 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, > int ret; > > ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, > - mode, > - true); > + NULL, mode); > if (ctx->use_packed_pixel) > frm.avi.colorspace = HDMI_COLORSPACE_YUV422; > > 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) > u8 val; > > /* Initialise info frame from DRM mode */ > - drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &hdmi->connector, mode); > > if (hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format)) > frame.colorspace = HDMI_COLORSPACE_YUV444; > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index b506e3622b08..501ac05ba7da 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, > } > EXPORT_SYMBOL(drm_set_preferred_mode); > > +static bool is_hdmi2_sink(struct drm_connector *connector) You're usually known for adding const all around, why not const pointer here and in all the other drm_* functions that call this? > +{ > + /* > + * FIXME: sil-sii8620 doesn't have a connector around when > + * we need one, so we have to be prepared for a NULL connector. > + */ > + if (!connector) > + return false; This actually changes the is_hdmi2_sink value for sil-sii8620. > + > + return connector->display_info.hdmi.scdc.supported || > + connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB420; > +} > + > /** > * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with > * data from a DRM display mode > * @frame: HDMI AVI infoframe > + * @connector: the connector > * @mode: DRM display mode > - * @is_hdmi2_sink: Sink is HDMI 2.0 compliant > * > * Return: 0 on success or a negative error code on failure. > */ > int > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, > - const struct drm_display_mode *mode, > - bool is_hdmi2_sink) > + struct drm_connector *connector, > + const struct drm_display_mode *mode) > { > enum hdmi_picture_aspect picture_aspect; > int err; > @@ -4864,7 +4877,7 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, > * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we > * have to make sure we dont break HDMI 1.4 sinks. > */ > - if (!is_hdmi2_sink && frame->video_code > 64) > + if (!is_hdmi2_sink(connector) && frame->video_code > 64) > frame->video_code = 0; > > /* > @@ -4923,21 +4936,17 @@ EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode); > * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe > * quantization range information > * @frame: HDMI AVI infoframe > + * @connector: the connector > * @mode: DRM display mode > * @rgb_quant_range: RGB quantization range (Q) > * @rgb_quant_range_selectable: Sink support selectable RGB quantization range (QS) > - * @is_hdmi2_sink: HDMI 2.0 sink, which has different default recommendations > - * > - * Note that @is_hdmi2_sink can be derived by looking at the > - * &drm_scdc.supported flag stored in &drm_hdmi_info.scdc, > - * &drm_display_info.hdmi, which can be found in &drm_connector.display_info. > */ > void > drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, > + struct drm_connector *connector, > const struct drm_display_mode *mode, > enum hdmi_quantization_range rgb_quant_range, > - bool rgb_quant_range_selectable, > - bool is_hdmi2_sink) > + bool rgb_quant_range_selectable) > { > /* > * CEA-861: > @@ -4968,7 +4977,7 @@ drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, > * we limit non-zero YQ to HDMI 2.0 sinks only as HDMI 2.0 is based > * on on CEA-861-F. > */ > - if (!is_hdmi2_sink || > + if (!is_hdmi2_sink(connector) || > rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED) > frame->ycc_quantization_range = > 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) > return; > } > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, m, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, > + &hdata->connector, m); > if (!ret) > ret = hdmi_avi_infoframe_pack(&frm.avi, buf, sizeof(buf)); > 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) > { > union hdmi_infoframe frame; > > - drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); > + drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > + &priv->connector, mode); > frame.avi.quantization_range = HDMI_QUANTIZATION_RANGE_FULL; > > 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, > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); > const struct drm_display_mode *adjusted_mode = > &crtc_state->base.adjusted_mode; > - struct drm_connector *connector = &intel_hdmi->attached_connector->base; > - bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported || > - connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB420; > union hdmi_infoframe frame; > int ret; > > ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > - adjusted_mode, > - is_hdmi2_sink); > + conn_state->connector, > + adjusted_mode); > if (ret < 0) { > DRM_ERROR("couldn't fill AVI infoframe\n"); > return; > @@ -486,12 +483,13 @@ static void intel_hdmi_set_avi_infoframe(struct intel_encoder *encoder, > else > frame.avi.colorspace = HDMI_COLORSPACE_RGB; > > - drm_hdmi_avi_infoframe_quant_range(&frame.avi, adjusted_mode, > + drm_hdmi_avi_infoframe_quant_range(&frame.avi, > + conn_state->connector, > + adjusted_mode, > crtc_state->limited_color_range ? > HDMI_QUANTIZATION_RANGE_LIMITED : > HDMI_QUANTIZATION_RANGE_FULL, > - intel_hdmi->rgb_quant_range_selectable, > - is_hdmi2_sink); > + intel_hdmi->rgb_quant_range_selectable); > > drm_hdmi_avi_infoframe_content_type(&frame.avi, > 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, > uint8_t buf[VIDEO_DIP_DATA_SIZE]; > struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base); > struct intel_lspcon *lspcon = &dig_port->lspcon; > - struct intel_dp *intel_dp = &dig_port->dp; > - struct drm_connector *connector = &intel_dp->attached_connector->base; > - const struct drm_display_mode *mode = &crtc_state->base.adjusted_mode; > - bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported; > + const struct drm_display_mode *adjusted_mode = > + &crtc_state->base.adjusted_mode; > > if (!lspcon->active) { > DRM_ERROR("Writing infoframes while LSPCON disabled ?\n"); > @@ -473,7 +471,8 @@ void lspcon_set_infoframes(struct intel_encoder *encoder, > } > > ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > - mode, is_hdmi2_sink); > + conn_state->connector, > + adjusted_mode); > if (ret < 0) { > DRM_ERROR("couldn't fill AVI infoframe\n"); > return; > @@ -488,11 +487,13 @@ void lspcon_set_infoframes(struct intel_encoder *encoder, > frame.avi.colorspace = HDMI_COLORSPACE_RGB; > } > > - drm_hdmi_avi_infoframe_quant_range(&frame.avi, mode, > + drm_hdmi_avi_infoframe_quant_range(&frame.avi, > + conn_state->connector, > + adjusted_mode, > crtc_state->limited_color_range ? > HDMI_QUANTIZATION_RANGE_LIMITED : > HDMI_QUANTIZATION_RANGE_FULL, > - false, is_hdmi2_sink); > + false); > > ret = hdmi_infoframe_pack(&frame, buf, sizeof(buf)); > 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, > } > > static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, > - const struct intel_crtc_state *pipe_config) > + const struct intel_crtc_state *pipe_config, > + const struct drm_connector_state *conn_state) > { > uint8_t sdvo_data[HDMI_INFOFRAME_SIZE(AVI)]; > union hdmi_infoframe frame; > @@ -989,8 +990,8 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, > ssize_t len; > > ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > - &pipe_config->base.adjusted_mode, > - false); > + conn_state->connector, > + &pipe_config->base.adjusted_mode); > if (ret < 0) { > DRM_ERROR("couldn't fill AVI infoframe\n"); > return false; > @@ -1316,7 +1317,8 @@ static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder, > intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI); > intel_sdvo_set_colorimetry(intel_sdvo, > SDVO_COLORIMETRY_RGB256); > - intel_sdvo_set_avi_infoframe(intel_sdvo, crtc_state); > + intel_sdvo_set_avi_infoframe(intel_sdvo, > + crtc_state, conn_state); > } else > intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI); > > 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, > u8 buffer[17]; > ssize_t err; > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &hdmi->conn, mode); > if (err < 0) { > dev_err(hdmi->dev, > "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) > u32 val; > int len; > > - drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); > + drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > + hdmi->connector, mode); > > len = hdmi_infoframe_pack(&frame, buffer, sizeof(buffer)); > if (len < 0) { > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c > index 6cbbae3f438b..d8e512c83211 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) > u32 max_ac_packet; > union hdmi_infoframe avi_frame; > union hdmi_infoframe vendor_frame; > - bool scdc_supported, high_tmds_clock_ratio = false, scrambling = false; > + bool high_tmds_clock_ratio = false, scrambling = false; > u8 config; > int ret; > int size; > @@ -564,10 +564,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct drm_display_mode *mode) > return; > > hdmi = &nv_connector->base.display_info.hdmi; > - scdc_supported = hdmi->scdc.supported; > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame.avi, mode, > - scdc_supported); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame.avi, > + &nv_connector->base, mode); > if (!ret) { > /* We have an AVI InfoFrame, populate it to the display */ > 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..281b2164969c 100644 > --- a/drivers/gpu/drm/omapdrm/omap_encoder.c > +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c > @@ -128,8 +128,9 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder, > if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) { > struct hdmi_avi_infoframe avi; > > - r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, > - false); > + r = drm_hdmi_avi_infoframe_from_display_mode(&avi, > + connector, > + adjusted_mode); > if (r == 0) > dssdev->ops->hdmi.set_infoframe(dssdev, &avi); > } > 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, > if (!connector) > return -EINVAL; > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); > if (err < 0) { > DRM_ERROR("failed to setup AVI infoframe: %d\n", err); > 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, > union hdmi_infoframe frame; > int rc; > > - rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); > + rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > + &hdmi->connector, > + mode); > > if (hdmi->hdmi_data.enc_out_format == HDMI_COLORSPACE_YUV444) > 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) > > DRM_DEBUG_DRIVER("\n"); > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe, mode, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe, > + hdmi->drm_connector, mode); > if (ret < 0) { > DRM_ERROR("failed to setup AVI infoframe: %d\n", ret); > 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, > u8 buffer[17]; > int i, ret; > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &hdmi->connector, mode); > if (ret < 0) { > DRM_ERROR("Failed to get infoframes from mode\n"); > 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, > u8 buffer[17]; > ssize_t err; > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &hdmi->output.connector, mode); > if (err < 0) { > dev_err(hdmi->dev, "failed to setup AVI infoframe: %zd\n", err); > 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, > value &= ~INFOFRAME_CTRL_ENABLE; > tegra_sor_writel(sor, value, SOR_HDMI_AVI_INFOFRAME_CTRL); > > - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); > + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, > + &sor->output.connector, mode); > if (err < 0) { > dev_err(sor->dev, "failed to setup AVI infoframe: %d\n", err); > return err; > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index fd5522fd179e..cb3dca7426c8 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -409,22 +409,25 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) > { > struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); > struct drm_crtc *crtc = encoder->crtc; > + struct vc4_dev *vc4 = to_vc4_dev(encoder->dev); > + struct vc4_hdmi *hdmi = vc4->hdmi; > const struct drm_display_mode *mode = &crtc->state->adjusted_mode; > union hdmi_infoframe frame; > int ret; > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > + hdmi->connector, mode); > if (ret < 0) { > DRM_ERROR("couldn't fill AVI infoframe\n"); > return; > } > > - drm_hdmi_avi_infoframe_quant_range(&frame.avi, mode, > + drm_hdmi_avi_infoframe_quant_range(&frame.avi, > + hdmi->connector, mode, > vc4_encoder->limited_rgb_range ? > HDMI_QUANTIZATION_RANGE_LIMITED : > HDMI_QUANTIZATION_RANGE_FULL, > - vc4_encoder->rgb_range_selectable, > - false); > + vc4_encoder->rgb_range_selectable); > > vc4_hdmi_write_infoframe(encoder, &frame); > } > 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, > union hdmi_infoframe frame; > int ret; > > - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false); > + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, > + &hdmi->connector, > + mode); > if (ret) { > DRM_DEV_ERROR(hdmi->dev, "failed to get avi infoframe: %d\n", > 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) > > int > drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, > - const struct drm_display_mode *mode, > - bool is_hdmi2_sink); > + struct drm_connector *connector, > + const struct drm_display_mode *mode); > int > drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, > struct drm_connector *connector, > const struct drm_display_mode *mode); > void > drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, > + struct drm_connector *connector, > const struct drm_display_mode *mode, > enum hdmi_quantization_range rgb_quant_range, > - bool rgb_quant_range_selectable, > - bool is_hdmi2_sink); > + bool rgb_quant_range_selectable); > > /** > * drm_eld_mnl - Get ELD monitor name length in bytes. -- Jani Nikula, Intel Open Source Graphics Center