return container_of(sd, struct gs, sd);
 }
 
-static int gs_s_dv_timings(struct v4l2_subdev *sd,
-                   struct v4l2_dv_timings *timings)
+static int gs_s_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
+                          struct v4l2_dv_timings *timings)
 {
        struct gs *gs = to_gs(sd);
        int reg_value;
 
+       if (pad != 0)
+               return -EINVAL;
+
        reg_value = get_register_timings(timings);
        if (reg_value == 0x0)
                return -EINVAL;
        return 0;
 }
 
-static int gs_g_dv_timings(struct v4l2_subdev *sd,
-                   struct v4l2_dv_timings *timings)
+static int gs_g_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
+                          struct v4l2_dv_timings *timings)
 {
        struct gs *gs = to_gs(sd);
 
+       if (pad != 0)
+               return -EINVAL;
+
        *timings = gs->current_timings;
        return 0;
 }
 
-static int gs_query_dv_timings(struct v4l2_subdev *sd,
-                       struct v4l2_dv_timings *timings)
+static int gs_query_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
+                              struct v4l2_dv_timings *timings)
 {
        struct gs *gs = to_gs(sd);
        struct v4l2_dv_timings fmt;
        u16 reg_value, i;
        int ret;
 
+       if (pad != 0)
+               return -EINVAL;
+
        if (gs->enabled)
                return -EBUSY;
 
 };
 
 static const struct v4l2_subdev_video_ops gs_video_ops = {
-       .s_dv_timings = gs_s_dv_timings,
-       .g_dv_timings = gs_g_dv_timings,
        .s_stream = gs_s_stream,
        .g_input_status = gs_g_input_status,
-       .query_dv_timings = gs_query_dv_timings,
 };
 
 static const struct v4l2_subdev_pad_ops gs_pad_ops = {
+       .s_dv_timings = gs_s_dv_timings,
+       .g_dv_timings = gs_g_dv_timings,
+       .query_dv_timings = gs_query_dv_timings,
        .enum_dv_timings = gs_enum_dv_timings,
        .dv_timings_cap = gs_dv_timings_cap,
 };