Lines Matching full:layer

69  * enum zynqmp_dpsub_layer_mode - Layer mode
95 * struct zynqmp_disp_layer_dma - DMA channel for one data plane of a layer
107 * struct zynqmp_disp_layer_info - Static layer information
119 * struct zynqmp_disp_layer - Display layer
120 * @id: Layer ID
122 * @info: Static layer information
198 /* List of video layer formats */
303 /* List of graphics layer formats */
368 /* List of live video layer formats */
413 static bool zynqmp_disp_layer_is_video(const struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_is_video() argument
415 return layer->id == ZYNQMP_DPSUB_LAYER_VID; in zynqmp_disp_layer_is_video()
419 * zynqmp_disp_avbuf_set_format - Set the input format for a layer
421 * @layer: The layer
424 * Set the video buffer manager format for @layer to @fmt.
427 struct zynqmp_disp_layer *layer, in zynqmp_disp_avbuf_set_format() argument
433 layer->disp_fmt = fmt; in zynqmp_disp_avbuf_set_format()
434 if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) { in zynqmp_disp_avbuf_set_format()
437 val &= zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
443 reg = zynqmp_disp_layer_is_video(layer) in zynqmp_disp_avbuf_set_format()
451 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
569 * Enable the video/graphics buffer for @layer.
572 struct zynqmp_disp_layer *layer) in zynqmp_disp_avbuf_enable_video() argument
577 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_enable_video()
579 if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) in zynqmp_disp_avbuf_enable_video()
586 if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) in zynqmp_disp_avbuf_enable_video()
595 * zynqmp_disp_avbuf_disable_video - Disable a video layer
597 * @layer: The layer
599 * Disable the video/graphics buffer for @layer.
602 struct zynqmp_disp_layer *layer) in zynqmp_disp_avbuf_disable_video() argument
607 if (zynqmp_disp_layer_is_video(layer)) { in zynqmp_disp_avbuf_disable_video()
767 * zynqmp_disp_blend_layer_set_csc - Configure colorspace conversion for layer
769 * @layer: The layer
773 * Configure the input colorspace conversion matrix and offsets for the @layer.
778 struct zynqmp_disp_layer *layer, in zynqmp_disp_blend_layer_set_csc() argument
786 if (layer->disp_fmt->swap) { in zynqmp_disp_blend_layer_set_csc()
787 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_set_csc()
798 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
809 if (zynqmp_disp_layer_is_video(layer)) in zynqmp_disp_blend_layer_set_csc()
819 * zynqmp_disp_blend_layer_enable - Enable a layer
821 * @layer: The layer
824 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_enable() argument
830 val = (layer->drm_fmt->is_yuv ? in zynqmp_disp_blend_layer_enable()
832 (layer->drm_fmt->hsub > 1 ? in zynqmp_disp_blend_layer_enable()
836 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_enable()
839 if (layer->drm_fmt->is_yuv) { in zynqmp_disp_blend_layer_enable()
847 zynqmp_disp_blend_layer_set_csc(disp, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
851 * zynqmp_disp_blend_layer_disable - Disable a layer
853 * @layer: The layer
856 struct zynqmp_disp_layer *layer) in zynqmp_disp_blend_layer_disable() argument
859 ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id), in zynqmp_disp_blend_layer_disable()
862 zynqmp_disp_blend_layer_set_csc(disp, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
867 * ZynqMP Display Layer & DRM Plane
872 * @layer: The layer
876 * format @drm_fmt for the @layer, and return a pointer to the format
882 zynqmp_disp_layer_find_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_find_format() argument
887 for (i = 0; i < layer->info->num_formats; i++) { in zynqmp_disp_layer_find_format()
888 if (layer->info->formats[i].drm_fmt == drm_fmt) in zynqmp_disp_layer_find_format()
889 return &layer->info->formats[i]; in zynqmp_disp_layer_find_format()
898 * @layer: The layer
902 * bus format @media_bus_format for the @layer, and return a pointer to the
908 zynqmp_disp_layer_find_live_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_find_live_format() argument
913 for (i = 0; i < layer->info->num_formats; i++) in zynqmp_disp_layer_find_live_format()
914 if (layer->info->formats[i].bus_fmt == media_bus_format) in zynqmp_disp_layer_find_live_format()
915 return &layer->info->formats[i]; in zynqmp_disp_layer_find_live_format()
921 * zynqmp_disp_layer_drm_formats - Return the DRM formats supported by the layer
922 * @layer: The layer
928 * video input layer.
931 * supported by the layer. The number of formats in the array is returned
934 u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_drm_formats() argument
940 if (WARN_ON(layer->mode != ZYNQMP_DPSUB_LAYER_NONLIVE)) { in zynqmp_disp_layer_drm_formats()
945 formats = kcalloc(layer->info->num_formats, sizeof(*formats), in zynqmp_disp_layer_drm_formats()
952 for (i = 0; i < layer->info->num_formats; ++i) in zynqmp_disp_layer_drm_formats()
953 formats[i] = layer->info->formats[i].drm_fmt; in zynqmp_disp_layer_drm_formats()
955 *num_formats = layer->info->num_formats; in zynqmp_disp_layer_drm_formats()
961 * the live video layer
962 * @layer: The layer
968 * layer. The number of formats in the array is returned through the
971 u32 *zynqmp_disp_live_layer_formats(struct zynqmp_disp_layer *layer, in zynqmp_disp_live_layer_formats() argument
977 if (WARN_ON(layer->mode != ZYNQMP_DPSUB_LAYER_LIVE)) { in zynqmp_disp_live_layer_formats()
982 formats = kcalloc(layer->info->num_formats, sizeof(*formats), in zynqmp_disp_live_layer_formats()
989 for (i = 0; i < layer->info->num_formats; ++i) in zynqmp_disp_live_layer_formats()
990 formats[i] = layer->info->formats[i].bus_fmt; in zynqmp_disp_live_layer_formats()
992 *num_formats = layer->info->num_formats; in zynqmp_disp_live_layer_formats()
997 * zynqmp_disp_layer_enable - Enable a layer
998 * @layer: The layer
1000 * Enable the @layer in the audio/video buffer manager and the blender. DMA
1003 void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_enable() argument
1005 zynqmp_disp_avbuf_enable_video(layer->disp, layer); in zynqmp_disp_layer_enable()
1006 zynqmp_disp_blend_layer_enable(layer->disp, layer); in zynqmp_disp_layer_enable()
1010 * zynqmp_disp_layer_disable - Disable the layer
1011 * @layer: The layer
1013 * Disable the layer by stopping its DMA channels and disabling it in the
1016 void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_disable() argument
1020 if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE) { in zynqmp_disp_layer_disable()
1021 for (i = 0; i < layer->drm_fmt->num_planes; i++) in zynqmp_disp_layer_disable()
1022 dmaengine_terminate_sync(layer->dmas[i].chan); in zynqmp_disp_layer_disable()
1025 zynqmp_disp_avbuf_disable_video(layer->disp, layer); in zynqmp_disp_layer_disable()
1026 zynqmp_disp_blend_layer_disable(layer->disp, layer); in zynqmp_disp_layer_disable()
1030 * zynqmp_disp_layer_set_format - Set the layer format
1031 * @layer: The layer
1037 * Set the format for @layer to @info. The layer must be disabled.
1039 void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_set_format() argument
1044 if (WARN_ON(layer->mode != ZYNQMP_DPSUB_LAYER_NONLIVE)) in zynqmp_disp_layer_set_format()
1047 layer->disp_fmt = zynqmp_disp_layer_find_format(layer, info->format); in zynqmp_disp_layer_set_format()
1048 if (WARN_ON(!layer->disp_fmt)) in zynqmp_disp_layer_set_format()
1050 layer->drm_fmt = info; in zynqmp_disp_layer_set_format()
1052 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_format()
1059 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_set_format()
1074 * zynqmp_disp_layer_set_live_format - Set the live video layer format
1075 * @layer: The layer
1079 * layer. Use zynqmp_disp_layer_set_format() instead.
1081 * Set the display format for the live @layer. The layer must be disabled.
1083 void zynqmp_disp_layer_set_live_format(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_set_live_format() argument
1086 if (WARN_ON(layer->mode != ZYNQMP_DPSUB_LAYER_LIVE)) in zynqmp_disp_layer_set_live_format()
1089 layer->disp_fmt = zynqmp_disp_layer_find_live_format(layer, in zynqmp_disp_layer_set_live_format()
1091 if (WARN_ON(!layer->disp_fmt)) in zynqmp_disp_layer_set_live_format()
1094 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_live_format()
1096 layer->drm_fmt = drm_format_info(layer->disp_fmt->drm_fmt); in zynqmp_disp_layer_set_live_format()
1100 * zynqmp_disp_layer_update - Update the layer framebuffer
1101 * @layer: The layer
1104 * Update the framebuffer for the layer by issuing a new DMA engine transaction
1109 int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, in zynqmp_disp_layer_update() argument
1112 const struct drm_format_info *info = layer->drm_fmt; in zynqmp_disp_layer_update()
1115 if (layer->mode == ZYNQMP_DPSUB_LAYER_LIVE) in zynqmp_disp_layer_update()
1121 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_update()
1141 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1154 * zynqmp_disp_layer_release_dma - Release DMA channels for a layer
1156 * @layer: The layer
1158 * Release the DMA channels associated with @layer.
1161 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_release_dma() argument
1165 if (!layer->info) in zynqmp_disp_layer_release_dma()
1168 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_release_dma()
1169 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_release_dma()
1193 * zynqmp_disp_layer_request_dma - Request DMA channels for a layer
1195 * @layer: The layer
1197 * Request all DMA engine channels needed by @layer.
1202 struct zynqmp_disp_layer *layer) in zynqmp_disp_layer_request_dma() argument
1208 for (i = 0; i < layer->info->num_channels; i++) { in zynqmp_disp_layer_request_dma()
1209 struct zynqmp_disp_layer_dma *dma = &layer->dmas[i]; in zynqmp_disp_layer_request_dma()
1213 "%s%u", dma_names[layer->id], i); in zynqmp_disp_layer_request_dma()
1256 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers() local
1258 layer->id = i; in zynqmp_disp_create_layers()
1259 layer->disp = disp; in zynqmp_disp_create_layers()
1265 layer->mode = ZYNQMP_DPSUB_LAYER_NONLIVE; in zynqmp_disp_create_layers()
1266 layer->info = &layer_info[i]; in zynqmp_disp_create_layers()
1268 layer->mode = ZYNQMP_DPSUB_LAYER_LIVE; in zynqmp_disp_create_layers()
1269 layer->info = &live_layer_info; in zynqmp_disp_create_layers()
1272 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1276 disp->dpsub->layers[i] = layer; in zynqmp_disp_create_layers()
1387 struct zynqmp_disp_layer *layer; in zynqmp_disp_probe() local
1389 layer = &disp->layers[ZYNQMP_DPSUB_LAYER_VID]; in zynqmp_disp_probe()
1390 dpsub->dma_align = 1 << layer->dmas[0].chan->device->copy_align; in zynqmp_disp_probe()