summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2020-06-05 15:58:00 +0200
committerThomas Zimmermann <tzimmermann@suse.de>2020-06-11 10:06:03 +0200
commitc714dd941dd158500299b2138fcd06709afd2605 (patch)
tree8565758d7d9915f2897740dac58baef679e945b4
parentba5b90e883a4db12f2b6f277fa2c06ac82c2ff03 (diff)
drm/mgag200: Separate device initialization into allocation
Embedding the DRM device instance in struct mga_device will require changes to device allocation. Moving the device initialization into its own functions gets it out of the way. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-12-tzimmermann@suse.de
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_drv.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index f8bb24199643..926437a27a22 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -43,17 +43,11 @@ static struct drm_driver mgag200_driver = {
* DRM device
*/
-static int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
+static int mgag200_device_init(struct mga_device *mdev, unsigned long flags)
{
- struct mga_device *mdev;
+ struct drm_device *dev = mdev->dev;
int ret, option;
- mdev = devm_kzalloc(dev->dev, sizeof(struct mga_device), GFP_KERNEL);
- if (mdev == NULL)
- return -ENOMEM;
- dev->dev_private = (void *)mdev;
- mdev->dev = dev;
-
mdev->flags = mgag200_flags_from_driver_data(flags);
mdev->type = mgag200_type_from_driver_data(flags);
@@ -83,15 +77,33 @@ static int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
ret = mgag200_mm_init(mdev);
if (ret)
- goto err_mm;
+ return ret;
ret = mgag200_modeset_init(mdev);
if (ret) {
drm_err(dev, "Fatal error during modeset init: %d\n", ret);
- goto err_mm;
+ return ret;
}
return 0;
+}
+
+static int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
+{
+ struct mga_device *mdev;
+ int ret;
+
+ mdev = devm_kzalloc(dev->dev, sizeof(struct mga_device), GFP_KERNEL);
+ if (mdev == NULL)
+ return -ENOMEM;
+ dev->dev_private = (void *)mdev;
+ mdev->dev = dev;
+
+ ret = mgag200_device_init(mdev, flags);
+ if (ret)
+ goto err_mm;
+
+ return 0;
err_mm:
dev->dev_private = NULL;