• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0+
2 
3 #include "vkms_drv.h"
4 #include <drm/drm_plane_helper.h>
5 #include <drm/drm_atomic_helper.h>
6 
7 static const struct drm_plane_funcs vkms_plane_funcs = {
8 	.update_plane		= drm_atomic_helper_update_plane,
9 	.disable_plane		= drm_atomic_helper_disable_plane,
10 	.destroy		= drm_plane_cleanup,
11 	.reset			= drm_atomic_helper_plane_reset,
12 	.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
13 	.atomic_destroy_state	= drm_atomic_helper_plane_destroy_state,
14 };
15 
vkms_primary_plane_update(struct drm_plane * plane,struct drm_plane_state * old_state)16 static void vkms_primary_plane_update(struct drm_plane *plane,
17 				      struct drm_plane_state *old_state)
18 {
19 }
20 
21 static const struct drm_plane_helper_funcs vkms_primary_helper_funcs = {
22 	.atomic_update		= vkms_primary_plane_update,
23 };
24 
vkms_plane_init(struct vkms_device * vkmsdev)25 struct drm_plane *vkms_plane_init(struct vkms_device *vkmsdev)
26 {
27 	struct drm_device *dev = &vkmsdev->drm;
28 	struct drm_plane *plane;
29 	const u32 *formats;
30 	int ret, nformats;
31 
32 	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
33 	if (!plane)
34 		return ERR_PTR(-ENOMEM);
35 
36 	formats = vkms_formats;
37 	nformats = ARRAY_SIZE(vkms_formats);
38 
39 	ret = drm_universal_plane_init(dev, plane, 0,
40 				       &vkms_plane_funcs,
41 				       formats, nformats,
42 				       NULL, DRM_PLANE_TYPE_PRIMARY, NULL);
43 	if (ret) {
44 		kfree(plane);
45 		return ERR_PTR(ret);
46 	}
47 
48 	drm_plane_helper_add(plane, &vkms_primary_helper_funcs);
49 
50 	return plane;
51 }
52