提交 4a52be0f 编写于 作者: S Steven Toth 提交者: Mauro Carvalho Chehab

[media] saa7164: command dequeue fixup to clean the bus after error

Signed-off-by: NSteven Toth <stoth@kernellabs.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 91d80189
...@@ -82,9 +82,10 @@ u32 saa7164_cmd_timeout_get(struct saa7164_dev *dev, u8 seqno) ...@@ -82,9 +82,10 @@ u32 saa7164_cmd_timeout_get(struct saa7164_dev *dev, u8 seqno)
* -bus/c running buffer. */ * -bus/c running buffer. */
int saa7164_irq_dequeue(struct saa7164_dev *dev) int saa7164_irq_dequeue(struct saa7164_dev *dev)
{ {
int ret = SAA_OK; int ret = SAA_OK, i = 0;
u32 timeout; u32 timeout;
wait_queue_head_t *q = 0; wait_queue_head_t *q = 0;
u8 tmp[512];
dprintk(DBGLVL_CMD, "%s()\n", __func__); dprintk(DBGLVL_CMD, "%s()\n", __func__);
/* While any outstand message on the bus exists... */ /* While any outstand message on the bus exists... */
...@@ -109,8 +110,22 @@ int saa7164_irq_dequeue(struct saa7164_dev *dev) ...@@ -109,8 +110,22 @@ int saa7164_irq_dequeue(struct saa7164_dev *dev)
printk(KERN_ERR printk(KERN_ERR
"%s() found timed out command on the bus\n", "%s() found timed out command on the bus\n",
__func__); __func__);
/* Clean the bus */
ret = saa7164_bus_get(dev, &tRsp, &tmp, 0);
printk(KERN_ERR "%s() ret = %x\n", __func__, ret);
if (ret == SAA_ERR_EMPTY)
/* Someone else already fetched the response */
return SAA_OK;
if (ret != SAA_OK)
return ret;
} }
} while (0);
/* It's unlikely to have more than 4 or 5 pending messages, ensure we exit
* at some point regardles.
*/
} while (i++ < 32);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册