When capturing at yuv410p, sg_next was called too many times when chroma is
false, eventually returning NULL. This patch does fix this for my hardware.

Signed-off-by: Samuel Williams <sam8...@gmail.com>
---
 drivers/media/pci/bt8xx/bttv-risc.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/media/pci/bt8xx/bttv-risc.c 
b/drivers/media/pci/bt8xx/bttv-risc.c
index 3859dde98be2..f87ac667f5fc 100644
--- a/drivers/media/pci/bt8xx/bttv-risc.c
+++ b/drivers/media/pci/bt8xx/bttv-risc.c
@@ -189,20 +189,20 @@ bttv_risc_planar(struct bttv *btv, struct btcx_riscmem 
*risc,
                                yoffset -= sg_dma_len(ysg);
                                ysg = sg_next(ysg);
                        }
-                       while (uoffset && uoffset >= sg_dma_len(usg)) {
-                               uoffset -= sg_dma_len(usg);
-                               usg = sg_next(usg);
-                       }
-                       while (voffset && voffset >= sg_dma_len(vsg)) {
-                               voffset -= sg_dma_len(vsg);
-                               vsg = sg_next(vsg);
-                       }
/* calculate max number of bytes we can write */
                        ylen = todo;
                        if (yoffset + ylen > sg_dma_len(ysg))
                                ylen = sg_dma_len(ysg) - yoffset;
                        if (chroma) {
+                               while (uoffset && uoffset >= sg_dma_len(usg)) {
+                                       uoffset -= sg_dma_len(usg);
+                                       usg = sg_next(usg);
+                               }
+                               while (voffset && voffset >= sg_dma_len(vsg)) {
+                                       voffset -= sg_dma_len(vsg);
+                                       vsg = sg_next(vsg);
+                               }
                                if (uoffset + (ylen>>hshift) > sg_dma_len(usg))
                                        ylen = (sg_dma_len(usg) - uoffset) << 
hshift;
                                if (voffset + (ylen>>hshift) > sg_dma_len(vsg))
--
2.16.3

Reply via email to