Loading...
Note: File does not exist in v3.1.
1// SPDX-License-Identifier: GPL-2.0
2
3#include <drm/drm_drv.h>
4#include <drm/drm_managed.h>
5
6#include <kunit/resource.h>
7
8#include <linux/device.h>
9
10#include "drm_kunit_helpers.h"
11
12struct kunit_dev {
13 struct drm_device base;
14};
15
16static const struct drm_mode_config_funcs drm_mode_config_funcs = {
17};
18
19static int dev_init(struct kunit_resource *res, void *ptr)
20{
21 char *name = ptr;
22 struct device *dev;
23
24 dev = root_device_register(name);
25 if (IS_ERR(dev))
26 return PTR_ERR(dev);
27
28 res->data = dev;
29 return 0;
30}
31
32static void dev_free(struct kunit_resource *res)
33{
34 struct device *dev = res->data;
35
36 root_device_unregister(dev);
37}
38
39struct drm_device *drm_kunit_device_init(struct kunit *test, u32 features, char *name)
40{
41 struct kunit_dev *kdev;
42 struct drm_device *drm;
43 struct drm_driver *driver;
44 struct device *dev;
45 int ret;
46
47 dev = kunit_alloc_resource(test, dev_init, dev_free, GFP_KERNEL, name);
48 if (!dev)
49 return ERR_PTR(-ENOMEM);
50
51 driver = kunit_kzalloc(test, sizeof(*driver), GFP_KERNEL);
52 if (!driver)
53 return ERR_PTR(-ENOMEM);
54
55 driver->driver_features = features;
56 kdev = devm_drm_dev_alloc(dev, driver, struct kunit_dev, base);
57 if (IS_ERR(kdev))
58 return ERR_CAST(kdev);
59
60 drm = &kdev->base;
61 drm->mode_config.funcs = &drm_mode_config_funcs;
62
63 ret = drmm_mode_config_init(drm);
64 if (ret)
65 return ERR_PTR(ret);
66
67 return drm;
68}
69
70MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
71MODULE_LICENSE("GPL");