1*85397f6bSThomas Zimmermann // SPDX-License-Identifier: GPL-2.0-only
2*85397f6bSThomas Zimmermann 
3*85397f6bSThomas Zimmermann #include <linux/pci.h>
4*85397f6bSThomas Zimmermann 
5*85397f6bSThomas Zimmermann #include <drm/drm_drv.h>
6*85397f6bSThomas Zimmermann 
7*85397f6bSThomas Zimmermann #include "mgag200_drv.h"
8*85397f6bSThomas Zimmermann 
9*85397f6bSThomas Zimmermann /*
10*85397f6bSThomas Zimmermann  * DRM device
11*85397f6bSThomas Zimmermann  */
12*85397f6bSThomas Zimmermann 
13*85397f6bSThomas Zimmermann struct mga_device *mgag200_g200wb_device_create(struct pci_dev *pdev, const struct drm_driver *drv,
14*85397f6bSThomas Zimmermann 						enum mga_type type, unsigned long flags)
15*85397f6bSThomas Zimmermann {
16*85397f6bSThomas Zimmermann 	struct mga_device *mdev;
17*85397f6bSThomas Zimmermann 	struct drm_device *dev;
18*85397f6bSThomas Zimmermann 	int ret;
19*85397f6bSThomas Zimmermann 
20*85397f6bSThomas Zimmermann 	mdev = devm_drm_dev_alloc(&pdev->dev, drv, struct mga_device, base);
21*85397f6bSThomas Zimmermann 	if (IS_ERR(mdev))
22*85397f6bSThomas Zimmermann 		return mdev;
23*85397f6bSThomas Zimmermann 	dev = &mdev->base;
24*85397f6bSThomas Zimmermann 
25*85397f6bSThomas Zimmermann 	pci_set_drvdata(pdev, dev);
26*85397f6bSThomas Zimmermann 
27*85397f6bSThomas Zimmermann 	mdev->flags = flags;
28*85397f6bSThomas Zimmermann 	mdev->type = type;
29*85397f6bSThomas Zimmermann 
30*85397f6bSThomas Zimmermann 	ret = mgag200_regs_init(mdev);
31*85397f6bSThomas Zimmermann 	if (ret)
32*85397f6bSThomas Zimmermann 		return ERR_PTR(ret);
33*85397f6bSThomas Zimmermann 
34*85397f6bSThomas Zimmermann 	ret = mgag200_mm_init(mdev);
35*85397f6bSThomas Zimmermann 	if (ret)
36*85397f6bSThomas Zimmermann 		return ERR_PTR(ret);
37*85397f6bSThomas Zimmermann 
38*85397f6bSThomas Zimmermann 	ret = mgag200_modeset_init(mdev);
39*85397f6bSThomas Zimmermann 	if (ret)
40*85397f6bSThomas Zimmermann 		return ERR_PTR(ret);
41*85397f6bSThomas Zimmermann 
42*85397f6bSThomas Zimmermann 	return mdev;
43*85397f6bSThomas Zimmermann }
44