drm/nouveau: initialise display before enabling interrupts
[deliverable/linux.git] / drivers / gpu / drm / nouveau / nouveau_state.c
index 67ee32fbba9d48a43fe5f6889871ab22424c1fd6..c58ff9c48603e38529d732f70d24c99796491490 100644 (file)
@@ -471,12 +471,19 @@ nouveau_card_init(struct drm_device *dev)
                        goto out_graph;
        }
 
+       if (dev_priv->card_type >= NV_50)
+               ret = nv50_display_create(dev);
+       else
+               ret = nv04_display_create(dev);
+       if (ret)
+               goto out_fifo;
+
        /* this call irq_preinstall, register irq handler and
         * call irq_postinstall
         */
        ret = drm_irq_install(dev);
        if (ret)
-               goto out_fifo;
+               goto out_display;
 
        ret = drm_vblank_init(dev, 0);
        if (ret)
@@ -490,13 +497,6 @@ nouveau_card_init(struct drm_device *dev)
                        goto out_irq;
        }
 
-       if (dev_priv->card_type >= NV_50)
-               ret = nv50_display_create(dev);
-       else
-               ret = nv04_display_create(dev);
-       if (ret)
-               goto out_channel;
-
        ret = nouveau_backlight_init(dev);
        if (ret)
                NV_ERROR(dev, "Error %d registering backlight\n", ret);
@@ -505,13 +505,13 @@ nouveau_card_init(struct drm_device *dev)
        drm_kms_helper_poll_init(dev);
        return 0;
 
-out_channel:
-       if (dev_priv->channel) {
-               nouveau_channel_free(dev_priv->channel);
-               dev_priv->channel = NULL;
-       }
 out_irq:
        drm_irq_uninstall(dev);
+out_display:
+       if (dev_priv->card_type >= NV_50)
+               nv50_display_destroy(dev);
+       else
+               nv04_display_destroy(dev);
 out_fifo:
        if (!nouveau_noaccel)
                engine->fifo.takedown(dev);
This page took 0.047659 seconds and 5 git commands to generate.