[RESEND-CI v4 01/15] drm: add HDMI 2.0 VIC support for AVI info-frames
Sharma, Shashank
shashank.sharma at intel.com
Mon Jul 3 11:24:10 UTC 2017
Regards
Shashank
On 7/3/2017 3:27 PM, Ville Syrjälä wrote:
> On Mon, Jul 03, 2017 at 02:36:58PM +0530, Sharma, Shashank wrote:
>> Regards
>>
>> Shashank
>>
>>
>> On 6/30/2017 5:24 PM, Ville Syrjälä wrote:
>>> On Wed, Jun 21, 2017 at 04:03:59PM +0530, Shashank Sharma wrote:
>>>> HDMI 1.4b support the CEA video modes as per range of CEA-861-D (VIC 1-64).
>>>> For any other mode, the VIC filed in AVI infoframes should be 0.
>>>> HDMI 2.0 sinks, support video modes range as per CEA-861-F spec, which is
>>>> extended to (VIC 1-107).
>>>>
>>>> This patch adds a bool input variable, which indicates if the connected
>>>> sink is a HDMI 2.0 sink or not. This will make sure that we don't pass a
>>>> HDMI 2.0 VIC to a HDMI 1.4 sink.
>>>>
>>>> This patch touches all drm drivers, who are callers of this function
>>>> drm_hdmi_avi_infoframe_from_display_mode but to make sure there is
>>>> no change in current behavior, is_hdmi2 is kept as false.
>>>>
>>>> In case of I915 driver, this patch:
>>>> - checks if the connected display is HDMI 2.0.
>>>> - HDMI infoframes carry one of this two type of information:
>>>> - VIC for 4K modes for HDMI 1.4 sinks
>>>> - S3D information for S3D modes
>>>> As CEA-861-F has already defined VICs for 4K videomodes, this
>>>> patch doesn't allow sending HDMI infoframes for HDMI 2.0 sinks,
>>>> until the mode is 3D.
>>>>
>>>> Cc: Ville Syrjala <ville.syrjala at linux.intel.com>
>>>> Cc: Jose Abreu <jose.abreu at synopsys.com>
>>>> Cc: Andrzej Hajda <a.hajda at samsung.com>
>>>> Cc: Alex Deucher <alexander.deucher at amd.com>
>>>> Cc: Daniel Vetter <daniel.vetter at intel.com>
>>>>
>>>> PS: This patch touches a few lines in few files, which were
>>>> already above 80 char, so checkpatch gives 80 char warning again.
>>>> - gpu/drm/omapdrm/omap_encoder.c
>>>> - gpu/drm/i915/intel_sdvo.c
>>>>
>>>> V2: Rebase, Added r-b from Andrzej
>>>> V3: Addressed review comment from Ville:
>>>> - Do not send VICs in both AVI-IF and HDMI-IF
>>>> send only one of it.
>>>>
>>>> Reviewed-by: Andrzej Hajda <a.hajda at samsung.com>
>>>> Signed-off-by: Shashank Sharma <shashank.sharma at intel.com>
>>>> ---
>>>> 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_v8_0.c | 2 +-
>>>> drivers/gpu/drm/bridge/analogix-anx78xx.c | 3 ++-
>>>> drivers/gpu/drm/bridge/sii902x.c | 2 +-
>>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 +-
>>>> drivers/gpu/drm/drm_edid.c | 12 +++++++++++-
>>>> drivers/gpu/drm/exynos/exynos_hdmi.c | 2 +-
>>>> drivers/gpu/drm/i2c/tda998x_drv.c | 2 +-
>>>> drivers/gpu/drm/i915/intel_hdmi.c | 17 ++++++++++++++++-
>>>> drivers/gpu/drm/i915/intel_sdvo.c | 3 ++-
>>>> drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
>>>> drivers/gpu/drm/omapdrm/omap_encoder.c | 3 ++-
>>>> drivers/gpu/drm/radeon/radeon_audio.c | 2 +-
>>>> drivers/gpu/drm/rockchip/inno_hdmi.c | 2 +-
>>>> drivers/gpu/drm/sti/sti_hdmi.c | 2 +-
>>>> drivers/gpu/drm/tegra/hdmi.c | 2 +-
>>>> drivers/gpu/drm/tegra/sor.c | 2 +-
>>>> drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
>>>> drivers/gpu/drm/zte/zx_hdmi.c | 2 +-
>>>> include/drm/drm_edid.h | 3 ++-
>>>> 21 files changed, 50 insertions(+), 21 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>>>> index 3c62c45..4923ddc 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>>>> @@ -1864,7 +1864,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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 c8ed0fa..4101684 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
>>>> @@ -1848,7 +1848,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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 3e90c19..a7f6b32 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
>>>> @@ -1747,7 +1747,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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 9006578..a083211 100644
>>>> --- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
>>>> +++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
>>>> @@ -1097,7 +1097,8 @@ 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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, adjusted_mode,
>>>> + false);
>>>> 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 9b87067..3dc40f6 100644
>>>> --- a/drivers/gpu/drm/bridge/sii902x.c
>>>> +++ b/drivers/gpu/drm/bridge/sii902x.c
>>>> @@ -269,7 +269,7 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge,
>>>> if (ret)
>>>> return;
>>>>
>>>> - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, adj);
>>>> + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, adj, false);
>>>> if (ret < 0) {
>>>> DRM_ERROR("couldn't fill AVI infoframe\n");
>>>> return;
>>>> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>>>> index ead1124..0b0c9de 100644
>>>> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>>>> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>>>> @@ -1317,7 +1317,7 @@ 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);
>>>> + drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>>
>>>> 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 2e55599..d312fe1 100644
>>>> --- a/drivers/gpu/drm/drm_edid.c
>>>> +++ b/drivers/gpu/drm/drm_edid.c
>>>> @@ -4334,12 +4334,14 @@ EXPORT_SYMBOL(drm_set_preferred_mode);
>>>> * data from a DRM display mode
>>>> * @frame: HDMI AVI infoframe
>>>> * @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)
>>>> + const struct drm_display_mode *mode,
>>>> + bool is_hdmi2_sink)
>>>> {
>>>> int err;
>>>>
>>>> @@ -4355,6 +4357,14 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
>>>>
>>>> frame->video_code = drm_match_cea_mode(mode);
>>>>
>>>> + /*
>>>> + * HDMI 1.4 VIC range: 1 <= VIC <= 64 (CEA-861-D) but
>>>> + * 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)
>>>> + frame->video_code = 0;
>>>> +
>>>> frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
>>>>
>>>> /*
>>>> diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
>>>> index 06bfbe4..c953927 100644
>>>> --- a/drivers/gpu/drm/exynos/exynos_hdmi.c
>>>> +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
>>>> @@ -784,7 +784,7 @@ static void hdmi_reg_infoframes(struct hdmi_context *hdata)
>>>> }
>>>>
>>>> ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi,
>>>> - &hdata->current_mode);
>>>> + &hdata->current_mode, false);
>>>> 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 86f47e1..d1e7ac5 100644
>>>> --- a/drivers/gpu/drm/i2c/tda998x_drv.c
>>>> +++ b/drivers/gpu/drm/i2c/tda998x_drv.c
>>>> @@ -712,7 +712,7 @@ 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);
>>>> + drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false);
>>>> 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 ec0779a..170abc4 100644
>>>> --- a/drivers/gpu/drm/i915/intel_hdmi.c
>>>> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
>>>> @@ -459,11 +459,14 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
>>>> struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
>>>> 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;
>>>> union hdmi_infoframe frame;
>>>> int ret;
>>>>
>>>> ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
>>>> - adjusted_mode);
>>>> + adjusted_mode,
>>>> + is_hdmi2_sink);
>>>> if (ret < 0) {
>>>> DRM_ERROR("couldn't fill AVI infoframe\n");
>>>> return;
>>>> @@ -816,6 +819,8 @@ static void hsw_set_infoframes(struct drm_encoder *encoder,
>>>> {
>>>> struct drm_i915_private *dev_priv = to_i915(encoder->dev);
>>>> struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
>>>> + struct drm_hdmi_info *hdmi = &conn_state->connector->display_info.hdmi;
>>>> + const struct drm_display_mode *mode = &crtc_state->base.adjusted_mode;
>>>> i915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state->cpu_transcoder);
>>>> u32 val = I915_READ(reg);
>>>>
>>>> @@ -839,6 +844,16 @@ static void hsw_set_infoframes(struct drm_encoder *encoder,
>>>>
>>>> intel_hdmi_set_avi_infoframe(encoder, crtc_state);
>>>> intel_hdmi_set_spd_infoframe(encoder, crtc_state);
>>>> +
>>>> + /*
>>>> + * CEA-861-F added new VICs for 4k video modes, due to which
>>>> + * HDMI 2.0 sinks need HDMI IF only for S3D information (Not for
>>>> + * 4k VICs). So for a HDMI 2.0 sink, if the video mode is not 3D,
>>>> + * don't bother sending HDMI IF.
>>>> + */
>>>> + if (hdmi->scdc.supported && !(mode->flags & DRM_MODE_FLAG_3D_MASK))
>>>> + return;
>>> That doesn't look like the rigth place for this check.
>>>
>>> Also I think we still want to send the vendor specific infoframe always,
>>> if for no other reason that to get extra testing for the code. We just
>>> need to select whether we should be sending the old or the new one.
>> I think in the previous review comments, this is what you asked to do:
>> send HDMI 2.0 VIC only in one place, either in AVI IF or HDMI IF, not both.
> Yes, the VIC. I didn't say anything about not sending any infoframe.
>
>> Now, HDMI IF contains only two piece of information (from the code):
>> frame->vic = vic (for HDMI 1.4 4k HDMI modes)
>> or
>> frame->s3d_strucrt = s3d_structure_from_display_mode()
>>
>> So if its a HDMI 2.0 monitor && we don't want to send s3d_info, then
>> there is nothing in the frame right ?
> Not sending any infoframe means a change in current behaviour which we
> may not want. It also means we don't treat HDMI 2.0 and 1.x sinks
> equally since for 1.x sinks we always send the infoframe.
>
> And appendix F of the spec seems to be telling us that there are
> sinks out there that don't properly switch from 3D to 2D when the source
> stops sending the old infoframe. Hence it seems like a good idea to
> always send it. They speak about HDMI 1.4 sinks specifically, but I
> wouldn't be surprised if similar problems crop up in 2.0 sinks as well.
>
> In fact I think it would have been nice if they had just totally
> replaced the old infoframe with the new one, and allowed us to always
> just send the new infoframe. But the spec specifically says that we
> have to use the old infoframe if possible :(
So should I remove this check, and keep things going as it was ?
- Shashank
>> - Shashank
>>>> +
>>>> intel_hdmi_set_hdmi_infoframe(encoder, crtc_state);
>>>> }
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
>>>> index f4329d2..737076e 100644
>>>> --- a/drivers/gpu/drm/i915/intel_sdvo.c
>>>> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
>>>> @@ -996,7 +996,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);
>>>> + &pipe_config->base.adjusted_mode,
>>>> + false);
>>>> if (ret < 0) {
>>>> DRM_ERROR("couldn't fill AVI infoframe\n");
>>>> return false;
>>>> diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
>>>> index 0a4ffd7..5c0d024 100644
>>>> --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
>>>> +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
>>>> @@ -975,7 +975,7 @@ 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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> if (err < 0) {
>>>> dev_err(hdmi->dev,
>>>> "Failed to get AVI infoframe from mode: %zd\n", err);
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
>>>> index 86c977b..624f5b5 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_encoder.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
>>>> @@ -85,7 +85,8 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder,
>>>> if (hdmi_mode && dssdev->driver->set_hdmi_infoframe) {
>>>> struct hdmi_avi_infoframe avi;
>>>>
>>>> - r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode);
>>>> + r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode,
>>>> + false);
>>>> if (r == 0)
>>>> dssdev->driver->set_hdmi_infoframe(dssdev, &avi);
>>>> }
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
>>>> index aaacac1..770e31f 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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 7d9b75e..7149968 100644
>>>> --- a/drivers/gpu/drm/rockchip/inno_hdmi.c
>>>> +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
>>>> @@ -294,7 +294,7 @@ 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);
>>>> + rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false);
>>>>
>>>> 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 a59c95a..dbc6a19 100644
>>>> --- a/drivers/gpu/drm/sti/sti_hdmi.c
>>>> +++ b/drivers/gpu/drm/sti/sti_hdmi.c
>>>> @@ -434,7 +434,7 @@ static int hdmi_avi_infoframe_config(struct sti_hdmi *hdmi)
>>>>
>>>> DRM_DEBUG_DRIVER("\n");
>>>>
>>>> - ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe, mode);
>>>> + ret = drm_hdmi_avi_infoframe_from_display_mode(&infoframe, mode, false);
>>>> if (ret < 0) {
>>>> DRM_ERROR("failed to setup AVI infoframe: %d\n", ret);
>>>> return ret;
>>>> diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
>>>> index cda0491..718d8db 100644
>>>> --- a/drivers/gpu/drm/tegra/hdmi.c
>>>> +++ b/drivers/gpu/drm/tegra/hdmi.c
>>>> @@ -734,7 +734,7 @@ 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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 a8f5289..fb2709c 100644
>>>> --- a/drivers/gpu/drm/tegra/sor.c
>>>> +++ b/drivers/gpu/drm/tegra/sor.c
>>>> @@ -1904,7 +1904,7 @@ 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);
>>>> + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false);
>>>> 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 ed63d4e..406d6d8 100644
>>>> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
>>>> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
>>>> @@ -395,7 +395,7 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
>>>> union hdmi_infoframe frame;
>>>> int ret;
>>>>
>>>> - ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode);
>>>> + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false);
>>>> if (ret < 0) {
>>>> DRM_ERROR("couldn't fill AVI infoframe\n");
>>>> return;
>>>> diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
>>>> index 0df7366..7e834e3 100644
>>>> --- a/drivers/gpu/drm/zte/zx_hdmi.c
>>>> +++ b/drivers/gpu/drm/zte/zx_hdmi.c
>>>> @@ -124,7 +124,7 @@ 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);
>>>> + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode, false);
>>>> 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 7b9f48b..89c0062 100644
>>>> --- a/include/drm/drm_edid.h
>>>> +++ b/include/drm/drm_edid.h
>>>> @@ -343,7 +343,8 @@ 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);
>>>> + const struct drm_display_mode *mode,
>>>> + bool is_hdmi2_sink);
>>>> int
>>>> drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame,
>>>> const struct drm_display_mode *mode);
>>>> --
>>>> 2.7.4
More information about the dri-devel
mailing list