ev->type = VIDEO_EVENT_DECODER_STOPPED;
                        else if (test_and_clear_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags)) {
                                ev->type = VIDEO_EVENT_VSYNC;
-                               ev->timestamp = test_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags) ?
-                                       1 : 0;
-                               clear_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags);
+                               ev->u.vsync_field = test_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags) ?
+                                       VIDEO_VSYNC_FIELD_ODD : VIDEO_VSYNC_FIELD_EVEN;
+                               if (itv->output_mode == OUT_UDMA_YUV &&
+                                       (itv->yuv_info.lace_mode & IVTV_YUV_MODE_MASK) ==
+                                                               IVTV_YUV_MODE_PROGRESSIVE) {
+                                       ev->u.vsync_field = VIDEO_VSYNC_FIELD_PROGRESSIVE;
+                               }
                        }
                        if (ev->type)
                                return 0;