fse);
        }
 
-       case VIDIOC_SUBDEV_G_FRAME_INTERVAL:
+       case VIDIOC_SUBDEV_G_FRAME_INTERVAL: {
+               struct v4l2_subdev_frame_interval *fi = arg;
+
+               if (fi->pad >= sd->entity.num_pads)
+                       return -EINVAL;
+
                return v4l2_subdev_call(sd, video, g_frame_interval, arg);
+       }
+
+       case VIDIOC_SUBDEV_S_FRAME_INTERVAL: {
+               struct v4l2_subdev_frame_interval *fi = arg;
+
+               if (fi->pad >= sd->entity.num_pads)
+                       return -EINVAL;
 
-       case VIDIOC_SUBDEV_S_FRAME_INTERVAL:
                return v4l2_subdev_call(sd, video, s_frame_interval, arg);
+       }
 
        case VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL: {
                struct v4l2_subdev_frame_interval_enum *fie = arg;