Lines Matching full:layer

94  * enum zynqmp_disp_layer_id - Layer identifier
95 * @ZYNQMP_DISP_LAYER_VID: Video layer
96 * @ZYNQMP_DISP_LAYER_GFX: Graphics layer
104 * enum zynqmp_disp_layer_mode - Layer mode
114 * struct zynqmp_disp_layer_dma - DMA channel for one data plane of a layer
126 * struct zynqmp_disp_layer_info - Static layer information
138 * struct zynqmp_disp_layer - Display layer (DRM plane)
140 * @id: Layer ID
142 * @info: Static layer information
238 /* List of video layer formats */
343 /* List of graphics layer formats */
418 static bool zynqmp_disp_layer_is_gfx(const struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_is_gfx() argument
420 return layer->id == ZYNQMP_DISP_LAYER_GFX; in zynqmp_disp_layer_is_gfx()
423 static bool zynqmp_disp_layer_is_video(const struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_is_video() argument
425 return layer->id == ZYNQMP_DISP_LAYER_VID; in zynqmp_disp_layer_is_video()
429 * zynqmp_disp_avbuf_set_format - Set the input format for a layer
431 * @layer: The layer
434 * Set the video buffer manager format for @layer to @fmt.
437 struct zynqmp_disp_layer *layer, in zynqmp_disp_avbuf_set_format() argument
444 val &= zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
451 unsigned int reg = zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
565 * zynqmp_disp_avbuf_enable_video - Enable a video layer
567 * @layer: The layer
568 * @mode: Operating mode of layer
570 * Enable the video/graphics buffer for @layer.
573 struct zynqmp_disp_layer *layer, in zynqmp_disp_avbuf_enable_video() argument
579 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_enable_video()
597 * zynqmp_disp_avbuf_disable_video - Disable a video layer
599 * @layer: The layer
601 * Disable the video/graphics buffer for @layer.
604 struct zynqmp_disp_layer *layer) in zynqmp_disp_avbuf_disable_video() argument
609 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_disable_video()
769 * zynqmp_disp_blend_layer_set_csc - Configure colorspace conversion for layer
771 * @layer: The layer
775 * Configure the input colorspace conversion matrix and offsets for the @layer.
780 struct zynqmp_disp_layer *layer, in zynqmp_disp_blend_layer_set_csc() argument
788 if (layer->disp_fmt->swap) { in zynqmp_disp_blend_layer_set_csc()
789 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_set_csc()
800 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
811 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
821 * zynqmp_disp_blend_layer_enable - Enable a layer
823 * @layer: The layer
826 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_enable() argument
832 val = (layer->drm_fmt->is_yuv ? in zynqmp_disp_blend_layer_enable()
834 (layer->drm_fmt->hsub > 1 ? in zynqmp_disp_blend_layer_enable()
838 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_enable()
841 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_enable()
849 zynqmp_disp_blend_layer_set_csc(disp, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
853 * zynqmp_disp_blend_layer_disable - Disable a layer
855 * @layer: The layer
858 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_disable() argument
861 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_disable()
864 zynqmp_disp_blend_layer_set_csc(disp, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
979 * ZynqMP Display Layer & DRM Plane
984 * @layer: The layer
988 * format @drm_fmt for the @layer, and return a pointer to the format
994 zynqmp_disp_layer_find_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_find_format() argument
999 for (i = 0; i < layer->info->num_formats; i++) { in zynqmp_disp_layer_find_format()
1000 if (layer->info->formats[i].drm_fmt == drm_fmt) in zynqmp_disp_layer_find_format()
1001 return &layer->info->formats[i]; in zynqmp_disp_layer_find_format()
1008 * zynqmp_disp_layer_enable - Enable a layer
1009 * @layer: The layer
1011 * Enable the @layer in the audio/video buffer manager and the blender. DMA
1014 static void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_enable() argument
1016 zynqmp_disp_avbuf_enable_video(layer->disp, layer, in zynqmp_disp_layer_enable()
1018 zynqmp_disp_blend_layer_enable(layer->disp, layer); in zynqmp_disp_layer_enable()
1020 layer->mode = ZYNQMP_DISP_LAYER_NONLIVE; in zynqmp_disp_layer_enable()
1024 * zynqmp_disp_layer_disable - Disable the layer
1025 * @layer: The layer
1027 * Disable the layer by stopping its DMA channels and disabling it in the
1030 static void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_disable() argument
1034 for (i = 0; i < layer->drm_fmt->num_planes; i++) in zynqmp_disp_layer_disable()
1035 dmaengine_terminate_sync(layer->dmas[i].chan); in zynqmp_disp_layer_disable()
1037 zynqmp_disp_avbuf_disable_video(layer->disp, layer); in zynqmp_disp_layer_disable()
1038 zynqmp_disp_blend_layer_disable(layer->disp, layer); in zynqmp_disp_layer_disable()
1042 * zynqmp_disp_layer_set_format - Set the layer format
1043 * @layer: The layer
1046 * Set the format for @layer based on @state->fb->format. The layer must be
1049 static void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_set_format() argument
1055 layer->disp_fmt = zynqmp_disp_layer_find_format(layer, info->format); in zynqmp_disp_layer_set_format()
1056 layer->drm_fmt = info; in zynqmp_disp_layer_set_format()
1058 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_format()
1065 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_set_format()
1076 * zynqmp_disp_layer_update - Update the layer framebuffer
1077 * @layer: The layer
1080 * Update the framebuffer for the layer by issuing a new DMA engine transaction
1085 static int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_update() argument
1088 const struct drm_format_info *info = layer->drm_fmt; in zynqmp_disp_layer_update()
1091 for (i = 0; i < layer->drm_fmt->num_planes; i++) { in zynqmp_disp_layer_update()
1094 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_update()
1114 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1159 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_disable() local
1164 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_disable()
1166 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_plane_atomic_disable()
1167 zynqmp_disp_blend_set_global_alpha(layer->disp, false, in zynqmp_disp_plane_atomic_disable()
1177 struct zynqmp_disp_layer *layer = plane_to_layer(plane); in zynqmp_disp_plane_atomic_update() local
1191 zynqmp_disp_layer_disable(layer); in zynqmp_disp_plane_atomic_update()
1193 zynqmp_disp_layer_set_format(layer, new_state); in zynqmp_disp_plane_atomic_update()
1196 zynqmp_disp_layer_update(layer, new_state); in zynqmp_disp_plane_atomic_update()
1198 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_plane_atomic_update()
1199 zynqmp_disp_blend_set_global_alpha(layer->disp, true, in zynqmp_disp_plane_atomic_update()
1204 zynqmp_disp_layer_enable(layer); in zynqmp_disp_plane_atomic_update()
1228 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_planes() local
1233 layer->info->num_formats, in zynqmp_disp_create_planes()
1238 for (j = 0; j < layer->info->num_formats; ++j) in zynqmp_disp_create_planes()
1239 drm_formats[j] = layer->info->formats[j].drm_fmt; in zynqmp_disp_create_planes()
1241 /* Graphics layer is primary, and video layer is overlay. */ in zynqmp_disp_create_planes()
1242 type = zynqmp_disp_layer_is_video(layer) in zynqmp_disp_create_planes()
1244 ret = drm_universal_plane_init(disp->drm, &layer->plane, 0, in zynqmp_disp_create_planes()
1247 layer->info->num_formats, in zynqmp_disp_create_planes()
1252 drm_plane_helper_add(&layer->plane, in zynqmp_disp_create_planes()
1255 drm_plane_create_zpos_immutable_property(&layer->plane, i); in zynqmp_disp_create_planes()
1256 if (zynqmp_disp_layer_is_gfx(layer)) in zynqmp_disp_create_planes()
1257 drm_plane_create_alpha_property(&layer->plane); in zynqmp_disp_create_planes()
1264 * zynqmp_disp_layer_release_dma - Release DMA channels for a layer
1266 * @layer: The layer
1268 * Release the DMA channels associated with @layer.
1271 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_release_dma() argument
1275 if (!layer->info) in zynqmp_disp_layer_release_dma()
1278 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_release_dma()
1279 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_release_dma()
1303 * zynqmp_disp_layer_request_dma - Request DMA channels for a layer
1305 * @layer: The layer
1307 * Request all DMA engine channels needed by @layer.
1312 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_request_dma() argument
1318 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_request_dma()
1319 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_request_dma()
1323 "%s%u", dma_names[layer->id], i); in zynqmp_disp_layer_request_dma()
1361 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers() local
1363 layer->id = i; in zynqmp_disp_create_layers()
1364 layer->disp = disp; in zynqmp_disp_create_layers()
1365 layer->info = &layer_info[i]; in zynqmp_disp_create_layers()
1367 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1629 struct zynqmp_disp_layer *layer; in zynqmp_disp_probe() local
1681 layer = &disp->layers[ZYNQMP_DISP_LAYER_VID]; in zynqmp_disp_probe()
1682 dpsub->dma_align = 1 << layer->dmas[0].chan->device->copy_align; in zynqmp_disp_probe()