Lines Matching full:layer
95 * enum zynqmp_disp_layer_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
239 /* List of video layer formats */
344 /* List of graphics layer formats */
419 static bool zynqmp_disp_layer_is_gfx(const struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_is_gfx() argument
421 return layer->id == ZYNQMP_DISP_LAYER_GFX; in zynqmp_disp_layer_is_gfx()
424 static bool zynqmp_disp_layer_is_video(const struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_is_video() argument
426 return layer->id == ZYNQMP_DISP_LAYER_VID; in zynqmp_disp_layer_is_video()
430 * zynqmp_disp_avbuf_set_format - Set the input format for a layer
432 * @layer: The layer
435 * Set the video buffer manager format for @layer to @fmt.
438 struct zynqmp_disp_layer *layer, in zynqmp_disp_avbuf_set_format() argument
445 val &= zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
452 unsigned int reg = zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
566 * zynqmp_disp_avbuf_enable_video - Enable a video layer
568 * @layer: The layer
569 * @mode: Operating mode of layer
571 * Enable the video/graphics buffer for @layer.
574 struct zynqmp_disp_layer *layer, in zynqmp_disp_avbuf_enable_video() argument
580 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_enable_video()
598 * zynqmp_disp_avbuf_disable_video - Disable a video layer
600 * @layer: The layer
602 * Disable the video/graphics buffer for @layer.
605 struct zynqmp_disp_layer *layer) in zynqmp_disp_avbuf_disable_video() argument
610 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_disable_video()
770 * zynqmp_disp_blend_layer_set_csc - Configure colorspace conversion for layer
772 * @layer: The layer
776 * Configure the input colorspace conversion matrix and offsets for the @layer.
781 struct zynqmp_disp_layer *layer, in zynqmp_disp_blend_layer_set_csc() argument
789 if (layer->disp_fmt->swap) { in zynqmp_disp_blend_layer_set_csc()
790 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_set_csc()
801 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
812 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
822 * zynqmp_disp_blend_layer_enable - Enable a layer
824 * @layer: The layer
827 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_enable() argument
833 val = (layer->drm_fmt->is_yuv ? in zynqmp_disp_blend_layer_enable()
835 (layer->drm_fmt->hsub > 1 ? in zynqmp_disp_blend_layer_enable()
839 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_enable()
842 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_enable()
850 zynqmp_disp_blend_layer_set_csc(disp, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
854 * zynqmp_disp_blend_layer_disable - Disable a layer
856 * @layer: The layer
859 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_disable() argument
862 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_disable()
865 zynqmp_disp_blend_layer_set_csc(disp, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
980 * ZynqMP Display Layer & DRM Plane
985 * @layer: The layer
989 * format @drm_fmt for the @layer, and return a pointer to the format
995 zynqmp_disp_layer_find_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_find_format() argument
1000 for (i = 0; i < layer->info->num_formats; i++) { in zynqmp_disp_layer_find_format()
1001 if (layer->info->formats[i].drm_fmt == drm_fmt) in zynqmp_disp_layer_find_format()
1002 return &layer->info->formats[i]; in zynqmp_disp_layer_find_format()
1009 * zynqmp_disp_layer_enable - Enable a layer
1010 * @layer: The layer
1012 * Enable the @layer in the audio/video buffer manager and the blender. DMA
1015 static void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_enable() argument
1017 zynqmp_disp_avbuf_enable_video(layer->disp, layer, in zynqmp_disp_layer_enable()
1019 zynqmp_disp_blend_layer_enable(layer->disp, layer); in zynqmp_disp_layer_enable()
1021 layer->mode = ZYNQMP_DISP_LAYER_NONLIVE; in zynqmp_disp_layer_enable()
1025 * zynqmp_disp_layer_disable - Disable the layer
1026 * @layer: The layer
1028 * Disable the layer by stopping its DMA channels and disabling it in the
1031 static void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_disable() argument
1035 for (i = 0; i < layer->drm_fmt->num_planes; i++) in zynqmp_disp_layer_disable()
1036 dmaengine_terminate_sync(layer->dmas[i].chan); in zynqmp_disp_layer_disable()
1038 zynqmp_disp_avbuf_disable_video(layer->disp, layer); in zynqmp_disp_layer_disable()
1039 zynqmp_disp_blend_layer_disable(layer->disp, layer); in zynqmp_disp_layer_disable()
1043 * zynqmp_disp_layer_set_format - Set the layer format
1044 * @layer: The layer
1047 * Set the format for @layer based on @state->fb->format. The layer must be
1050 static void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_set_format() argument
1056 layer->disp_fmt = zynqmp_disp_layer_find_format(layer, info->format); in zynqmp_disp_layer_set_format()
1057 layer->drm_fmt = info; in zynqmp_disp_layer_set_format()
1059 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_format()
1066 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_set_format()
1081 * zynqmp_disp_layer_update - Update the layer framebuffer
1082 * @layer: The layer
1085 * Update the framebuffer for the layer by issuing a new DMA engine transaction
1090 static int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_update() argument
1093 const struct drm_format_info *info = layer->drm_fmt; in zynqmp_disp_layer_update()
1096 for (i = 0; i < layer->drm_fmt->num_planes; i++) { in zynqmp_disp_layer_update()
1099 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_update()
1119 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1164 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_disable() local
1169 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_disable()
1171 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_plane_atomic_disable()
1172 zynqmp_disp_blend_set_global_alpha(layer->disp, false, in zynqmp_disp_plane_atomic_disable()
1182 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_update() local
1196 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_update()
1198 zynqmp_disp_layer_set_format(layer, new_state); in zynqmp_disp_plane_atomic_update()
1201 zynqmp_disp_layer_update(layer, new_state); in zynqmp_disp_plane_atomic_update()
1203 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_plane_atomic_update()
1204 zynqmp_disp_blend_set_global_alpha(layer->disp, true, in zynqmp_disp_plane_atomic_update()
1209 zynqmp_disp_layer_enable(layer); in zynqmp_disp_plane_atomic_update()
1233 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_planes() local
1238 layer->info->num_formats, in zynqmp_disp_create_planes()
1243 for (j = 0; j < layer->info->num_formats; ++j) in zynqmp_disp_create_planes()
1244 drm_formats[j] = layer->info->formats[j].drm_fmt; in zynqmp_disp_create_planes()
1246 /* Graphics layer is primary, and video layer is overlay. */ in zynqmp_disp_create_planes()
1247 type = zynqmp_disp_layer_is_video(layer) in zynqmp_disp_create_planes()
1249 ret = drm_universal_plane_init(disp->drm, &layer->plane, 0, in zynqmp_disp_create_planes()
1252 layer->info->num_formats, in zynqmp_disp_create_planes()
1257 drm_plane_helper_add(&layer->plane, in zynqmp_disp_create_planes()
1260 drm_plane_create_zpos_immutable_property(&layer->plane, i); in zynqmp_disp_create_planes()
1261 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_create_planes()
1262 drm_plane_create_alpha_property(&layer->plane); in zynqmp_disp_create_planes()
1269 * zynqmp_disp_layer_release_dma - Release DMA channels for a layer
1271 * @layer: The layer
1273 * Release the DMA channels associated with @layer.
1276 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_release_dma() argument
1280 if (!layer->info) in zynqmp_disp_layer_release_dma()
1283 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_release_dma()
1284 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_release_dma()
1308 * zynqmp_disp_layer_request_dma - Request DMA channels for a layer
1310 * @layer: The layer
1312 * Request all DMA engine channels needed by @layer.
1317 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_request_dma() argument
1323 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_request_dma()
1324 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_request_dma()
1328 "%s%u", dma_names[layer->id], i); in zynqmp_disp_layer_request_dma()
1366 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers() local
1368 layer->id = i; in zynqmp_disp_create_layers()
1369 layer->disp = disp; in zynqmp_disp_create_layers()
1370 layer->info = &layer_info[i]; in zynqmp_disp_create_layers()
1372 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1634 struct zynqmp_disp_layer *layer; in zynqmp_disp_probe() local
1686 layer = &disp->layers[ZYNQMP_DISP_LAYER_VID]; in zynqmp_disp_probe()
1687 dpsub->dma_align = 1 << layer->dmas[0].chan->device->copy_align; in zynqmp_disp_probe()