aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx23885/cx23885-video.c
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2011-10-10 10:09:56 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-10-14 16:22:55 -0400
commit19696f09daeff897a672144be89a16b8df18c004 (patch)
tree9f0ffdff875462b52a41e9db5c89f496b212162b /drivers/media/video/cx23885/cx23885-video.c
parentd44aa2d7fc9fba30cf81f25ba33f1caf73e8fbb8 (diff)
[media] cx23885: Avoid incorrect error handling and reporting
Previous driver over-reported errors and stopped the video fifo (causing video to stop) if 1) A risc error occured 2) The risc processor detected that it has missing lines in the video frame 3) The risc fifo is about to overflow. The previous driver reported all three of these cases as risc errors when this is technically not correct. So, the function was cleaned up. 1. Ensure that risc opcode related errors are correctly shown as such, and not overly reported for non-risc-opcode cases. 2. Ensure that line sync and overflow errors are not reported as opcode errors. 3. Ensure that only the risc-op-code case can stop the fifo and dump channel / risc processor information. The net result is that if video becomes unstable, cable disconnect, this will not trigger a stop of the video firmware (due to missing lines errors). Signed-off-by: Steven Toth <stoth@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx23885/cx23885-video.c')
-rw-r--r--drivers/media/video/cx23885/cx23885-video.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c
index 19900c66b799..c91be47c91ae 100644
--- a/drivers/media/video/cx23885/cx23885-video.c
+++ b/drivers/media/video/cx23885/cx23885-video.c
@@ -1536,29 +1536,29 @@ int cx23885_video_irq(struct cx23885_dev *dev, u32 status)
1536 1536
1537 cx_write(VID_A_INT_STAT, status); 1537 cx_write(VID_A_INT_STAT, status);
1538 1538
1539 /* risc op code error */ 1539 /* risc op code error, fifo overflow or line sync detection error */
1540 if ((status & VID_BC_MSK_OPC_ERR) || 1540 if ((status & VID_BC_MSK_OPC_ERR) ||
1541 (status & VID_BC_MSK_SYNC) || 1541 (status & VID_BC_MSK_SYNC) ||
1542 (status & VID_BC_MSK_OF)) { 1542 (status & VID_BC_MSK_OF)) {
1543 1543
1544 if (status & VID_BC_MSK_OPC_ERR) 1544 if (status & VID_BC_MSK_OPC_ERR) {
1545 dprintk(7, " (VID_BC_MSK_OPC_ERR 0x%08x)\n", 1545 dprintk(7, " (VID_BC_MSK_OPC_ERR 0x%08x)\n",
1546 VID_BC_MSK_OPC_ERR); 1546 VID_BC_MSK_OPC_ERR);
1547 printk(KERN_WARNING "%s: video risc op code error\n",
1548 dev->name);
1549 cx23885_sram_channel_dump(dev,
1550 &dev->sram_channels[SRAM_CH01]);
1551 }
1547 1552
1548 if (status & VID_BC_MSK_SYNC) 1553 if (status & VID_BC_MSK_SYNC)
1549 dprintk(7, " (VID_BC_MSK_SYNC 0x%08x)\n", 1554 dprintk(7, " (VID_BC_MSK_SYNC 0x%08x) "
1555 "video lines miss-match\n",
1550 VID_BC_MSK_SYNC); 1556 VID_BC_MSK_SYNC);
1551 1557
1552 if (status & VID_BC_MSK_OF) 1558 if (status & VID_BC_MSK_OF)
1553 dprintk(7, " (VID_BC_MSK_OF 0x%08x)\n", 1559 dprintk(7, " (VID_BC_MSK_OF 0x%08x) fifo overflow\n",
1554 VID_BC_MSK_OF); 1560 VID_BC_MSK_OF);
1555 1561
1556 printk(KERN_WARNING "%s: video risc op code error\n",
1557 dev->name);
1558
1559 cx_clear(VID_A_DMA_CTL, 0x11);
1560 cx23885_sram_channel_dump(dev, &dev->sram_channels[SRAM_CH01]);
1561
1562 } 1562 }
1563 1563
1564 /* Video */ 1564 /* Video */