These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / i2c / adv7183.c
index 28940cc..e2dd161 100644 (file)
@@ -420,20 +420,26 @@ static int adv7183_g_input_status(struct v4l2_subdev *sd, u32 *status)
        return 0;
 }
 
-static int adv7183_enum_mbus_fmt(struct v4l2_subdev *sd, unsigned index,
-                               u32 *code)
+static int adv7183_enum_mbus_code(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_mbus_code_enum *code)
 {
-       if (index > 0)
+       if (code->pad || code->index > 0)
                return -EINVAL;
 
-       *code = MEDIA_BUS_FMT_UYVY8_2X8;
+       code->code = MEDIA_BUS_FMT_UYVY8_2X8;
        return 0;
 }
 
-static int adv7183_try_mbus_fmt(struct v4l2_subdev *sd,
-                               struct v4l2_mbus_framefmt *fmt)
+static int adv7183_set_fmt(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_format *format)
 {
        struct adv7183 *decoder = to_adv7183(sd);
+       struct v4l2_mbus_framefmt *fmt = &format->format;
+
+       if (format->pad)
+               return -EINVAL;
 
        fmt->code = MEDIA_BUS_FMT_UYVY8_2X8;
        fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
@@ -446,25 +452,23 @@ static int adv7183_try_mbus_fmt(struct v4l2_subdev *sd,
                fmt->width = 720;
                fmt->height = 576;
        }
+       if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
+               decoder->fmt = *fmt;
+       else
+               cfg->try_fmt = *fmt;
        return 0;
 }
 
-static int adv7183_s_mbus_fmt(struct v4l2_subdev *sd,
-                               struct v4l2_mbus_framefmt *fmt)
+static int adv7183_get_fmt(struct v4l2_subdev *sd,
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_format *format)
 {
        struct adv7183 *decoder = to_adv7183(sd);
 
-       adv7183_try_mbus_fmt(sd, fmt);
-       decoder->fmt = *fmt;
-       return 0;
-}
-
-static int adv7183_g_mbus_fmt(struct v4l2_subdev *sd,
-                               struct v4l2_mbus_framefmt *fmt)
-{
-       struct adv7183 *decoder = to_adv7183(sd);
+       if (format->pad)
+               return -EINVAL;
 
-       *fmt = decoder->fmt;
+       format->format = decoder->fmt;
        return 0;
 }
 
@@ -514,16 +518,19 @@ static const struct v4l2_subdev_video_ops adv7183_video_ops = {
        .s_routing = adv7183_s_routing,
        .querystd = adv7183_querystd,
        .g_input_status = adv7183_g_input_status,
-       .enum_mbus_fmt = adv7183_enum_mbus_fmt,
-       .try_mbus_fmt = adv7183_try_mbus_fmt,
-       .s_mbus_fmt = adv7183_s_mbus_fmt,
-       .g_mbus_fmt = adv7183_g_mbus_fmt,
        .s_stream = adv7183_s_stream,
 };
 
+static const struct v4l2_subdev_pad_ops adv7183_pad_ops = {
+       .enum_mbus_code = adv7183_enum_mbus_code,
+       .get_fmt = adv7183_get_fmt,
+       .set_fmt = adv7183_set_fmt,
+};
+
 static const struct v4l2_subdev_ops adv7183_ops = {
        .core = &adv7183_core_ops,
        .video = &adv7183_video_ops,
+       .pad = &adv7183_pad_ops,
 };
 
 static int adv7183_probe(struct i2c_client *client,
@@ -533,7 +540,9 @@ static int adv7183_probe(struct i2c_client *client,
        struct v4l2_subdev *sd;
        struct v4l2_ctrl_handler *hdl;
        int ret;
-       struct v4l2_mbus_framefmt fmt;
+       struct v4l2_subdev_format fmt = {
+               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
+       };
        const unsigned *pin_array;
 
        /* Check if the adapter supports the needed features */
@@ -603,9 +612,9 @@ static int adv7183_probe(struct i2c_client *client,
 
        adv7183_writeregs(sd, adv7183_init_regs, ARRAY_SIZE(adv7183_init_regs));
        adv7183_s_std(sd, decoder->std);
-       fmt.width = 720;
-       fmt.height = 576;
-       adv7183_s_mbus_fmt(sd, &fmt);
+       fmt.format.width = 720;
+       fmt.format.height = 576;
+       adv7183_set_fmt(sd, NULL, &fmt);
 
        /* initialize the hardware to the default control values */
        ret = v4l2_ctrl_handler_setup(hdl);