goto done;
}
- /* The compose rectangle top left corner must be inside the output
+ /*
+ * The compose rectangle top left corner must be inside the output
* frame.
*/
format = vsp1_entity_get_pad_format(&bru->entity, config,
switch (params) {
case VSP1_ENTITY_PARAMS_INIT: {
- /* The format can't be changed during streaming, only verify it
+ /*
+ * The format can't be changed during streaming, only verify it
* at setup time and store the information internally for future
* runtime configuration calls.
*/
dl = list_first_entry(&dlm->free, struct vsp1_dl_list, list);
list_del(&dl->list);
- /* The display list chain must be initialised to ensure every
+ /*
+ * The display list chain must be initialised to ensure every
* display list can assert list_empty() if it is not in a chain.
*/
INIT_LIST_HEAD(&dl->chain);
if (!dl)
return;
- /* Release any linked display-lists which were chained for a single
+ /*
+ * Release any linked display-lists which were chained for a single
* hardware operation.
*/
if (dl->has_chain) {
dl->has_chain = false;
- /* We can't free fragments here as DMA memory can only be freed in
+ /*
+ * We can't free fragments here as DMA memory can only be freed in
* interruptible context. Move all fragments to the display list
* manager's list of fragments to be freed, they will be
* garbage-collected by the work queue.
struct vsp1_dl_body *dlb;
unsigned int num_lists = 0;
- /* Fill the header with the display list bodies addresses and sizes. The
+ /*
+ * Fill the header with the display list bodies addresses and sizes. The
* address of the first body has already been filled when the display
* list was allocated.
*/
dl->header->num_lists = num_lists;
- /* If this display list's chain is not empty, we are on a list, where
+ /*
+ * If this display list's chain is not empty, we are on a list, where
* the next item in the list is the display list entity which should be
* automatically queued by the hardware.
*/
if (dl->dlm->mode == VSP1_DL_MODE_HEADER) {
struct vsp1_dl_list *dl_child;
- /* In header mode the caller guarantees that the hardware is
+ /*
+ * In header mode the caller guarantees that the hardware is
* idle at this point.
*/
vsp1_dl_list_fill_header(dl_child, last);
}
- /* Commit the head display list to hardware. Chained headers
+ /*
+ * Commit the head display list to hardware. Chained headers
* will auto-start.
*/
vsp1_write(vsp1, VI6_DL_HDR_ADDR(dlm->index), dl->dma);
cfg->pixelformat, cfg->pitch, &cfg->mem[0], &cfg->mem[1],
&cfg->mem[2], cfg->zpos);
- /* Store the format, stride, memory buffer address, crop and compose
+ /*
+ * Store the format, stride, memory buffer address, crop and compose
* rectangles and Z-order position and for the input.
*/
fmtinfo = vsp1_get_format_info(vsp1, cfg->pixelformat);
VSP1_ENTITY_WPF,
};
-/*
+/**
* enum vsp1_entity_params - Entity configuration parameters class
* @VSP1_ENTITY_PARAMS_INIT - Initial parameters
* @VSP1_ENTITY_PARAMS_PARTITION - Per-image partition parameters
3, { 8, 8, 8 }, false, true, 1, 1, false },
};
-/*
+/**
* vsp1_get_format_info - Retrieve format information for a 4CC
* @vsp1: the VSP1 device
* @fourcc: the format 4CC
unsigned int offsets[2];
struct v4l2_rect crop;
- /* Source size and crop offsets.
+ /*
+ * Source size and crop offsets.
*
* The crop offsets correspond to the location of the crop
* rectangle top left corner in the plane buffer. Only two
*/
crop = *vsp1_rwpf_get_crop(rpf, rpf->entity.config);
- /* Partition Algorithm Control
+ /*
+ * Partition Algorithm Control
*
* The partition algorithm can split this frame into multiple
* slices. We must scale our partition window based on the pipe
struct vsp1_entity *wpf = &pipe->output->entity;
unsigned int input_width = crop.width;
- /* Scale the partition window based on the configuration
+ /*
+ * Scale the partition window based on the configuration
* of the pipeline.
*/
output = vsp1_entity_get_pad_format(wpf, wpf->config,
struct v4l2_mbus_framefmt *format;
int ret = 0;
- /* Cropping is only supported on the RPF and is implemented on the sink
+ /*
+ * Cropping is only supported on the RPF and is implemented on the sink
* pad.
*/
if (rwpf->entity.type == VSP1_ENTITY_WPF || sel->pad != RWPF_PAD_SINK)
struct v4l2_rect *crop;
int ret = 0;
- /* Cropping is only supported on the RPF and is implemented on the sink
+ /*
+ * Cropping is only supported on the RPF and is implemented on the sink
* pad.
*/
if (rwpf->entity.type == VSP1_ENTITY_WPF || sel->pad != RWPF_PAD_SINK)
pipe->partitions = DIV_ROUND_UP(format->width, div_size);
}
-/*
+/**
* vsp1_video_partition - Calculate the active partition output window
*
* @div_size: pre-determined maximum partition division size
modulus = format->width % div_size;
- /* We need to prevent the last partition from being smaller than the
+ /*
+ * We need to prevent the last partition from being smaller than the
* *minimum* width of the hardware capabilities.
*
* If the modulus is less than half of the partition size,
* to prevents this: |1234|1234|1234|1234|1|.
*/
if (modulus) {
- /* pipe->partitions is 1 based, whilst index is a 0 based index.
+ /*
+ * pipe->partitions is 1 based, whilst index is a 0 based index.
* Normalise this locally.
*/
unsigned int partitions = pipe->partitions - 1;
if (!pipe->dl)
pipe->dl = vsp1_dl_list_get(pipe->output->dlm);
- /* Start with the runtime parameters as the configure operation can
+ /*
+ * Start with the runtime parameters as the configure operation can
* compute/cache information needed when configuring partitions. This
* is the case with flipping in the WPF.
*/
pipe->current_partition++) {
struct vsp1_dl_list *dl;
- /* Partition configuration operations will utilise
+ /*
+ * Partition configuration operations will utilise
* the pipe->current_partition variable to determine
* the work they should complete.
*/
dl = vsp1_dl_list_get(pipe->output->dlm);
- /* An incomplete chain will still function, but output only
+ /*
+ * An incomplete chain will still function, but output only
* the partitions that had a dl available. The frame end
* interrupt will be marked on the last dl in the chain.
*/
unsigned long flags;
int ret;
- /* Clear the buffers ready flag to make sure the device won't be started
+ /*
+ * Clear the buffers ready flag to make sure the device won't be started
* by a QBUF on the video node on the other side of the pipeline.
*/
spin_lock_irqsave(&video->irqlock, flags);
unsigned int height = source_format->height;
unsigned int offset;
- /* Cropping. The partition algorithm can split the image into
+ /*
+ * Cropping. The partition algorithm can split the image into
* multiple slices.
*/
if (pipe->partitions > 1)
if (pipe->lif)
return;
- /* Update the memory offsets based on flipping configuration.
+ /*
+ * Update the memory offsets based on flipping configuration.
* The destination addresses point to the locations where the
* VSP starts writing to memory, which can be different corners
* of the image depending on vertical flipping.
if (pipe->partitions > 1) {
const struct vsp1_format_info *fmtinfo = wpf->fmtinfo;
- /* Horizontal flipping is handled through a line buffer
+ /*
+ * Horizontal flipping is handled through a line buffer
* and doesn't modify the start address, but still needs
* to be handled when image partitioning is in effect to
* order the partitions correctly.