Commit 09ea44ca authored by Tomi Valkeinen's avatar Tomi Valkeinen Committed by Mauro Carvalho Chehab
Browse files

media: ti-vpe: cal: simplify irq handling



Instead of having identical code block to handle irqs for the two CAL
ports, we can have a for loop and a single code block.

Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 84253285
Loading
Loading
Loading
Loading
+25 −43
Original line number Diff line number Diff line
@@ -1221,12 +1221,14 @@ static irqreturn_t cal_irq(int irq_cal, void *data)
	/* Check which DMA just finished */
	irqst2 = reg_read(dev, CAL_HL_IRQSTATUS(2));
	if (irqst2) {
		int i;

		/* Clear Interrupt status */
		reg_write(dev, CAL_HL_IRQSTATUS(2), irqst2);

		/* Need to check both port */
		if (isportirqset(irqst2, 1)) {
			ctx = dev->ctx[0];
		for (i = 1; i <= 2; ++i) {
			if (isportirqset(irqst2, i)) {
				ctx = dev->ctx[i - 1];

				spin_lock(&ctx->slock);
				ctx->dma_act = false;
@@ -1236,29 +1238,20 @@ static irqreturn_t cal_irq(int irq_cal, void *data)

				spin_unlock(&ctx->slock);
			}

		if (isportirqset(irqst2, 2)) {
			ctx = dev->ctx[1];

			spin_lock(&ctx->slock);
			ctx->dma_act = false;

			if (ctx->cur_frm != ctx->next_frm)
				cal_process_buffer_complete(ctx);

			spin_unlock(&ctx->slock);
		}
	}

	/* Check which DMA just started */
	irqst3 = reg_read(dev, CAL_HL_IRQSTATUS(3));
	if (irqst3) {
		int i;

		/* Clear Interrupt status */
		reg_write(dev, CAL_HL_IRQSTATUS(3), irqst3);

		/* Need to check both port */
		if (isportirqset(irqst3, 1)) {
			ctx = dev->ctx[0];
		for (i = 1; i <= 2; ++i) {
			if (isportirqset(irqst3, i)) {
				ctx = dev->ctx[i - 1];
				dma_q = &ctx->vidq;

				spin_lock(&ctx->slock);
@@ -1268,17 +1261,6 @@ static irqreturn_t cal_irq(int irq_cal, void *data)
					cal_schedule_next_buffer(ctx);
				spin_unlock(&ctx->slock);
			}

		if (isportirqset(irqst3, 2)) {
			ctx = dev->ctx[1];
			dma_q = &ctx->vidq;

			spin_lock(&ctx->slock);
			ctx->dma_act = true;
			if (!list_empty(&dma_q->active) &&
			    ctx->cur_frm == ctx->next_frm)
				cal_schedule_next_buffer(ctx);
			spin_unlock(&ctx->slock);
		}
	}