media: rcar-vin: Remove superfluous starting state

The STARTING state is superfluous and can be replaced with a check of
the sequence counter. The design idea is that the first buffer returned
from the driver have to come from the first hardware buffer slot.
Failing this the first 3 buffers queued to the device can be returned
out-of-order.

But it's much clearer to check the sequence counter to only return the
first buffer if it comes from hardware slot 0 then it is to carry around
an extra state just for this. Remove the unneeded state and replace it
with a simpler check.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Tested-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
Niklas Söderlund
2025-02-10 18:56:13 +01:00
committed by Hans Verkuil
parent 1dadd89b58
commit 25482a986e
2 changed files with 2 additions and 5 deletions

View File

@@ -1048,7 +1048,7 @@ static int rvin_capture_start(struct rvin_dev *vin)
/* Continuous Frame Capture Mode */
rvin_write(vin, VNFC_C_FRAME, VNFC_REG);
vin->state = STARTING;
vin->state = RUNNING;
return 0;
}
@@ -1104,14 +1104,13 @@ static irqreturn_t rvin_irq(int irq, void *data)
* To hand buffers back in a known order to userspace start
* to capture first from slot 0.
*/
if (vin->state == STARTING) {
if (!vin->sequence) {
if (slot != 0) {
vin_dbg(vin, "Starting sync slot: %d\n", slot);
goto done;
}
vin_dbg(vin, "Capture start synced!\n");
vin->state = RUNNING;
}
/* Capture frame */

View File

@@ -64,13 +64,11 @@ enum rvin_isp_id {
/**
* enum rvin_dma_state - DMA states
* @STOPPED: No operation in progress
* @STARTING: Capture starting up
* @RUNNING: Operation in progress have buffers
* @STOPPING: Stopping operation
*/
enum rvin_dma_state {
STOPPED = 0,
STARTING,
RUNNING,
STOPPING,
};