From 0bbac1856792ecd8c537dbd5c5f60a2a0e51a2c7 Mon Sep 17 00:00:00 2001 From: Steven Toth Date: Wed, 12 Aug 2009 12:14:37 -0300 Subject: [PATCH] --- yaml --- r: 164151 b: refs/heads/master c: 39e469ab6dee0977a6fb632c711fba1ec5fca401 h: refs/heads/master i: 164149: d221ea7cfc5b12ce03477b95faf3da63dcd84224 164147: f9aadf82f1d8ed9bb9119e1460d67f2a6fab9478 164143: bf67109208d0b07b2bc6142ff289663b8f5ae49b v: v3 --- [refs] | 2 +- .../drivers/media/video/saa7164/saa7164-cmd.c | 37 +++++++++++++++++++ .../media/video/saa7164/saa7164-core.c | 2 +- trunk/drivers/media/video/saa7164/saa7164.h | 1 + 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index a448e48d6eba..d4d4bd62588e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 068ed40b8fc14cd3d16b5cf2db59ecd735a68ca8 +refs/heads/master: 39e469ab6dee0977a6fb632c711fba1ec5fca401 diff --git a/trunk/drivers/media/video/saa7164/saa7164-cmd.c b/trunk/drivers/media/video/saa7164/saa7164-cmd.c index cd3af4d4364f..e097f1a0969a 100644 --- a/trunk/drivers/media/video/saa7164/saa7164-cmd.c +++ b/trunk/drivers/media/video/saa7164/saa7164-cmd.c @@ -78,6 +78,43 @@ u32 saa7164_cmd_timeout_get(struct saa7164_dev *dev, u8 seqno) return ret; } +/* Commands to the f/w get marshelled to/from this code then onto the PCI + * -bus/c running buffer. */ +int saa7164_irq_dequeue(struct saa7164_dev *dev) +{ + int ret = SAA_OK; + u32 timeout; + wait_queue_head_t *q = 0; + dprintk(DBGLVL_CMD, "%s()\n", __func__); + + /* While any outstand message on the bus exists... */ + do { + + /* Peek the msg bus */ + tmComResInfo_t tRsp = { 0, 0, 0, 0, 0, 0 }; + ret = saa7164_bus_get(dev, &tRsp, NULL, 1); + if (ret != SAA_OK) + break; + + q = &dev->cmds[tRsp.seqno].wait; + timeout = saa7164_cmd_timeout_get(dev, tRsp.seqno); + dprintk(DBGLVL_CMD, "%s() timeout = %d\n", __func__, timeout); + if (!timeout) { + dprintk(DBGLVL_CMD, + "%s() signalled seqno(%d) (for dequeue)\n", + __func__, tRsp.seqno); + dev->cmds[tRsp.seqno].signalled = 1; + wake_up(q); + } else { + printk(KERN_ERR + "%s() found timed out command on the bus\n", + __func__); + } + } while (0); + + return ret; +} + /* Commands to the f/w get marshelled to/from this code then onto the PCI * -bus/c running buffer. */ int saa7164_cmd_dequeue(struct saa7164_dev *dev) diff --git a/trunk/drivers/media/video/saa7164/saa7164-core.c b/trunk/drivers/media/video/saa7164/saa7164-core.c index 3753b52e0294..e878fbcbb1eb 100644 --- a/trunk/drivers/media/video/saa7164/saa7164-core.c +++ b/trunk/drivers/media/video/saa7164/saa7164-core.c @@ -69,7 +69,7 @@ static void saa7164_work_cmdhandler(struct work_struct *w) struct saa7164_dev *dev = container_of(w, struct saa7164_dev, workcmd); /* Wake up any complete commands */ - saa7164_cmd_signal(dev, 0); + saa7164_irq_dequeue(dev); } static void saa7164_buffer_deliver(struct saa7164_buffer *buf) diff --git a/trunk/drivers/media/video/saa7164/saa7164.h b/trunk/drivers/media/video/saa7164/saa7164.h index 93a75e15d211..6753008a9c9b 100644 --- a/trunk/drivers/media/video/saa7164/saa7164.h +++ b/trunk/drivers/media/video/saa7164/saa7164.h @@ -328,6 +328,7 @@ int saa7164_cmd_send(struct saa7164_dev *dev, u8 id, tmComResCmd_t command, u16 controlselector, u16 size, void *buf); void saa7164_cmd_signal(struct saa7164_dev *dev, u8 seqno); +int saa7164_irq_dequeue(struct saa7164_dev *dev); /* ----------------------------------------------------------- */ /* saa7164-api.c */