diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0516-drm-vc4-Fix-handling-of-interlaced-video-modes.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.4/0516-drm-vc4-Fix-handling-of-interlaced-video-modes.patch | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0516-drm-vc4-Fix-handling-of-interlaced-video-modes.patch b/target/linux/brcm2708/patches-4.4/0516-drm-vc4-Fix-handling-of-interlaced-video-modes.patch deleted file mode 100644 index 6c82cbd111..0000000000 --- a/target/linux/brcm2708/patches-4.4/0516-drm-vc4-Fix-handling-of-interlaced-video-modes.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 074d7a2c41bbfa252b7c1f1d85b355dce89dcbe7 Mon Sep 17 00:00:00 2001 -From: Mario Kleiner <mario.kleiner.de@gmail.com> -Date: Tue, 19 Jul 2016 20:58:58 +0200 -Subject: [PATCH] drm/vc4: Fix handling of interlaced video modes. - -We must not apply CRTC_INTERLACE_HALVE_V to interlaced modes during -mode enumeration, as drm_helper_probe_single_connector_modes -does, so wrap it and reset the effect of CRTC_INTERLACE_HALVE_V -on affected interlaced modes. - -Also mode_fixup interlaced modes passed in from user space. - -This fixes the vblank timestamping constants and entries in -the mode->crtc_xxx fields needed for precise vblank timestamping. - -Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> -Signed-off-by: Eric Anholt <eric@anholt.net> ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 18 ++++++++++++++++++ - drivers/gpu/drm/vc4/vc4_hdmi.c | 29 +++++++++++++++++++++++++++-- - 2 files changed, 45 insertions(+), 2 deletions(-) - ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -538,6 +538,23 @@ static void vc4_crtc_enable(struct drm_c - CRTC_READ(PV_V_CONTROL) | PV_VCONTROL_VIDEN); - } - -+static bool vc4_crtc_mode_fixup(struct drm_crtc *crtc, -+ const struct drm_display_mode *mode, -+ struct drm_display_mode *adjusted_mode) -+{ -+ /* -+ * Interlaced video modes got CRTC_INTERLACE_HALVE_V applied when -+ * coming from user space. We don't want this, as it screws up -+ * vblank timestamping, so fix it up. -+ */ -+ drm_mode_set_crtcinfo(adjusted_mode, 0); -+ -+ DRM_DEBUG_KMS("[CRTC:%d] adjusted_mode :\n", crtc->base.id); -+ drm_mode_debug_printmodeline(adjusted_mode); -+ -+ return true; -+} -+ - static int vc4_crtc_atomic_check(struct drm_crtc *crtc, - struct drm_crtc_state *state) - { -@@ -848,6 +865,7 @@ static const struct drm_crtc_helper_func - .mode_set_nofb = vc4_crtc_mode_set_nofb, - .disable = vc4_crtc_disable, - .enable = vc4_crtc_enable, -+ .mode_fixup = vc4_crtc_mode_fixup, - .atomic_check = vc4_crtc_atomic_check, - .atomic_flush = vc4_crtc_atomic_flush, - }; ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -219,10 +219,35 @@ vc4_hdmi_connector_best_encoder(struct d - return hdmi_connector->encoder; - } - -+/* -+ * drm_helper_probe_single_connector_modes() applies drm_mode_set_crtcinfo to -+ * all modes with flag CRTC_INTERLACE_HALVE_V. We don't want this, as it -+ * screws up vblank timestamping for interlaced modes, so fix it up. -+ */ -+static int vc4_hdmi_connector_probe_modes(struct drm_connector *connector, -+ uint32_t maxX, uint32_t maxY) -+{ -+ struct drm_display_mode *mode; -+ int count; -+ -+ count = drm_helper_probe_single_connector_modes(connector, maxX, maxY); -+ if (count == 0) -+ return 0; -+ -+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] probed adapted modes :\n", -+ connector->base.id, connector->name); -+ list_for_each_entry(mode, &connector->modes, head) { -+ drm_mode_set_crtcinfo(mode, 0); -+ drm_mode_debug_printmodeline(mode); -+ } -+ -+ return count; -+} -+ - static const struct drm_connector_funcs vc4_hdmi_connector_funcs = { - .dpms = drm_atomic_helper_connector_dpms, - .detect = vc4_hdmi_connector_detect, -- .fill_modes = drm_helper_probe_single_connector_modes, -+ .fill_modes = vc4_hdmi_connector_probe_modes, - .destroy = vc4_hdmi_connector_destroy, - .reset = drm_atomic_helper_connector_reset, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, -@@ -258,7 +283,7 @@ static struct drm_connector *vc4_hdmi_co - connector->polled = (DRM_CONNECTOR_POLL_CONNECT | - DRM_CONNECTOR_POLL_DISCONNECT); - -- connector->interlace_allowed = 0; -+ connector->interlace_allowed = 1; - connector->doublescan_allowed = 0; - - drm_mode_connector_attach_encoder(connector, encoder); |