Merge remote-tracking branch 'iommu/next'
[deliverable/linux.git] / drivers / gpu / drm / vc4 / vc4_hdmi.c
index 4452f3631cacea37bbd5dc8a594367631e308adc..68ad10634b29ec7b716f70f0b5fd9f2046da1fe5 100644 (file)
@@ -208,10 +208,35 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
        return ret;
 }
 
+/*
+ * 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,
@@ -246,7 +271,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
        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);
This page took 0.024479 seconds and 5 git commands to generate.