vkms_plane.c 1.3 KB

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