/* Mark last buffer size for Interrupt flag */
        s->SGarray[s->SG_length - 1].size |= cpu_to_le32(0x80000000);
 
+       if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
+               set_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
+       else
+               clear_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
+
        if (ivtv_use_pio(s)) {
                for (i = 0; i < s->SG_length; i++) {
                        s->PIOarray[i].src = le32_to_cpu(s->SGarray[i].src);
                                data[0], data[1], data[2]);
                return;
        }
-       clear_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
        s = &itv->streams[ivtv_stream_map[data[0]]];
        if (!stream_enc_dma_append(s, data)) {
                set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
           then start a DMA request for just the VBI data. */
        if (!stream_enc_dma_append(s, data) &&
                        !test_bit(IVTV_F_S_STREAMING, &s_mpg->s_flags)) {
-               set_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
                set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
        }
 }