From: Steve Longerbeam <slongerb...@gmail.com>

[ Upstream commit 0f6245f42ce9b7e4d20f2cda8d5f12b55a44d7d1 ]

Combine the rotate_irq() and norotate_irq() handlers into a single
eof_irq() handler.

Signed-off-by: Steve Longerbeam <slongerb...@gmail.com>
Signed-off-by: Philipp Zabel <p.za...@pengutronix.de>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/ipu-v3/ipu-image-convert.c | 58 +++++++++-----------------
 1 file changed, 20 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c 
b/drivers/gpu/ipu-v3/ipu-image-convert.c
index a5e33d58e02f7..d2f9e65522676 100644
--- a/drivers/gpu/ipu-v3/ipu-image-convert.c
+++ b/drivers/gpu/ipu-v3/ipu-image-convert.c
@@ -992,9 +992,10 @@ static irqreturn_t do_irq(struct ipu_image_convert_run 
*run)
        return IRQ_WAKE_THREAD;
 }
 
-static irqreturn_t norotate_irq(int irq, void *data)
+static irqreturn_t eof_irq(int irq, void *data)
 {
        struct ipu_image_convert_chan *chan = data;
+       struct ipu_image_convert_priv *priv = chan->priv;
        struct ipu_image_convert_ctx *ctx;
        struct ipu_image_convert_run *run;
        unsigned long flags;
@@ -1011,45 +1012,26 @@ static irqreturn_t norotate_irq(int irq, void *data)
 
        ctx = run->ctx;
 
-       if (ipu_rot_mode_is_irt(ctx->rot_mode)) {
-               /* this is a rotation operation, just ignore */
-               spin_unlock_irqrestore(&chan->irqlock, flags);
-               return IRQ_HANDLED;
-       }
-
-       ret = do_irq(run);
-out:
-       spin_unlock_irqrestore(&chan->irqlock, flags);
-       return ret;
-}
-
-static irqreturn_t rotate_irq(int irq, void *data)
-{
-       struct ipu_image_convert_chan *chan = data;
-       struct ipu_image_convert_priv *priv = chan->priv;
-       struct ipu_image_convert_ctx *ctx;
-       struct ipu_image_convert_run *run;
-       unsigned long flags;
-       irqreturn_t ret;
-
-       spin_lock_irqsave(&chan->irqlock, flags);
-
-       /* get current run and its context */
-       run = chan->current_run;
-       if (!run) {
+       if (irq == chan->out_eof_irq) {
+               if (ipu_rot_mode_is_irt(ctx->rot_mode)) {
+                       /* this is a rotation op, just ignore */
+                       ret = IRQ_HANDLED;
+                       goto out;
+               }
+       } else if (irq == chan->rot_out_eof_irq) {
+               if (!ipu_rot_mode_is_irt(ctx->rot_mode)) {
+                       /* this was NOT a rotation op, shouldn't happen */
+                       dev_err(priv->ipu->dev,
+                               "Unexpected rotation interrupt\n");
+                       ret = IRQ_HANDLED;
+                       goto out;
+               }
+       } else {
+               dev_err(priv->ipu->dev, "Received unknown irq %d\n", irq);
                ret = IRQ_NONE;
                goto out;
        }
 
-       ctx = run->ctx;
-
-       if (!ipu_rot_mode_is_irt(ctx->rot_mode)) {
-               /* this was NOT a rotation operation, shouldn't happen */
-               dev_err(priv->ipu->dev, "Unexpected rotation interrupt\n");
-               spin_unlock_irqrestore(&chan->irqlock, flags);
-               return IRQ_HANDLED;
-       }
-
        ret = do_irq(run);
 out:
        spin_unlock_irqrestore(&chan->irqlock, flags);
@@ -1142,7 +1124,7 @@ static int get_ipu_resources(struct 
ipu_image_convert_chan *chan)
                                                  chan->out_chan,
                                                  IPU_IRQ_EOF);
 
-       ret = request_threaded_irq(chan->out_eof_irq, norotate_irq, do_bh,
+       ret = request_threaded_irq(chan->out_eof_irq, eof_irq, do_bh,
                                   0, "ipu-ic", chan);
        if (ret < 0) {
                dev_err(priv->ipu->dev, "could not acquire irq %d\n",
@@ -1155,7 +1137,7 @@ static int get_ipu_resources(struct 
ipu_image_convert_chan *chan)
                                                     chan->rotation_out_chan,
                                                     IPU_IRQ_EOF);
 
-       ret = request_threaded_irq(chan->rot_out_eof_irq, rotate_irq, do_bh,
+       ret = request_threaded_irq(chan->rot_out_eof_irq, eof_irq, do_bh,
                                   0, "ipu-ic", chan);
        if (ret < 0) {
                dev_err(priv->ipu->dev, "could not acquire irq %d\n",
-- 
2.25.1



Reply via email to