From ad486d4522ca0c033d373cb8340f5ec899b06453 Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Sat, 28 Nov 2015 16:10:34 +0100 Subject: [PATCH] facetimehd: remove cmd_ready variable instead evaluate the ringbuffer status. This allows to have more than one isp command in flight. --- fthd_drv.c | 1 - fthd_drv.h | 2 +- fthd_isp.c | 5 ++--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/fthd_drv.c b/fthd_drv.c index 09e343f..0acf8cd 100644 --- a/fthd_drv.c +++ b/fthd_drv.c @@ -199,7 +199,6 @@ static void fthd_handle_irq(struct fthd_private *dev_priv, struct fw_channel *ch } else if (chan == dev_priv->channel_buf_t2h) { buf_t2h_handler(dev_priv, chan, entry); } else if (chan == dev_priv->channel_io) { - dev_priv->cmd_ready = 1; wake_up_interruptible(&dev_priv->cmd_wq); } else if (chan == dev_priv->channel_io_t2h) { io_t2h_handler(dev_priv, chan, entry); diff --git a/fthd_drv.h b/fthd_drv.h index c6eae90..5675a76 100644 --- a/fthd_drv.h +++ b/fthd_drv.h @@ -76,7 +76,7 @@ struct fthd_private { /* waitqueue for signaling command completion */ wait_queue_head_t cmd_wq; - int cmd_ready; + /* Mapped PCI resources */ void __iomem *s2_io; u32 s2_io_len; diff --git a/fthd_isp.c b/fthd_isp.c index debced8..cf67698 100644 --- a/fthd_isp.c +++ b/fthd_isp.c @@ -310,7 +310,8 @@ static int fthd_isp_cmd(struct fthd_private *dev_priv, enum fthd_isp_cmds comman goto out; } - if (wait_event_interruptible_timeout(dev_priv->cmd_wq, dev_priv->cmd_ready, HZ) <= 0) { + if (wait_event_interruptible_timeout(dev_priv->cmd_wq, + FTHD_S2_MEM_READ(entry + FTHD_RINGBUF_ADDRESS_FLAGS) & 1, HZ) <= 0) { dev_err(&dev_priv->pdev->dev, "timeout wait for command %d\n", cmd.opcode); fthd_channel_ringbuf_dump(dev_priv, dev_priv->channel_io); if (response_len) @@ -319,8 +320,6 @@ static int fthd_isp_cmd(struct fthd_private *dev_priv, enum fthd_isp_cmds comman goto out; } - dev_priv->cmd_ready = 0; - FTHD_S2_MEMCPY_FROMIO(&cmd, request->offset, sizeof(struct isp_cmd_hdr)); address = FTHD_S2_MEM_READ(entry + FTHD_RINGBUF_ADDRESS_FLAGS); request_size = FTHD_S2_MEM_READ(entry + FTHD_RINGBUF_REQUEST_SIZE);