drm/nouveau: port all engines to new engine module format
[deliverable/linux.git] / drivers / gpu / drm / nouveau / core / subdev / device / base.c
index 40456b99cb5fae99bef5cf3069524cf034c1e572..d8d101630e46eecf9c57aceef762b4ad87c53c7d 100644 (file)
@@ -241,6 +241,8 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
                if (!device->subdev[i]) {
                        ret = nouveau_object_ctor(nv_object(device), NULL,
                                                  oclass, NULL, i, &subdev);
+                       if (ret == -ENODEV)
+                               continue;
                        if (ret)
                                return ret;
 
@@ -404,10 +406,26 @@ nouveau_device_sclass[] = {
        {}
 };
 
+static void
+nouveau_device_dtor(struct nouveau_object *object)
+{
+       struct nouveau_device *device = (void *)object;
+
+       mutex_lock(&nv_devices_mutex);
+       list_del(&device->head);
+       mutex_unlock(&nv_devices_mutex);
+
+       if (device->base.mmio)
+               iounmap(device->base.mmio);
+
+       nouveau_subdev_destroy(&device->base);
+}
+
 static struct nouveau_oclass
 nouveau_device_oclass = {
        .handle = NV_SUBDEV(DEVICE, 0x00),
        .ofuncs = &(struct nouveau_ofuncs) {
+               .dtor = nouveau_device_dtor,
        },
 };
 
@@ -444,18 +462,3 @@ done:
        mutex_unlock(&nv_devices_mutex);
        return ret;
 }
-
-void
-nouveau_device_destroy(struct nouveau_device **pdevice)
-{
-       struct nouveau_device *device = *pdevice;
-       if (device) {
-               mutex_lock(&nv_devices_mutex);
-               list_del(&device->head);
-               mutex_unlock(&nv_devices_mutex);
-               if (device->base.mmio)
-                       iounmap(device->base.mmio);
-               nouveau_subdev_destroy(&device->base);
-       }
-       *pdevice = NULL;
-}
This page took 0.030012 seconds and 5 git commands to generate.