logicvc_layer.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (C) 2019-2022 Bootlin
  4. * Author: Paul Kocialkowski <[email protected]>
  5. */
  6. #ifndef _LOGICVC_LAYER_H_
  7. #define _LOGICVC_LAYER_H_
  8. #include <linux/of.h>
  9. #include <linux/types.h>
  10. #include <drm/drm_plane.h>
  11. #define LOGICVC_LAYER_COLORSPACE_RGB 0
  12. #define LOGICVC_LAYER_COLORSPACE_YUV 1
  13. #define LOGICVC_LAYER_ALPHA_LAYER 0
  14. #define LOGICVC_LAYER_ALPHA_PIXEL 1
  15. struct logicvc_layer_buffer_setup {
  16. u8 buffer_sel;
  17. u16 voffset;
  18. u16 hoffset;
  19. };
  20. struct logicvc_layer_config {
  21. u32 colorspace;
  22. u32 depth;
  23. u32 alpha_mode;
  24. u32 base_offset;
  25. u32 buffer_offset;
  26. bool primary;
  27. };
  28. struct logicvc_layer_formats {
  29. u32 colorspace;
  30. u32 depth;
  31. bool alpha;
  32. uint32_t *formats;
  33. };
  34. struct logicvc_layer {
  35. struct logicvc_layer_config config;
  36. struct logicvc_layer_formats *formats;
  37. struct device_node *of_node;
  38. struct drm_plane drm_plane;
  39. struct list_head list;
  40. u32 index;
  41. };
  42. int logicvc_layer_buffer_find_setup(struct logicvc_drm *logicvc,
  43. struct logicvc_layer *layer,
  44. struct drm_plane_state *state,
  45. struct logicvc_layer_buffer_setup *setup);
  46. struct logicvc_layer *logicvc_layer_get_from_index(struct logicvc_drm *logicvc,
  47. u32 index);
  48. struct logicvc_layer *logicvc_layer_get_from_type(struct logicvc_drm *logicvc,
  49. enum drm_plane_type type);
  50. struct logicvc_layer *logicvc_layer_get_primary(struct logicvc_drm *logicvc);
  51. void logicvc_layers_attach_crtc(struct logicvc_drm *logicvc);
  52. int logicvc_layers_init(struct logicvc_drm *logicvc);
  53. #endif