These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / media / omap4iss / iss_video.c
index 85c54fe..2a0158b 100644 (file)
@@ -25,7 +25,6 @@
 #include "iss_video.h"
 #include "iss.h"
 
-
 /* -----------------------------------------------------------------------------
  * Helper functions
  */
@@ -191,7 +190,7 @@ iss_video_remote_subdev(struct iss_video *video, u32 *pad)
 
        remote = media_entity_remote_pad(&video->pad);
 
-       if (remote == NULL ||
+       if (!remote ||
            media_entity_type(remote->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
                return NULL;
 
@@ -241,7 +240,7 @@ __iss_video_get_format(struct iss_video *video,
        int ret;
 
        subdev = iss_video_remote_subdev(video, &pad);
-       if (subdev == NULL)
+       if (!subdev)
                return -EINVAL;
 
        memset(&fmt, 0, sizeof(fmt));
@@ -288,7 +287,7 @@ iss_video_check_format(struct iss_video *video, struct iss_video_fh *vfh)
  */
 
 static int iss_video_queue_setup(struct vb2_queue *vq,
-                                const struct v4l2_format *fmt,
+                                const void *parg,
                                 unsigned int *count, unsigned int *num_planes,
                                 unsigned int sizes[], void *alloc_ctxs[])
 {
@@ -311,7 +310,8 @@ static int iss_video_queue_setup(struct vb2_queue *vq,
 
 static void iss_video_buf_cleanup(struct vb2_buffer *vb)
 {
-       struct iss_buffer *buffer = container_of(vb, struct iss_buffer, vb);
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+       struct iss_buffer *buffer = container_of(vbuf, struct iss_buffer, vb);
 
        if (buffer->iss_addr)
                buffer->iss_addr = 0;
@@ -319,8 +319,9 @@ static void iss_video_buf_cleanup(struct vb2_buffer *vb)
 
 static int iss_video_buf_prepare(struct vb2_buffer *vb)
 {
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct iss_video_fh *vfh = vb2_get_drv_priv(vb->vb2_queue);
-       struct iss_buffer *buffer = container_of(vb, struct iss_buffer, vb);
+       struct iss_buffer *buffer = container_of(vbuf, struct iss_buffer, vb);
        struct iss_video *video = vfh->video;
        unsigned long size = vfh->format.fmt.pix.sizeimage;
        dma_addr_t addr;
@@ -342,9 +343,10 @@ static int iss_video_buf_prepare(struct vb2_buffer *vb)
 
 static void iss_video_buf_queue(struct vb2_buffer *vb)
 {
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct iss_video_fh *vfh = vb2_get_drv_priv(vb->vb2_queue);
        struct iss_video *video = vfh->video;
-       struct iss_buffer *buffer = container_of(vb, struct iss_buffer, vb);
+       struct iss_buffer *buffer = container_of(vbuf, struct iss_buffer, vb);
        struct iss_pipeline *pipe = to_iss_pipeline(&video->video.entity);
        unsigned long flags;
        bool empty;
@@ -420,7 +422,6 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
        enum iss_pipeline_state state;
        struct iss_buffer *buf;
        unsigned long flags;
-       struct timespec ts;
 
        spin_lock_irqsave(&video->qlock, flags);
        if (WARN_ON(list_empty(&video->dmaqueue))) {
@@ -433,9 +434,7 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
        list_del(&buf->list);
        spin_unlock_irqrestore(&video->qlock, flags);
 
-       ktime_get_ts(&ts);
-       buf->vb.v4l2_buf.timestamp.tv_sec = ts.tv_sec;
-       buf->vb.v4l2_buf.timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
+       v4l2_get_timestamp(&buf->vb.timestamp);
 
        /* Do frame number propagation only if this is the output video node.
         * Frame number either comes from the CSI receivers or it gets
@@ -444,12 +443,12 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
         * first, so the input number might lag behind by 1 in some cases.
         */
        if (video == pipe->output && !pipe->do_propagation)
-               buf->vb.v4l2_buf.sequence =
+               buf->vb.sequence =
                        atomic_inc_return(&pipe->frame_number);
        else
-               buf->vb.v4l2_buf.sequence = atomic_read(&pipe->frame_number);
+               buf->vb.sequence = atomic_read(&pipe->frame_number);
 
-       vb2_buffer_done(&buf->vb, pipe->error ?
+       vb2_buffer_done(&buf->vb.vb2_buf, pipe->error ?
                        VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
        pipe->error = false;
 
@@ -471,7 +470,7 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
                return NULL;
        }
 
-       if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && pipe->input != NULL) {
+       if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && pipe->input) {
                spin_lock(&pipe->lock);
                pipe->state &= ~ISS_PIPELINE_STREAM;
                spin_unlock(&pipe->lock);
@@ -480,7 +479,7 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
        buf = list_first_entry(&video->dmaqueue, struct iss_buffer,
                               list);
        spin_unlock_irqrestore(&video->qlock, flags);
-       buf->vb.state = VB2_BUF_STATE_ACTIVE;
+       buf->vb.vb2_buf.state = VB2_BUF_STATE_ACTIVE;
        return buf;
 }
 
@@ -503,7 +502,7 @@ void omap4iss_video_cancel_stream(struct iss_video *video)
                buf = list_first_entry(&video->dmaqueue, struct iss_buffer,
                                       list);
                list_del(&buf->list);
-               vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
+               vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
        }
 
        vb2_queue_error(video->queue);
@@ -624,7 +623,7 @@ iss_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
                return -EINVAL;
 
        subdev = iss_video_remote_subdev(video, &pad);
-       if (subdev == NULL)
+       if (!subdev)
                return -EINVAL;
 
        iss_video_pix_to_mbus(&format->fmt.pix, &fmt.format);
@@ -639,76 +638,6 @@ iss_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
        return 0;
 }
 
-static int
-iss_video_cropcap(struct file *file, void *fh, struct v4l2_cropcap *cropcap)
-{
-       struct iss_video *video = video_drvdata(file);
-       struct v4l2_subdev *subdev;
-       int ret;
-
-       subdev = iss_video_remote_subdev(video, NULL);
-       if (subdev == NULL)
-               return -EINVAL;
-
-       mutex_lock(&video->mutex);
-       ret = v4l2_subdev_call(subdev, video, cropcap, cropcap);
-       mutex_unlock(&video->mutex);
-
-       return ret == -ENOIOCTLCMD ? -ENOTTY : ret;
-}
-
-static int
-iss_video_get_crop(struct file *file, void *fh, struct v4l2_crop *crop)
-{
-       struct iss_video *video = video_drvdata(file);
-       struct v4l2_subdev_format format;
-       struct v4l2_subdev *subdev;
-       u32 pad;
-       int ret;
-
-       subdev = iss_video_remote_subdev(video, &pad);
-       if (subdev == NULL)
-               return -EINVAL;
-
-       /* Try the get crop operation first and fallback to get format if not
-        * implemented.
-        */
-       ret = v4l2_subdev_call(subdev, video, g_crop, crop);
-       if (ret != -ENOIOCTLCMD)
-               return ret;
-
-       format.pad = pad;
-       format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-       ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &format);
-       if (ret < 0)
-               return ret == -ENOIOCTLCMD ? -ENOTTY : ret;
-
-       crop->c.left = 0;
-       crop->c.top = 0;
-       crop->c.width = format.format.width;
-       crop->c.height = format.format.height;
-
-       return 0;
-}
-
-static int
-iss_video_set_crop(struct file *file, void *fh, const struct v4l2_crop *crop)
-{
-       struct iss_video *video = video_drvdata(file);
-       struct v4l2_subdev *subdev;
-       int ret;
-
-       subdev = iss_video_remote_subdev(video, NULL);
-       if (subdev == NULL)
-               return -EINVAL;
-
-       mutex_lock(&video->mutex);
-       ret = v4l2_subdev_call(subdev, video, s_crop, crop);
-       mutex_unlock(&video->mutex);
-
-       return ret == -ENOIOCTLCMD ? -ENOTTY : ret;
-}
-
 static int
 iss_video_get_param(struct file *file, void *fh, struct v4l2_streamparm *a)
 {
@@ -876,7 +805,7 @@ iss_video_streamon(struct file *file, void *fh, enum v4l2_buf_type type)
                pipe->input = far_end;
                pipe->output = video;
        } else {
-               if (far_end == NULL) {
+               if (!far_end) {
                        ret = -EPIPE;
                        goto err_iss_video_check_format;
                }
@@ -911,7 +840,7 @@ iss_video_streamon(struct file *file, void *fh, enum v4l2_buf_type type)
         * to the stream on command. In memory-to-memory mode, it will be
         * started when buffers are queued on both the input and output.
         */
-       if (pipe->input == NULL) {
+       if (!pipe->input) {
                unsigned long flags;
 
                ret = omap4iss_pipeline_set_stream(pipe,
@@ -1018,9 +947,6 @@ static const struct v4l2_ioctl_ops iss_video_ioctl_ops = {
        .vidioc_g_fmt_vid_out           = iss_video_get_format,
        .vidioc_s_fmt_vid_out           = iss_video_set_format,
        .vidioc_try_fmt_vid_out         = iss_video_try_format,
-       .vidioc_cropcap                 = iss_video_cropcap,
-       .vidioc_g_crop                  = iss_video_get_crop,
-       .vidioc_s_crop                  = iss_video_set_crop,
        .vidioc_g_parm                  = iss_video_get_param,
        .vidioc_s_parm                  = iss_video_set_param,
        .vidioc_reqbufs                 = iss_video_reqbufs,
@@ -1047,14 +973,14 @@ static int iss_video_open(struct file *file)
        int ret = 0;
 
        handle = kzalloc(sizeof(*handle), GFP_KERNEL);
-       if (handle == NULL)
+       if (!handle)
                return -ENOMEM;
 
        v4l2_fh_init(&handle->vfh, &video->video);
        v4l2_fh_add(&handle->vfh);
 
        /* If this is the first user, initialise the pipeline. */
-       if (omap4iss_get(video->iss) == NULL) {
+       if (!omap4iss_get(video->iss)) {
                ret = -EBUSY;
                goto done;
        }
@@ -1189,7 +1115,7 @@ int omap4iss_video_init(struct iss_video *video, const char *name)
        mutex_init(&video->stream_lock);
 
        /* Initialize the video device. */
-       if (video->ops == NULL)
+       if (!video->ops)
                video->ops = &iss_video_dummy_ops;
 
        video->video.fops = &iss_video_fops;