These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / i2c / sr030pc30.c
index 10c735c..b04c09d 100644 (file)
@@ -471,30 +471,32 @@ static int sr030pc30_s_ctrl(struct v4l2_ctrl *ctrl)
        return 0;
 }
 
-static int sr030pc30_enum_fmt(struct v4l2_subdev *sd, unsigned int index,
-                             u32 *code)
+static int sr030pc30_enum_mbus_code(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_mbus_code_enum *code)
 {
-       if (!code || index >= ARRAY_SIZE(sr030pc30_formats))
+       if (!code || code->pad ||
+           code->index >= ARRAY_SIZE(sr030pc30_formats))
                return -EINVAL;
 
-       *code = sr030pc30_formats[index].code;
+       code->code = sr030pc30_formats[code->index].code;
        return 0;
 }
 
-static int sr030pc30_g_fmt(struct v4l2_subdev *sd,
-                          struct v4l2_mbus_framefmt *mf)
+static int sr030pc30_get_fmt(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_format *format)
 {
+       struct v4l2_mbus_framefmt *mf;
        struct sr030pc30_info *info = to_sr030pc30(sd);
-       int ret;
 
-       if (!mf)
+       if (!format || format->pad)
                return -EINVAL;
 
-       if (!info->curr_win || !info->curr_fmt) {
-               ret = sr030pc30_set_params(sd);
-               if (ret)
-                       return ret;
-       }
+       mf = &format->format;
+
+       if (!info->curr_win || !info->curr_fmt)
+               return -EINVAL;
 
        mf->width       = info->curr_win->width;
        mf->height      = info->curr_win->height;
@@ -523,25 +525,28 @@ static const struct sr030pc30_format *try_fmt(struct v4l2_subdev *sd,
 }
 
 /* Return nearest media bus frame format. */
-static int sr030pc30_try_fmt(struct v4l2_subdev *sd,
-                            struct v4l2_mbus_framefmt *mf)
+static int sr030pc30_set_fmt(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_format *format)
 {
-       if (!sd || !mf)
-               return -EINVAL;
+       struct sr030pc30_info *info = sd ? to_sr030pc30(sd) : NULL;
+       const struct sr030pc30_format *fmt;
+       struct v4l2_mbus_framefmt *mf;
 
-       try_fmt(sd, mf);
-       return 0;
-}
-
-static int sr030pc30_s_fmt(struct v4l2_subdev *sd,
-                          struct v4l2_mbus_framefmt *mf)
-{
-       struct sr030pc30_info *info = to_sr030pc30(sd);
+       if (!sd || !format)
+               return -EINVAL;
 
-       if (!sd || !mf)
+       mf = &format->format;
+       if (format->pad)
                return -EINVAL;
 
-       info->curr_fmt = try_fmt(sd, mf);
+       fmt = try_fmt(sd, mf);
+       if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
+               cfg->try_fmt = *mf;
+               return 0;
+       }
+
+       info->curr_fmt = fmt;
 
        return sr030pc30_set_params(sd);
 }
@@ -627,25 +632,17 @@ static const struct v4l2_ctrl_ops sr030pc30_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops sr030pc30_core_ops = {
        .s_power        = sr030pc30_s_power,
-       .g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-       .try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-       .s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-       .g_ctrl = v4l2_subdev_g_ctrl,
-       .s_ctrl = v4l2_subdev_s_ctrl,
-       .queryctrl = v4l2_subdev_queryctrl,
-       .querymenu = v4l2_subdev_querymenu,
 };
 
-static const struct v4l2_subdev_video_ops sr030pc30_video_ops = {
-       .g_mbus_fmt     = sr030pc30_g_fmt,
-       .s_mbus_fmt     = sr030pc30_s_fmt,
-       .try_mbus_fmt   = sr030pc30_try_fmt,
-       .enum_mbus_fmt  = sr030pc30_enum_fmt,
+static const struct v4l2_subdev_pad_ops sr030pc30_pad_ops = {
+       .enum_mbus_code = sr030pc30_enum_mbus_code,
+       .get_fmt        = sr030pc30_get_fmt,
+       .set_fmt        = sr030pc30_set_fmt,
 };
 
 static const struct v4l2_subdev_ops sr030pc30_ops = {
        .core   = &sr030pc30_core_ops,
-       .video  = &sr030pc30_video_ops,
+       .pad    = &sr030pc30_pad_ops,
 };
 
 /*