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 20struct logicvc_layer_buffer_setup { 21 u8 buffer_sel; 22 u16 voffset; 23 u16 hoffset; 24}; 25 26struct 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 35struct logicvc_layer_formats { 36 u32 colorspace; 37 u32 depth; 38 bool alpha; 39 uint32_t *formats; 40}; 41 42struct 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 52int 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); 56struct logicvc_layer *logicvc_layer_get_from_index(struct logicvc_drm *logicvc, 57 u32 index); 58struct logicvc_layer *logicvc_layer_get_from_type(struct logicvc_drm *logicvc, 59 enum drm_plane_type type); 60struct logicvc_layer *logicvc_layer_get_primary(struct logicvc_drm *logicvc); 61void logicvc_layers_attach_crtc(struct logicvc_drm *logicvc); 62int logicvc_layers_init(struct logicvc_drm *logicvc); 63 64#endif 65