]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/gpu/drm/drm_stub.c
Merge branch 'fix/hda' into for-linus
[linux-2.6-omap-h63xx.git] / drivers / gpu / drm / drm_stub.c
index ea7f9e5d47fa4648521985156021791b1bdc43f4..46bb923b097c39ad6fef2c37f29e59ae0c648f42 100644 (file)
@@ -57,6 +57,14 @@ static int drm_minor_get_id(struct drm_device *dev, int type)
        int ret;
        int base = 0, limit = 63;
 
+       if (type == DRM_MINOR_CONTROL) {
+                base += 64;
+                limit = base + 127;
+        } else if (type == DRM_MINOR_RENDER) {
+                base += 128;
+                limit = base + 255;
+        }
+
 again:
        if (idr_pre_get(&drm_minors_idr, GFP_KERNEL) == 0) {
                DRM_ERROR("Out of memory expanding drawable idr\n");
@@ -110,12 +118,20 @@ static void drm_master_destroy(struct kref *kref)
        struct drm_master *master = container_of(kref, struct drm_master, refcount);
        struct drm_magic_entry *pt, *next;
        struct drm_device *dev = master->minor->dev;
+       struct drm_map_list *r_list, *list_temp;
 
        list_del(&master->head);
 
        if (dev->driver->master_destroy)
                dev->driver->master_destroy(dev, master);
 
+       list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) {
+               if (r_list->master == master) {
+                       drm_rmmap_locked(dev, r_list->map);
+                       r_list = NULL;
+               }
+       }
+
        if (master->unique) {
                drm_free(master->unique, master->unique_size, DRM_MEM_DRIVER);
                master->unique = NULL;
@@ -362,12 +378,28 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
                printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
                goto err_g2;
        }
+
+       if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+               ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL);
+               if (ret)
+                       goto err_g2;
+       }
+
        if ((ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY)))
-               goto err_g2;
+               goto err_g3;
+
+       if (dev->driver->load) {
+               ret = dev->driver->load(dev, ent->driver_data);
+               if (ret)
+                       goto err_g3;
+       }
 
-       if (dev->driver->load)
-               if ((ret = dev->driver->load(dev, ent->driver_data)))
+        /* setup the grouping for the legacy output */
+       if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+               ret = drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group);
+               if (ret)
                        goto err_g3;
+       }
 
        list_add_tail(&dev->driver_item, &driver->device_list);