Linux Audio

Check our new training course

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");