continue;
                while (offset && offset >= sg_dma_len(sg)) {
                        offset -= sg_dma_len(sg);
-                       sg++;
+                       sg = sg_next(sg);
                }
                if (bpl <= sg_dma_len(sg)-offset) {
                        /* fits into current chunk */
                        *(rp++)=cpu_to_le32(sg_dma_address(sg)+offset);
                        todo -= (sg_dma_len(sg)-offset);
                        offset = 0;
-                       sg++;
+                       sg = sg_next(sg);
                        while (todo > sg_dma_len(sg)) {
                                *(rp++)=cpu_to_le32(BT848_RISC_WRITE|
                                                    sg_dma_len(sg));
                                *(rp++)=cpu_to_le32(sg_dma_address(sg));
                                todo -= sg_dma_len(sg);
-                               sg++;
+                               sg = sg_next(sg);
                        }
                        *(rp++)=cpu_to_le32(BT848_RISC_WRITE|BT848_RISC_EOL|
                                            todo);
                        /* go to next sg entry if needed */
                        while (yoffset && yoffset >= sg_dma_len(ysg)) {
                                yoffset -= sg_dma_len(ysg);
-                               ysg++;
+                               ysg = sg_next(ysg);
                        }
                        while (uoffset && uoffset >= sg_dma_len(usg)) {
                                uoffset -= sg_dma_len(usg);
-                               usg++;
+                               usg = sg_next(usg);
                        }
                        while (voffset && voffset >= sg_dma_len(vsg)) {
                                voffset -= sg_dma_len(vsg);
-                               vsg++;
+                               vsg = sg_next(vsg);
                        }
 
                        /* calculate max number of bytes we can write */
 
        for (line = 0; line < lines; line++) {
                while (offset && offset >= sg_dma_len(sg)) {
                        offset -= sg_dma_len(sg);
-                       sg++;
+                       sg = sg_next(sg);
                }
                if (bpl <= sg_dma_len(sg) - offset) {
                        /* fits into current chunk */
                        *(rp++) = cpu_to_le32(0);       /* bits 63-32 */
                        todo -= (sg_dma_len(sg) - offset);
                        offset = 0;
-                       sg++;
+                       sg = sg_next(sg);
                        while (todo > sg_dma_len(sg)) {
                                *(rp++) = cpu_to_le32(RISC_WRITE |
                                                sg_dma_len(sg));
                                *(rp++) = cpu_to_le32(sg_dma_address(sg));
                                *(rp++) = cpu_to_le32(0);       /* bits 63-32 */
                                todo -= sg_dma_len(sg);
-                               sg++;
+                               sg = sg_next(sg);
                        }
                        *(rp++) = cpu_to_le32(RISC_WRITE | RISC_EOL | todo);
                        *(rp++) = cpu_to_le32(sg_dma_address(sg));
        for (line = 0; line < lines; line++) {
                while (offset && offset >= sg_dma_len(sg)) {
                        offset -= sg_dma_len(sg);
-                       sg++;
+                       sg = sg_next(sg);
                }
 
                if (lpi && line > 0 && !(line % lpi))
                        *(rp++) = cpu_to_le32(0);       /* bits 63-32 */
                        todo -= (sg_dma_len(sg) - offset);
                        offset = 0;
-                       sg++;
+                       sg = sg_next(sg);
                        while (todo > sg_dma_len(sg)) {
                                *(rp++) = cpu_to_le32(RISC_WRITE |
                                                sg_dma_len(sg));
                                *(rp++) = cpu_to_le32(sg_dma_address(sg));
                                *(rp++) = cpu_to_le32(0);       /* bits 63-32 */
                                todo -= sg_dma_len(sg);
-                               sg++;
+                               sg = sg_next(sg);
                        }
                        *(rp++) = cpu_to_le32(RISC_WRITE | RISC_EOL | todo);
                        *(rp++) = cpu_to_le32(sg_dma_address(sg));
 
        for (line = 0; line < lines; line++) {
                while (offset && offset >= sg_dma_len(sg)) {
                        offset -= sg_dma_len(sg);
-                       sg++;
+                       sg = sg_next(sg);
                }
                if (lpi && line>0 && !(line % lpi))
                        sol = RISC_SOL | RISC_IRQ1 | RISC_CNT_INC;
                        *(rp++)=cpu_to_le32(sg_dma_address(sg)+offset);
                        todo -= (sg_dma_len(sg)-offset);
                        offset = 0;
-                       sg++;
+                       sg = sg_next(sg);
                        while (todo > sg_dma_len(sg)) {
                                *(rp++)=cpu_to_le32(RISC_WRITE|
                                                    sg_dma_len(sg));
                                *(rp++)=cpu_to_le32(sg_dma_address(sg));
                                todo -= sg_dma_len(sg);
-                               sg++;
+                               sg = sg_next(sg);
                        }
                        *(rp++)=cpu_to_le32(RISC_WRITE|RISC_EOL|todo);
                        *(rp++)=cpu_to_le32(sg_dma_address(sg));
 
        int i;
        struct scatterlist *sg;
 
-       for (i = 0, sg = dma->SGlist; i < dma->SG_length; i++, sg++) {
+       for (i = 0, sg = dma->SGlist; i < dma->SG_length; i++, sg = sg_next(sg)) {
                dma->SGarray[i].size = cpu_to_le32(sg_dma_len(sg));
                dma->SGarray[i].src = cpu_to_le32(sg_dma_address(sg));
                dma->SGarray[i].dst = cpu_to_le32(buffer_offset);