nouveau_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        struct nvif_device *device = &drm->device;
        int ret;
 
 nouveau_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *image)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        struct nvif_device *device = &drm->device;
        int ret;
 
 nouveau_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        struct nvif_device *device = &drm->device;
        int ret;
 
 nouveau_fbcon_sync(struct fb_info *info)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nouveau_fbcon_open(struct fb_info *info, int user)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        int ret = pm_runtime_get_sync(drm->dev->dev);
        if (ret < 0 && ret != -EACCES)
                return ret;
 nouveau_fbcon_release(struct fb_info *info, int user)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
        pm_runtime_put(drm->dev->dev);
        return 0;
 }
 {
        struct nouveau_fbdev *fbcon =
                container_of(helper, struct nouveau_fbdev, helper);
-       struct drm_device *dev = fbcon->dev;
+       struct drm_device *dev = fbcon->helper.dev;
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nvif_device *device = &drm->device;
        struct fb_info *info;
 void nouveau_fbcon_gpu_lockup(struct fb_info *info)
 {
        struct nouveau_fbdev *fbcon = info->par;
-       struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
+       struct nouveau_drm *drm = nouveau_drm(fbcon->helper.dev);
 
        NV_ERROR(drm, "GPU lockup - switching to software fbcon\n");
        info->flags |= FBINFO_HWACCEL_DISABLED;
        if (!fbcon)
                return -ENOMEM;
 
-       fbcon->dev = dev;
        drm->fbcon = fbcon;
 
        drm_fb_helper_prepare(dev, &fbcon->helper, &nouveau_fbcon_helper_funcs);
 
 struct nouveau_fbdev {
        struct drm_fb_helper helper;
        struct nouveau_framebuffer nouveau_fb;
-       struct drm_device *dev;
        unsigned int saved_flags;
        struct nvif_object surf2d;
        struct nvif_object clip;
 
 nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        uint32_t fg;
        uint32_t bg;
 nv04_fbcon_accel_init(struct fb_info *info)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct drm_device *dev = nfbdev->dev;
+       struct drm_device *dev = nfbdev->helper.dev;
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nouveau_channel *chan = drm->channel;
        struct nvif_device *device = &drm->device;
 
 nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        uint32_t dwords, *data = (uint32_t *)image->data;
        uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel));
 {
        struct nouveau_fbdev *nfbdev = info->par;
        struct nouveau_framebuffer *fb = &nfbdev->nouveau_fb;
-       struct drm_device *dev = nfbdev->dev;
+       struct drm_device *dev = nfbdev->helper.dev;
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nouveau_channel *chan = drm->channel;
        int ret, format;
 
 nvc0_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nvc0_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        int ret;
 
 nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
+       struct nouveau_drm *drm = nouveau_drm(nfbdev->helper.dev);
        struct nouveau_channel *chan = drm->channel;
        uint32_t dwords, *data = (uint32_t *)image->data;
        uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel));
 nvc0_fbcon_accel_init(struct fb_info *info)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct drm_device *dev = nfbdev->dev;
+       struct drm_device *dev = nfbdev->helper.dev;
        struct nouveau_framebuffer *fb = &nfbdev->nouveau_fb;
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nouveau_channel *chan = drm->channel;