Lines Matching full:layer
95 * enum zynqmp_disp_id - Layer identifier
96 * @ZYNQMP_DISP_LAYER_VID: Video layer
97 * @ZYNQMP_DISP_LAYER_GFX: Graphics layer
105 * enum zynqmp_disp_layer_mode - Layer mode
115 * struct zynqmp_disp_layer_dma - DMA channel for one data plane of a layer
127 * struct zynqmp_disp_layer_info - Static layer information
139 * struct zynqmp_disp_layer - Display layer (DRM plane)
141 * @id: Layer ID
143 * @info: Static layer information
257 /* List of video layer formats */
362 /* List of graphics layer formats */
439 * zynqmp_disp_avbuf_set_format - Set the input format for a layer
441 * @layer: The layer ID
444 * Set the video buffer manager format for @layer to @fmt.
447 enum zynqmp_disp_layer_id layer, in zynqmp_disp_avbuf_set_format() argument
454 val &= layer == ZYNQMP_DISP_LAYER_VID in zynqmp_disp_avbuf_set_format()
461 unsigned int reg = layer == ZYNQMP_DISP_LAYER_VID in zynqmp_disp_avbuf_set_format()
575 * zynqmp_disp_avbuf_enable_video - Enable a video layer
577 * @layer: The layer ID
578 * @mode: Operating mode of layer
580 * Enable the video/graphics buffer for @layer.
583 enum zynqmp_disp_layer_id layer, in zynqmp_disp_avbuf_enable_video() argument
589 if (layer == ZYNQMP_DISP_LAYER_VID) { in zynqmp_disp_avbuf_enable_video()
607 * zynqmp_disp_avbuf_disable_video - Disable a video layer
609 * @layer: The layer ID
611 * Disable the video/graphics buffer for @layer.
614 enum zynqmp_disp_layer_id layer) in zynqmp_disp_avbuf_disable_video() argument
619 if (layer == ZYNQMP_DISP_LAYER_VID) { in zynqmp_disp_avbuf_disable_video()
780 * zynqmp_disp_blend_layer_set_csc - Configure colorspace conversion for layer
782 * @layer: The layer
786 * Configure the input colorspace conversion matrix and offsets for the @layer.
791 struct zynqmp_disp_layer *layer, in zynqmp_disp_blend_layer_set_csc() argument
799 if (layer->disp_fmt->swap) { in zynqmp_disp_blend_layer_set_csc()
800 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_set_csc()
811 if (layer->id == ZYNQMP_DISP_LAYER_VID) in zynqmp_disp_blend_layer_set_csc()
822 if (layer->id == ZYNQMP_DISP_LAYER_VID) in zynqmp_disp_blend_layer_set_csc()
832 * zynqmp_disp_blend_layer_enable - Enable a layer
834 * @layer: The layer
837 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_enable() argument
843 val = (layer->drm_fmt->is_yuv ? in zynqmp_disp_blend_layer_enable()
845 (layer->drm_fmt->hsub > 1 ? in zynqmp_disp_blend_layer_enable()
849 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_enable()
852 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_enable()
860 zynqmp_disp_blend_layer_set_csc(blend, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
864 * zynqmp_disp_blend_layer_disable - Disable a layer
866 * @layer: The layer
869 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_disable() argument
872 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_disable()
875 zynqmp_disp_blend_layer_set_csc(blend, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
992 * ZynqMP Display Layer & DRM Plane
997 * @layer: The layer
1001 * format @drm_fmt for the @layer, and return a pointer to the format
1007 zynqmp_disp_layer_find_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_find_format() argument
1012 for (i = 0; i < layer->info->num_formats; i++) { in zynqmp_disp_layer_find_format()
1013 if (layer->info->formats[i].drm_fmt == drm_fmt) in zynqmp_disp_layer_find_format()
1014 return &layer->info->formats[i]; in zynqmp_disp_layer_find_format()
1021 * zynqmp_disp_layer_enable - Enable a layer
1022 * @layer: The layer
1024 * Enable the @layer in the audio/video buffer manager and the blender. DMA
1027 static void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_enable() argument
1029 zynqmp_disp_avbuf_enable_video(&layer->disp->avbuf, layer->id, in zynqmp_disp_layer_enable()
1031 zynqmp_disp_blend_layer_enable(&layer->disp->blend, layer); in zynqmp_disp_layer_enable()
1033 layer->mode = ZYNQMP_DISP_LAYER_NONLIVE; in zynqmp_disp_layer_enable()
1037 * zynqmp_disp_layer_disable - Disable the layer
1038 * @layer: The layer
1040 * Disable the layer by stopping its DMA channels and disabling it in the
1043 static void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_disable() argument
1047 for (i = 0; i < layer->drm_fmt->num_planes; i++) in zynqmp_disp_layer_disable()
1048 dmaengine_terminate_sync(layer->dmas[i].chan); in zynqmp_disp_layer_disable()
1050 zynqmp_disp_avbuf_disable_video(&layer->disp->avbuf, layer->id); in zynqmp_disp_layer_disable()
1051 zynqmp_disp_blend_layer_disable(&layer->disp->blend, layer); in zynqmp_disp_layer_disable()
1055 * zynqmp_disp_layer_set_format - Set the layer format
1056 * @layer: The layer
1059 * Set the format for @layer based on @state->fb->format. The layer must be
1062 static void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_set_format() argument
1068 layer->disp_fmt = zynqmp_disp_layer_find_format(layer, info->format); in zynqmp_disp_layer_set_format()
1069 layer->drm_fmt = info; in zynqmp_disp_layer_set_format()
1071 zynqmp_disp_avbuf_set_format(&layer->disp->avbuf, layer->id, in zynqmp_disp_layer_set_format()
1072 layer->disp_fmt); in zynqmp_disp_layer_set_format()
1079 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_set_format()
1090 * zynqmp_disp_layer_update - Update the layer framebuffer
1091 * @layer: The layer
1094 * Update the framebuffer for the layer by issuing a new DMA engine transaction
1099 static int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_update() argument
1102 const struct drm_format_info *info = layer->drm_fmt; in zynqmp_disp_layer_update()
1105 for (i = 0; i < layer->drm_fmt->num_planes; i++) { in zynqmp_disp_layer_update()
1108 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_update()
1128 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1168 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_disable() local
1173 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_disable()
1180 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_update() local
1194 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_update()
1196 zynqmp_disp_layer_set_format(layer, plane->state); in zynqmp_disp_plane_atomic_update()
1199 zynqmp_disp_layer_update(layer, plane->state); in zynqmp_disp_plane_atomic_update()
1203 zynqmp_disp_layer_enable(layer); in zynqmp_disp_plane_atomic_update()
1227 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_planes() local
1232 layer->info->num_formats, in zynqmp_disp_create_planes()
1237 for (j = 0; j < layer->info->num_formats; ++j) in zynqmp_disp_create_planes()
1238 drm_formats[j] = layer->info->formats[j].drm_fmt; in zynqmp_disp_create_planes()
1240 /* Graphics layer is primary, and video layer is overlay. */ in zynqmp_disp_create_planes()
1243 ret = drm_universal_plane_init(disp->drm, &layer->plane, 0, in zynqmp_disp_create_planes()
1246 layer->info->num_formats, in zynqmp_disp_create_planes()
1251 drm_plane_helper_add(&layer->plane, in zynqmp_disp_create_planes()
1259 * zynqmp_disp_layer_release_dma - Release DMA channels for a layer
1261 * @layer: The layer
1263 * Release the DMA channels associated with @layer.
1266 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_release_dma() argument
1270 if (!layer->info) in zynqmp_disp_layer_release_dma()
1273 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_release_dma()
1274 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_release_dma()
1298 * zynqmp_disp_layer_request_dma - Request DMA channels for a layer
1300 * @layer: The layer
1302 * Request all DMA engine channels needed by @layer.
1307 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_request_dma() argument
1313 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_request_dma()
1314 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_request_dma()
1318 "%s%u", dma_names[layer->id], i); in zynqmp_disp_layer_request_dma()
1357 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers() local
1359 layer->id = i; in zynqmp_disp_create_layers()
1360 layer->disp = disp; in zynqmp_disp_create_layers()
1361 layer->info = &layer_info[i]; in zynqmp_disp_create_layers()
1363 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1628 struct zynqmp_disp_layer *layer; in zynqmp_disp_probe() local
1680 layer = &disp->layers[ZYNQMP_DISP_LAYER_VID]; in zynqmp_disp_probe()
1681 dpsub->dma_align = 1 << layer->dmas[0].chan->device->copy_align; in zynqmp_disp_probe()