summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/imagination/pvr_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/imagination/pvr_drv.c')
-rw-r--r--drivers/gpu/drm/imagination/pvr_drv.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/gpu/drm/imagination/pvr_drv.c b/drivers/gpu/drm/imagination/pvr_drv.c
index 3d4f2ba2c015..597188b31f96 100644
--- a/drivers/gpu/drm/imagination/pvr_drv.c
+++ b/drivers/gpu/drm/imagination/pvr_drv.c
@@ -464,6 +464,7 @@ pvr_probe(struct platform_device *plat_dev)
{
struct pvr_device *pvr_dev;
struct drm_device *drm_dev;
+ int err;
pvr_dev = devm_drm_dev_alloc(&plat_dev->dev, &pvr_drm_driver,
struct pvr_device, base);
@@ -474,14 +475,29 @@ pvr_probe(struct platform_device *plat_dev)
platform_set_drvdata(plat_dev, drm_dev);
- return drm_dev_register(drm_dev, 0);
+ err = pvr_device_init(pvr_dev);
+ if (err)
+ return err;
+
+ err = drm_dev_register(drm_dev, 0);
+ if (err)
+ goto err_device_fini;
+
+ return 0;
+
+err_device_fini:
+ pvr_device_fini(pvr_dev);
+
+ return err;
}
static int
pvr_remove(struct platform_device *plat_dev)
{
struct drm_device *drm_dev = platform_get_drvdata(plat_dev);
+ struct pvr_device *pvr_dev = to_pvr_device(drm_dev);
+ pvr_device_fini(pvr_dev);
drm_dev_unplug(drm_dev);
return 0;