drm/nouveau: fix panels using straps-based mode detection
authorBen Skeggs <bskeggs@redhat.com>
Thu, 23 Sep 2010 06:44:01 +0000 (16:44 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 24 Sep 2010 00:05:28 +0000 (10:05 +1000)
nouveau_bios_fp_mode() zeroes the mode struct before filling in relevant
entries.  This nukes the mode id initialised by drm_mode_create(), and
causes warnings from idr when we try to remove the mode.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/nouveau/nouveau_connector.c

index 87186a4bbf03da1a964e95cbb17a7a53c3b1a557..fc737037f751c3690dfb09239e3439df1fa4191c 100644 (file)
@@ -558,8 +558,10 @@ nouveau_connector_get_modes(struct drm_connector *connector)
        if (nv_encoder->dcb->type == OUTPUT_LVDS &&
            (nv_encoder->dcb->lvdsconf.use_straps_for_mode ||
             dev_priv->vbios.fp_no_ddc) && nouveau_bios_fp_mode(dev, NULL)) {
-               nv_connector->native_mode = drm_mode_create(dev);
-               nouveau_bios_fp_mode(dev, nv_connector->native_mode);
+               struct drm_display_mode mode;
+
+               nouveau_bios_fp_mode(dev, &mode);
+               nv_connector->native_mode = drm_mode_duplicate(dev, &mode);
        }
 
        /* Find the native mode if this is a digital panel, if we didn't