Lines Matching defs:layer
87 struct logicvc_layer *layer = logicvc_layer(drm_plane);
111 ret = logicvc_layer_buffer_find_setup(logicvc, layer, new_state,
123 layer->index != (logicvc->config.layers_count - 1) &&
140 struct logicvc_layer *layer = logicvc_layer(drm_plane);
149 u32 index = layer->index;
167 logicvc_layer_buffer_find_setup(logicvc, layer, new_state,
185 /* Vertical position must be set last to sync layer register changes. */
191 if (layer->config.alpha_mode == LOGICVC_LAYER_ALPHA_LAYER) {
196 switch (layer->config.depth) {
201 if (layer->config.colorspace ==
215 drm_dbg_kms(drm_dev, "Setting layer %d alpha to %d/%d\n", index,
237 struct logicvc_layer *layer = logicvc_layer(drm_plane);
239 u32 index = layer->index;
260 struct logicvc_layer *layer,
269 u32 base_offset = layer->config.base_offset * layer_stride;
270 u32 buffer_offset = layer->config.buffer_offset * layer_stride;
294 "Framebuffer offset below layer base offset!\n");
329 "Unable to find layer %d buffer setup for 0x%x byte gap\n",
330 layer->index, fb_offset - base_offset);
334 drm_dbg_kms(drm_dev, "Found layer %d buffer setup for 0x%x byte gap:\n",
335 layer->index, fb_offset - base_offset);
353 static struct logicvc_layer_formats *logicvc_layer_formats_lookup(struct logicvc_layer *layer)
358 alpha = (layer->config.alpha_mode == LOGICVC_LAYER_ALPHA_PIXEL);
361 if (logicvc_layer_formats[i].colorspace == layer->config.colorspace &&
362 logicvc_layer_formats[i].depth == layer->config.depth &&
383 struct logicvc_layer *layer)
385 struct device_node *of_node = layer->of_node;
386 struct logicvc_layer_config *config = &layer->config;
412 * Memory offset is only relevant without layer address configuration.
435 struct logicvc_layer *layer;
437 list_for_each_entry(layer, &logicvc->layers_list, list)
438 if (layer->index == index)
439 return layer;
447 struct logicvc_layer *layer;
449 list_for_each_entry(layer, &logicvc->layers_list, list)
450 if (layer->drm_plane.type == type)
451 return layer;
466 struct logicvc_layer *layer = NULL;
473 layer = devm_kzalloc(dev, sizeof(*layer), GFP_KERNEL);
474 if (!layer) {
479 layer->of_node = of_node;
480 layer->index = index;
482 ret = logicvc_layer_config_parse(logicvc, layer);
484 drm_err(drm_dev, "Failed to parse config for layer #%d\n",
489 formats = logicvc_layer_formats_lookup(layer);
491 drm_err(drm_dev, "Failed to lookup formats for layer #%d\n",
499 /* The final layer can be configured as a background layer. */
508 drm_dbg_kms(drm_dev, "Using layer #%d as background layer\n",
514 devm_kfree(dev, layer);
519 if (layer->config.primary)
524 ret = drm_universal_plane_init(drm_dev, &layer->drm_plane, 0,
528 drm_err(drm_dev, "Failed to initialize layer plane\n");
532 drm_plane_helper_add(&layer->drm_plane, &logicvc_plane_helper_funcs);
535 drm_dbg_kms(drm_dev, "Giving layer #%d zpos %d\n", index, zpos);
537 if (layer->config.alpha_mode == LOGICVC_LAYER_ALPHA_LAYER)
538 drm_plane_create_alpha_property(&layer->drm_plane);
540 drm_plane_create_zpos_immutable_property(&layer->drm_plane, zpos);
542 drm_dbg_kms(drm_dev, "Registering layer #%d\n", index);
544 layer->formats = formats;
546 list_add_tail(&layer->list, &logicvc->layers_list);
551 if (layer)
552 devm_kfree(dev, layer);
558 struct logicvc_layer *layer)
562 list_del(&layer->list);
563 devm_kfree(dev, layer);
569 struct logicvc_layer *layer;
571 list_for_each_entry(layer, &logicvc->layers_list, list) {
572 if (layer->drm_plane.type != DRM_PLANE_TYPE_OVERLAY)
575 layer->drm_plane.possible_crtcs = possible_crtcs;
586 struct logicvc_layer *layer;
607 layer = logicvc_layer_get_from_index(logicvc, index);
608 if (layer) {
609 drm_err(drm_dev, "Duplicated entry for layer #%d\n",
626 list_for_each_entry_safe(layer, next, &logicvc->layers_list, list)
627 logicvc_layer_fini(logicvc, layer);