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