|
@@ -230,42 +230,33 @@ EXPORT_SYMBOL_GPL(vsp1_du_atomic_begin);
|
|
|
* vsp1_du_atomic_update - Setup one RPF input of the VSP pipeline
|
|
|
* @dev: the VSP device
|
|
|
* @rpf_index: index of the RPF to setup (0-based)
|
|
|
- * @pixelformat: V4L2 pixel format for the RPF memory input
|
|
|
- * @pitch: number of bytes per line in the image stored in memory
|
|
|
- * @mem: DMA addresses of the memory buffers (one per plane)
|
|
|
- * @src: the source crop rectangle for the RPF
|
|
|
- * @dst: the destination compose rectangle for the BRU input
|
|
|
- * @alpha: global alpha value for the input
|
|
|
- * @zpos: the Z-order position of the input
|
|
|
+ * @cfg: the RPF configuration
|
|
|
*
|
|
|
- * Configure the VSP to perform composition of the image referenced by @mem
|
|
|
- * through RPF @rpf_index, using the @src crop rectangle and the @dst
|
|
|
+ * Configure the VSP to perform image composition through RPF @rpf_index as
|
|
|
+ * described by the @cfg configuration. The image to compose is referenced by
|
|
|
+ * @cfg.mem and composed using the @cfg.src crop rectangle and the @cfg.dst
|
|
|
* composition rectangle. The Z-order is configurable with higher @zpos values
|
|
|
* displayed on top.
|
|
|
*
|
|
|
- * Image format as stored in memory is expressed as a V4L2 @pixelformat value.
|
|
|
- * As a special case, setting the pixel format to 0 will disable the RPF. The
|
|
|
- * @pitch, @mem, @src and @dst parameters are ignored in that case. Calling the
|
|
|
+ * If the @cfg configuration is NULL, the RPF will be disabled. Calling the
|
|
|
* function on a disabled RPF is allowed.
|
|
|
*
|
|
|
- * The memory pitch is configurable to allow for padding at end of lines, or
|
|
|
- * simple for images that extend beyond the crop rectangle boundaries. The
|
|
|
- * @pitch value is expressed in bytes and applies to all planes for multiplanar
|
|
|
- * formats.
|
|
|
+ * Image format as stored in memory is expressed as a V4L2 @cfg.pixelformat
|
|
|
+ * value. The memory pitch is configurable to allow for padding at end of lines,
|
|
|
+ * or simply for images that extend beyond the crop rectangle boundaries. The
|
|
|
+ * @cfg.pitch value is expressed in bytes and applies to all planes for
|
|
|
+ * multiplanar formats.
|
|
|
*
|
|
|
* The source memory buffer is referenced by the DMA address of its planes in
|
|
|
- * the @mem array. Up to two planes are supported. The second plane DMA address
|
|
|
- * is ignored for formats using a single plane.
|
|
|
+ * the @cfg.mem array. Up to two planes are supported. The second plane DMA
|
|
|
+ * address is ignored for formats using a single plane.
|
|
|
*
|
|
|
* This function isn't reentrant, the caller needs to serialize calls.
|
|
|
*
|
|
|
* Return 0 on success or a negative error code on failure.
|
|
|
*/
|
|
|
-int vsp1_du_atomic_update_ext(struct device *dev, unsigned int rpf_index,
|
|
|
- u32 pixelformat, unsigned int pitch,
|
|
|
- dma_addr_t mem[2], const struct v4l2_rect *src,
|
|
|
- const struct v4l2_rect *dst, unsigned int alpha,
|
|
|
- unsigned int zpos)
|
|
|
+int __vsp1_du_atomic_update(struct device *dev, unsigned int rpf_index,
|
|
|
+ const struct vsp1_du_atomic_config *cfg)
|
|
|
{
|
|
|
struct vsp1_device *vsp1 = dev_get_drvdata(dev);
|
|
|
const struct vsp1_format_info *fmtinfo;
|
|
@@ -276,7 +267,7 @@ int vsp1_du_atomic_update_ext(struct device *dev, unsigned int rpf_index,
|
|
|
|
|
|
rpf = vsp1->rpf[rpf_index];
|
|
|
|
|
|
- if (pixelformat == 0) {
|
|
|
+ if (!cfg) {
|
|
|
dev_dbg(vsp1->dev, "%s: RPF%u: disable requested\n", __func__,
|
|
|
rpf_index);
|
|
|
|
|
@@ -287,38 +278,39 @@ int vsp1_du_atomic_update_ext(struct device *dev, unsigned int rpf_index,
|
|
|
dev_dbg(vsp1->dev,
|
|
|
"%s: RPF%u: (%u,%u)/%ux%u -> (%u,%u)/%ux%u (%08x), pitch %u dma { %pad, %pad } zpos %u\n",
|
|
|
__func__, rpf_index,
|
|
|
- src->left, src->top, src->width, src->height,
|
|
|
- dst->left, dst->top, dst->width, dst->height,
|
|
|
- pixelformat, pitch, &mem[0], &mem[1], zpos);
|
|
|
+ cfg->src.left, cfg->src.top, cfg->src.width, cfg->src.height,
|
|
|
+ cfg->dst.left, cfg->dst.top, cfg->dst.width, cfg->dst.height,
|
|
|
+ cfg->pixelformat, cfg->pitch, &cfg->mem[0], &cfg->mem[1],
|
|
|
+ cfg->zpos);
|
|
|
|
|
|
/* Store the format, stride, memory buffer address, crop and compose
|
|
|
* rectangles and Z-order position and for the input.
|
|
|
*/
|
|
|
- fmtinfo = vsp1_get_format_info(pixelformat);
|
|
|
+ fmtinfo = vsp1_get_format_info(cfg->pixelformat);
|
|
|
if (!fmtinfo) {
|
|
|
dev_dbg(vsp1->dev, "Unsupport pixel format %08x for RPF\n",
|
|
|
- pixelformat);
|
|
|
+ cfg->pixelformat);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
rpf->fmtinfo = fmtinfo;
|
|
|
rpf->format.num_planes = fmtinfo->planes;
|
|
|
- rpf->format.plane_fmt[0].bytesperline = pitch;
|
|
|
- rpf->format.plane_fmt[1].bytesperline = pitch;
|
|
|
- rpf->alpha = alpha;
|
|
|
+ rpf->format.plane_fmt[0].bytesperline = cfg->pitch;
|
|
|
+ rpf->format.plane_fmt[1].bytesperline = cfg->pitch;
|
|
|
+ rpf->alpha = cfg->alpha;
|
|
|
|
|
|
- rpf->mem.addr[0] = mem[0];
|
|
|
- rpf->mem.addr[1] = mem[1];
|
|
|
+ rpf->mem.addr[0] = cfg->mem[0];
|
|
|
+ rpf->mem.addr[1] = cfg->mem[1];
|
|
|
rpf->mem.addr[2] = 0;
|
|
|
|
|
|
- vsp1->drm->inputs[rpf_index].crop = *src;
|
|
|
- vsp1->drm->inputs[rpf_index].compose = *dst;
|
|
|
- vsp1->drm->inputs[rpf_index].zpos = zpos;
|
|
|
+ vsp1->drm->inputs[rpf_index].crop = cfg->src;
|
|
|
+ vsp1->drm->inputs[rpf_index].compose = cfg->dst;
|
|
|
+ vsp1->drm->inputs[rpf_index].zpos = cfg->zpos;
|
|
|
vsp1->drm->inputs[rpf_index].enabled = true;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(vsp1_du_atomic_update_ext);
|
|
|
+EXPORT_SYMBOL_GPL(__vsp1_du_atomic_update);
|
|
|
|
|
|
static int vsp1_du_setup_rpf_pipe(struct vsp1_device *vsp1,
|
|
|
struct vsp1_rwpf *rpf, unsigned int bru_input)
|