return 0;
 }
 
+static int sur40_vidioc_enum_framesizes(struct file *file, void *priv,
+                                       struct v4l2_frmsizeenum *f)
+{
+       if ((f->index != 0) || (f->pixel_format != V4L2_PIX_FMT_GREY))
+               return -EINVAL;
+
+       f->type = V4L2_FRMSIZE_TYPE_DISCRETE;
+       f->discrete.width  = sur40_video_format.width;
+       f->discrete.height = sur40_video_format.height;
+       return 0;
+}
+
+static int sur40_vidioc_enum_frameintervals(struct file *file, void *priv,
+                                           struct v4l2_frmivalenum *f)
+{
+       if ((f->index > 1) || (f->pixel_format != V4L2_PIX_FMT_GREY)
+               || (f->width  != sur40_video_format.width)
+               || (f->height != sur40_video_format.height))
+                       return -EINVAL;
+
+       f->type = V4L2_FRMIVAL_TYPE_DISCRETE;
+       f->discrete.denominator  = 60/(f->index+1);
+       f->discrete.numerator = 1;
+       return 0;
+}
+
+
 static const struct usb_device_id sur40_table[] = {
        { USB_DEVICE(ID_MICROSOFT, ID_SUR40) },  /* Samsung SUR40 */
        { }                                      /* terminating null entry */
        .vidioc_s_fmt_vid_cap   = sur40_vidioc_fmt,
        .vidioc_g_fmt_vid_cap   = sur40_vidioc_fmt,
 
+       .vidioc_enum_framesizes = sur40_vidioc_enum_framesizes,
+       .vidioc_enum_frameintervals = sur40_vidioc_enum_frameintervals,
+
        .vidioc_enum_input      = sur40_vidioc_enum_input,
        .vidioc_g_input         = sur40_vidioc_g_input,
        .vidioc_s_input         = sur40_vidioc_s_input,