[media] media: videobuf2: Move timestamp to vb2_buffer
authorJunghak Sung <jh1009.sung@samsung.com>
Tue, 3 Nov 2015 10:16:37 +0000 (08:16 -0200)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 18 Dec 2015 15:53:31 +0000 (13:53 -0200)
Move timestamp from struct vb2_v4l2_buffer to struct vb2_buffer
for common use, and change its type to u64 in order to handling
y2038 problem. This patch also includes all device drivers' changes related to
this restructuring.

Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
71 files changed:
drivers/input/touchscreen/sur40.c
drivers/media/dvb-frontends/rtl2832_sdr.c
drivers/media/pci/cobalt/cobalt-irq.c
drivers/media/pci/cx23885/cx23885-core.c
drivers/media/pci/cx23885/cx23885-video.c
drivers/media/pci/cx25821/cx25821-video.c
drivers/media/pci/cx88/cx88-core.c
drivers/media/pci/dt3155/dt3155.c
drivers/media/pci/netup_unidvb/netup_unidvb_core.c
drivers/media/pci/saa7134/saa7134-core.c
drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c
drivers/media/pci/solo6x10/solo6x10-v4l2.c
drivers/media/pci/sta2x11/sta2x11_vip.c
drivers/media/pci/tw68/tw68-video.c
drivers/media/platform/am437x/am437x-vpfe.c
drivers/media/platform/blackfin/bfin_capture.c
drivers/media/platform/coda/coda-bit.c
drivers/media/platform/coda/coda.h
drivers/media/platform/davinci/vpbe_display.c
drivers/media/platform/davinci/vpif_capture.c
drivers/media/platform/davinci/vpif_display.c
drivers/media/platform/exynos-gsc/gsc-m2m.c
drivers/media/platform/exynos4-is/fimc-capture.c
drivers/media/platform/exynos4-is/fimc-isp-video.c
drivers/media/platform/exynos4-is/fimc-lite.c
drivers/media/platform/exynos4-is/fimc-m2m.c
drivers/media/platform/m2m-deinterlace.c
drivers/media/platform/marvell-ccic/mcam-core.c
drivers/media/platform/mx2_emmaprp.c
drivers/media/platform/omap3isp/ispvideo.c
drivers/media/platform/rcar_jpu.c
drivers/media/platform/s3c-camif/camif-capture.c
drivers/media/platform/s5p-g2d/g2d.c
drivers/media/platform/s5p-jpeg/jpeg-core.c
drivers/media/platform/s5p-mfc/s5p_mfc.c
drivers/media/platform/sh_veu.c
drivers/media/platform/sh_vou.c
drivers/media/platform/soc_camera/atmel-isi.c
drivers/media/platform/soc_camera/mx2_camera.c
drivers/media/platform/soc_camera/mx3_camera.c
drivers/media/platform/soc_camera/rcar_vin.c
drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c
drivers/media/platform/sti/bdisp/bdisp-v4l2.c
drivers/media/platform/ti-vpe/vpe.c
drivers/media/platform/vim2m.c
drivers/media/platform/vivid/vivid-core.h
drivers/media/platform/vivid/vivid-ctrls.c
drivers/media/platform/vivid/vivid-kthread-cap.c
drivers/media/platform/vivid/vivid-kthread-out.c
drivers/media/platform/vivid/vivid-sdr-cap.c
drivers/media/platform/vivid/vivid-vbi-cap.c
drivers/media/platform/vsp1/vsp1_video.c
drivers/media/platform/xilinx/xilinx-dma.c
drivers/media/usb/airspy/airspy.c
drivers/media/usb/au0828/au0828-video.c
drivers/media/usb/em28xx/em28xx-video.c
drivers/media/usb/go7007/go7007-driver.c
drivers/media/usb/hackrf/hackrf.c
drivers/media/usb/pwc/pwc-if.c
drivers/media/usb/s2255/s2255drv.c
drivers/media/usb/stk1160/stk1160-video.c
drivers/media/usb/usbtv/usbtv-video.c
drivers/media/usb/uvc/uvc_video.c
drivers/media/v4l2-core/videobuf2-v4l2.c
drivers/staging/media/davinci_vpfe/vpfe_video.c
drivers/staging/media/omap4iss/iss_video.c
drivers/usb/gadget/function/uvc_queue.c
include/media/videobuf2-core.h
include/media/videobuf2-v4l2.h
include/trace/events/v4l2.h
include/trace/events/vb2.h

index 3f3e2b12e5e7f7d42849d65e75aba1a2be18b5c8..b6c4d03de3408cc951d6c6ed03cd775f14f3f198 100644 (file)
@@ -444,7 +444,7 @@ static void sur40_process_video(struct sur40_state *sur40)
                goto err_poll;
 
        /* mark as finished */
-       v4l2_get_timestamp(&new_buf->vb.timestamp);
+       new_buf->vb.vb2_buf.timestamp = ktime_get_ns();
        new_buf->vb.sequence = sur40->sequence++;
        new_buf->vb.field = V4L2_FIELD_NONE;
        vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 238191ddcf351484aab0326e2da4b4d02a35c12b..b860f02a4e55b4eff83e03a149f4eac2003b53e6 100644 (file)
@@ -310,7 +310,7 @@ static void rtl2832_sdr_urb_complete(struct urb *urb)
                len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer,
                                urb->actual_length);
                vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
-               v4l2_get_timestamp(&fbuf->vb.timestamp);
+               fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
                fbuf->vb.sequence = dev->sequence++;
                vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
        }
index c30748e76164a878371ed3e117a3a7b0c59b01c9..b190d4f81c6ea36c5f64014a05afeb42e173675a 100644 (file)
@@ -134,7 +134,7 @@ done:
                skip = true;
                s->skip_first_frames--;
        }
-       v4l2_get_timestamp(&cb->vb.timestamp);
+       cb->vb.vb2_buf.timestamp = ktime_get_ns();
        /* TODO: the sequence number should be read from the FPGA so we
           also know about dropped frames. */
        cb->vb.sequence = s->sequence++;
index 722781babccdc9782e0dbd7310ebc21c8d335ffe..813c217b5e1a5803d42c64c18dd5245746531fe1 100644 (file)
@@ -427,7 +427,7 @@ static void cx23885_wakeup(struct cx23885_tsport *port,
        buf = list_entry(q->active.next,
                         struct cx23885_buffer, queue);
 
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
        buf->vb.sequence = q->count++;
        dprintk(1, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
                buf->vb.vb2_buf.index,
index 93a3720d9116047ab37a7ad813b25a2920d61b26..e1d7d08471672d6376e759ee7be11e7eb961e00e 100644 (file)
@@ -105,7 +105,7 @@ void cx23885_video_wakeup(struct cx23885_dev *dev,
                        struct cx23885_buffer, queue);
 
        buf->vb.sequence = q->count++;
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
        dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
                        buf->vb.vb2_buf.index, count, q->count);
        list_del(&buf->queue);
index 644373dd252589a8e81afa133e6d6ef084a2eddd..c48bba9daf1f8e55b36709aa973dffc19477011c 100644 (file)
@@ -130,7 +130,7 @@ int cx25821_video_irq(struct cx25821_dev *dev, int chan_num, u32 status)
                        buf = list_entry(dmaq->active.next,
                                         struct cx25821_buffer, queue);
 
-                       v4l2_get_timestamp(&buf->vb.timestamp);
+                       buf->vb.vb2_buf.timestamp = ktime_get_ns();
                        buf->vb.sequence = dmaq->count++;
                        list_del(&buf->queue);
                        vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 9a43c7826b603e2c535b952addaad0a6e4c2636d..46fe8c1eb9d4323dc66c2177f1167c35914bceae 100644 (file)
@@ -518,7 +518,7 @@ void cx88_wakeup(struct cx88_core *core,
 
        buf = list_entry(q->active.next,
                         struct cx88_buffer, list);
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
        buf->vb.field = core->field;
        buf->vb.sequence = q->count++;
        list_del(&buf->list);
index f09bd73bd16f9713162a132735305e276e2e3521..568c0c8fb2dc83dea3d9628f511c661db4ca89e4 100644 (file)
@@ -270,7 +270,7 @@ static irqreturn_t dt3155_irq_handler_even(int irq, void *dev_id)
 
        spin_lock(&ipd->lock);
        if (ipd->curr_buf && !list_empty(&ipd->dmaq)) {
-               v4l2_get_timestamp(&ipd->curr_buf->timestamp);
+               ipd->curr_buf->vb2_buf.timestamp = ktime_get_ns();
                ipd->curr_buf->sequence = ipd->sequence++;
                ipd->curr_buf->field = V4L2_FIELD_NONE;
                vb2_buffer_done(&ipd->curr_buf->vb2_buf, VB2_BUF_STATE_DONE);
index 58a8e9db57489fea49137e7ff2715a155d06aadb..81e1a5e26efb62b50cf1c6e77d20ec653d36729f 100644 (file)
@@ -579,7 +579,7 @@ static void netup_unidvb_dma_worker(struct work_struct *work)
                        dev_dbg(&ndev->pci_dev->dev,
                                "%s(): buffer %p done, size %d\n",
                                __func__, buf, buf->size);
-                       v4l2_get_timestamp(&buf->vb.timestamp);
+                       buf->vb.vb2_buf.timestamp = ktime_get_ns();
                        vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->size);
                        vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
                }
index f720cea80e28ae553183c16a56d2620dd70ab303..e227b02cc1225dedca42ea3effaa356f44e55275 100644 (file)
@@ -309,7 +309,7 @@ void saa7134_buffer_finish(struct saa7134_dev *dev,
        core_dbg("buffer_finish %p\n", q->curr);
 
        /* finish current buffer */
-       v4l2_get_timestamp(&q->curr->vb2.timestamp);
+       q->curr->vb2.vb2_buf.timestamp = ktime_get_ns();
        q->curr->vb2.sequence = q->seq_nr++;
        vb2_buffer_done(&q->curr->vb2.vb2_buf, state);
        q->curr = NULL;
index 5b7853b75d2a4a55fc005a8d43c977534893b993..67a14c41c227ac3e44643202982eb1c6bf543ef3 100644 (file)
@@ -531,7 +531,7 @@ static int solo_enc_fillbuf(struct solo_enc_dev *solo_enc,
 
        if (!ret) {
                vbuf->sequence = solo_enc->sequence++;
-               v4l2_get_timestamp(&vbuf->timestamp);
+               vb->timestamp = ktime_get_ns();
 
                /* Check for motion flags */
                if (solo_is_motion_on(solo_enc) && enc_buf->motion) {
index 212d15efc26bfd9620e6c038af810143a3db9ab8..721ff5320de7ffb5bd0ef3aa80dcb1aca3246c59 100644 (file)
@@ -225,7 +225,7 @@ finish_buf:
                vb2_set_plane_payload(vb, 0,
                        solo_vlines(solo_dev) * solo_bytesperline(solo_dev));
                vbuf->sequence = solo_dev->sequence++;
-               v4l2_get_timestamp(&vbuf->timestamp);
+               vb->timestamp = ktime_get_ns();
        }
 
        vb2_buffer_done(vb, error ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
index b8b06fb7bec2dcd93cf70fe5c452e7aa681e81d5..753411cbbc9a7c3053b063530726f99aa0f7bcf8 100644 (file)
@@ -817,7 +817,7 @@ static irqreturn_t vip_irq(int irq, struct sta2x11_vip *vip)
                /* Disable acquisition */
                reg_write(vip, DVP_CTL, reg_read(vip, DVP_CTL) & ~DVP_CTL_ENA);
                /* Remove the active buffer from the list */
-               v4l2_get_timestamp(&vip->active->vb.timestamp);
+               vip->active->vb.vb2_buf.timestamp = ktime_get_ns();
                vip->active->vb.sequence = vip->sequence++;
                vb2_buffer_done(&vip->active->vb.vb2_buf, VB2_BUF_STATE_DONE);
        }
index 2e71af15ddb0693bc4c3c5856913d2bd17bc2eb5..07116a87a57b081033b93d8b76196b2e05518a97 100644 (file)
@@ -1016,7 +1016,7 @@ void tw68_irq_video_done(struct tw68_dev *dev, unsigned long status)
                buf = list_entry(dev->active.next, struct tw68_buf, list);
                list_del(&buf->list);
                spin_unlock(&dev->slock);
-               v4l2_get_timestamp(&buf->vb.timestamp);
+               buf->vb.vb2_buf.timestamp = ktime_get_ns();
                buf->vb.field = dev->field;
                buf->vb.sequence = dev->seqnr++;
                vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index e434c8ef5c5ebf025a590a26b8ea17389d2369ff..de32e3a3d4d1ff67d227264ee7f7746bae0c42eb 100644 (file)
@@ -1281,7 +1281,7 @@ static inline void vpfe_schedule_bottom_field(struct vpfe_device *vpfe)
  */
 static inline void vpfe_process_buffer_complete(struct vpfe_device *vpfe)
 {
-       v4l2_get_timestamp(&vpfe->cur_frm->vb.timestamp);
+       vpfe->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
        vpfe->cur_frm->vb.field = vpfe->fmt.fmt.pix.field;
        vpfe->cur_frm->vb.sequence = vpfe->sequence++;
        vb2_buffer_done(&vpfe->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 8ecc05a8e5ae28fb2f96147470fd03e584530ef0..d0092dae7a57e6ab391ccf1021eebd4591e28787 100644 (file)
@@ -404,7 +404,7 @@ static irqreturn_t bcap_isr(int irq, void *dev_id)
        spin_lock(&bcap_dev->lock);
 
        if (!list_empty(&bcap_dev->dma_queue)) {
-               v4l2_get_timestamp(&vbuf->timestamp);
+               vb->timestamp = ktime_get_ns();
                if (ppi->err) {
                        vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
                        ppi->err = false;
index 654e964f84a2f4eac941a204b03de0ace256b2f4..21beb97974c253eb7596841f3a0aa6968b1c248e 100644 (file)
@@ -279,7 +279,7 @@ void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming)
                        if (meta) {
                                meta->sequence = src_buf->sequence;
                                meta->timecode = src_buf->timecode;
-                               meta->timestamp = src_buf->timestamp;
+                               meta->timestamp = src_buf->vb2_buf.timestamp;
                                meta->start = start;
                                meta->end = ctx->bitstream_fifo.kfifo.in &
                                            ctx->bitstream_fifo.kfifo.mask;
@@ -1364,7 +1364,7 @@ static void coda_finish_encode(struct coda_ctx *ctx)
                dst_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME;
        }
 
-       dst_buf->timestamp = src_buf->timestamp;
+       dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
        dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_buf->flags |=
                src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
@@ -2040,7 +2040,7 @@ static void coda_finish_decode(struct coda_ctx *ctx)
                dst_buf->flags |= ctx->frame_types[ctx->display_idx];
                meta = &ctx->frame_metas[ctx->display_idx];
                dst_buf->timecode = meta->timecode;
-               dst_buf->timestamp = meta->timestamp;
+               dst_buf->vb2_buf.timestamp = meta->timestamp;
 
                trace_coda_dec_rot_done(ctx, dst_buf, meta);
 
index 96532b06bd9e1c840769ce63d3dff5f942aec343..6cda81e4163aacf50dc75715e90f833d15f9705a 100644 (file)
@@ -138,7 +138,7 @@ struct coda_buffer_meta {
        struct list_head        list;
        u32                     sequence;
        struct v4l2_timecode    timecode;
-       struct timeval          timestamp;
+       u64                     timestamp;
        u32                     start;
        u32                     end;
 };
index 3fc21766d3a8c25c407a23e2878ed4942139bc05..0abcdfe97a6ceb1661d1262979a885a963b00460 100644 (file)
@@ -74,7 +74,7 @@ static void vpbe_isr_even_field(struct vpbe_display *disp_obj,
        if (layer->cur_frm == layer->next_frm)
                return;
 
-       v4l2_get_timestamp(&layer->cur_frm->vb.timestamp);
+       layer->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&layer->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
        /* Make cur_frm pointing to next_frm */
        layer->cur_frm = layer->next_frm;
index fad5b383706fa892f6f84a4eae7dcf5af687f7b9..08f7028c7560af37064a9bf5875d6051534abd1b 100644 (file)
@@ -330,7 +330,7 @@ static struct vb2_ops video_qops = {
  */
 static void vpif_process_buffer_complete(struct common_obj *common)
 {
-       v4l2_get_timestamp(&common->cur_frm->vb.timestamp);
+       common->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&common->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
        /* Make curFrm pointing to nextFrm */
        common->cur_frm = common->next_frm;
index 534b50ace3a3a57b1c242bcf563a0c95e252e820..f40755cf1bf2650683583ab4c2684e72e10df175 100644 (file)
@@ -331,7 +331,7 @@ static void process_interlaced_mode(int fid, struct common_obj *common)
                /* one frame is displayed If next frame is
                 *  available, release cur_frm and move on */
                /* Copy frame display time */
-               v4l2_get_timestamp(&common->cur_frm->vb.timestamp);
+               common->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
                /* Change status of the cur_frm */
                vb2_buffer_done(&common->cur_frm->vb.vb2_buf,
                                        VB2_BUF_STATE_DONE);
@@ -387,8 +387,8 @@ static irqreturn_t vpif_channel_isr(int irq, void *dev_id)
                        if (!channel_first_int[i][channel_id]) {
                                /* Mark status of the cur_frm to
                                 * done and unlock semaphore on it */
-                               v4l2_get_timestamp(
-                                       &common->cur_frm->vb.timestamp);
+                               common->cur_frm->vb.vb2_buf.timestamp =
+                                               ktime_get_ns();
                                vb2_buffer_done(&common->cur_frm->vb.vb2_buf,
                                                VB2_BUF_STATE_DONE);
                                /* Make cur_frm pointing to next_frm */
index ea9230ef35e3fd5fa56c3c423a384bddcdd87595..93782f15b8252092ba31a81b8c135de581f8dc4a 100644 (file)
@@ -86,7 +86,7 @@ void gsc_m2m_job_finish(struct gsc_ctx *ctx, int vb_state)
        dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
 
        if (src_vb && dst_vb) {
-               dst_vb->timestamp = src_vb->timestamp;
+               dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
                dst_vb->timecode = src_vb->timecode;
                dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                dst_vb->flags |=
@@ -125,7 +125,7 @@ static int gsc_get_bufs(struct gsc_ctx *ctx)
        if (ret)
                return ret;
 
-       dst_vb->timestamp = src_vb->timestamp;
+       dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
 
        return 0;
 }
index beadccb8abd7344c4b6f4dc20fea8e8586c10f0e..0d549a6c8a13cac5e35fb95d6b47fb943a06f1ce 100644 (file)
@@ -193,7 +193,7 @@ void fimc_capture_irq_handler(struct fimc_dev *fimc, int deq_buf)
            test_bit(ST_CAPT_RUN, &fimc->state) && deq_buf) {
                v_buf = fimc_active_queue_pop(cap);
 
-               v4l2_get_timestamp(&v_buf->vb.timestamp);
+               v_buf->vb.vb2_buf.timestamp = ktime_get_ns();
                v_buf->vb.sequence = cap->frame_count++;
 
                vb2_buffer_done(&v_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 273e7a5c7256249fe6fba807e08ad10c19ffaf1c..0dd22ec666941014eaff7dc122054dfb22e32095 100644 (file)
@@ -251,7 +251,7 @@ void fimc_isp_video_irq_handler(struct fimc_is *is)
        buf_index = (is->i2h_cmd.args[1] - 1) % video->buf_count;
        vbuf = &video->buffers[buf_index]->vb;
 
-       v4l2_get_timestamp(&vbuf->timestamp);
+       vbuf->vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
 
        video->buf_mask &= ~BIT(buf_index);
index 15d6fc983951cca31adb669e7e25ecf79f43d933..639ee710499ed79838a3c121cd944dfd95033791 100644 (file)
@@ -292,7 +292,7 @@ static irqreturn_t flite_irq_handler(int irq, void *priv)
            test_bit(ST_FLITE_RUN, &fimc->state) &&
            !list_empty(&fimc->active_buf_q)) {
                vbuf = fimc_lite_active_queue_pop(fimc);
-               v4l2_get_timestamp(&vbuf->vb.timestamp);
+               vbuf->vb.vb2_buf.timestamp = ktime_get_ns();
                vbuf->vb.sequence = fimc->frame_count++;
                flite_hw_mask_dma_buffer(fimc, vbuf->index);
                vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 4c04b596462404efbf41602931800b9a5fba372f..5aa857c7b631e602b4a60f961dd91d828d4468ae 100644 (file)
@@ -132,7 +132,7 @@ static void fimc_device_run(void *priv)
        if (ret)
                goto dma_unlock;
 
-       dst_vb->timestamp = src_vb->timestamp;
+       dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
        dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_vb->flags |=
                src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
index 652eebdbcd8ec73a4fb4e34203626dd3bc9333d5..7383818c2be6cec6bf841abe2bd366f10151438a 100644 (file)
@@ -207,7 +207,7 @@ static void dma_callback(void *data)
        src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx);
        dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
 
-       dst_vb->timestamp = src_vb->timestamp;
+       dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
        dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_vb->flags |=
                src_vb->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
index 7080a88b6a95b36707c93ff2cfe004d92133c809..9b878deb1437dc794f4db1ffab0a321de4e3f597 100644 (file)
@@ -226,7 +226,7 @@ static void mcam_buffer_done(struct mcam_camera *cam, int frame,
        vbuf->vb2_buf.planes[0].bytesused = cam->pix_format.sizeimage;
        vbuf->sequence = cam->buf_seq[frame];
        vbuf->field = V4L2_FIELD_NONE;
-       v4l2_get_timestamp(&vbuf->timestamp);
+       vbuf->vb2_buf.timestamp = ktime_get_ns();
        vb2_set_plane_payload(&vbuf->vb2_buf, 0, cam->pix_format.sizeimage);
        vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
 }
index cb7d4b518318b299e16f1e8711c66132281316c3..3c4012d42d693da1b8e9931bb4c5c67a8a7bd30f 100644 (file)
@@ -375,7 +375,7 @@ static irqreturn_t emmaprp_irq(int irq_emma, void *data)
                        src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx);
                        dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
 
-                       dst_vb->timestamp = src_vb->timestamp;
+                       dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
                        dst_vb->flags &=
                                ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                        dst_vb->flags |=
index 9cc4878f784f075090fe6d205875ea5394037259..ecadca3e945b4449965e56bfcf5946d47ab28bb1 100644 (file)
@@ -466,7 +466,7 @@ struct isp_buffer *omap3isp_video_buffer_next(struct isp_video *video)
        list_del(&buf->irqlist);
        spin_unlock_irqrestore(&video->irqlock, flags);
 
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
 
        /* Do frame number propagation only if this is the output video node.
         * Frame number either comes from the CSI receivers or it gets
index 742f13ee67a9206d0ac91784ad76d6517ac8a54a..485f5259acb082d4e71484c12ad730c0142dc77c 100644 (file)
@@ -1565,7 +1565,7 @@ static irqreturn_t jpu_irq_handler(int irq, void *dev_id)
                }
 
                dst_buf->field = src_buf->field;
-               dst_buf->timestamp = src_buf->timestamp;
+               dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
                if (src_buf->flags & V4L2_BUF_FLAG_TIMECODE)
                        dst_buf->timecode = src_buf->timecode;
                dst_buf->flags = src_buf->flags &
index 68e651295ded11530eed52d5b25ae2c838fb7e17..ec3abbed87d9051e56032f3df1c1aeeaecbc5978 100644 (file)
@@ -338,7 +338,7 @@ irqreturn_t s3c_camif_irq_handler(int irq, void *priv)
 
                if (!WARN_ON(vbuf == NULL)) {
                        /* Dequeue a filled buffer */
-                       v4l2_get_timestamp(&vbuf->vb.timestamp);
+                       vbuf->vb.vb2_buf.timestamp = ktime_get_ns();
                        vbuf->vb.sequence = vp->frame_sequence++;
                        vb2_buffer_done(&vbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
 
index 12b4415bc283526355faadfbd243b4c4015adee8..74bd46ca7942bed381d32064b983b09d3bc24185 100644 (file)
@@ -552,7 +552,7 @@ static irqreturn_t g2d_isr(int irq, void *prv)
        BUG_ON(dst == NULL);
 
        dst->timecode = src->timecode;
-       dst->timestamp = src->timestamp;
+       dst->vb2_buf.timestamp = src->vb2_buf.timestamp;
        dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst->flags |=
                src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
index 30440b0609af6499d26c8bf8451f21a1cdd61dc1..c3b13a630edfcf4ce0826e2af1d6bfdbf9b46ff0 100644 (file)
@@ -2620,7 +2620,7 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
        }
 
        dst_buf->timecode = src_buf->timecode;
-       dst_buf->timestamp = src_buf->timestamp;
+       dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
        dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_buf->flags |=
                src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
@@ -2751,7 +2751,7 @@ static irqreturn_t exynos3250_jpeg_irq(int irq, void *dev_id)
        dst_buf = v4l2_m2m_dst_buf_remove(curr_ctx->fh.m2m_ctx);
 
        dst_buf->timecode = src_buf->timecode;
-       dst_buf->timestamp = src_buf->timestamp;
+       dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
 
        v4l2_m2m_buf_done(src_buf, state);
        if (curr_ctx->mode == S5P_JPEG_ENCODE)
index 3ffe2ecfd5efe37649750c64636c91c042f57a47..0effb2fa4ea1a6720793418428170a57bc3e8bcf 100644 (file)
@@ -233,8 +233,8 @@ static void s5p_mfc_handle_frame_copy_time(struct s5p_mfc_ctx *ctx)
                                == dec_y_addr) {
                        dst_buf->b->timecode =
                                                src_buf->b->timecode;
-                       dst_buf->b->timestamp =
-                                               src_buf->b->timestamp;
+                       dst_buf->b->vb2_buf.timestamp =
+                                               src_buf->b->vb2_buf.timestamp;
                        dst_buf->b->flags &=
                                ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                        dst_buf->b->flags |=
index 82c39f305b54067b25011078c7f0f522d7c61284..82b5d69b87fa6a0a9fc46080854d9b2dc0688894 100644 (file)
@@ -1094,7 +1094,7 @@ static irqreturn_t sh_veu_isr(int irq, void *dev_id)
        if (!src || !dst)
                return IRQ_NONE;
 
-       dst->timestamp = src->timestamp;
+       dst->vb2_buf.timestamp = src->vb2_buf.timestamp;
        dst->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst->flags |=
                src->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
index fd0524ec1ccc13a11a3384bc7b54b7f1639f1ef6..115740498274e6604daa4a92e6631295aaf74466 100644 (file)
@@ -1070,7 +1070,7 @@ static irqreturn_t sh_vou_isr(int irq, void *dev_id)
 
        list_del(&vb->list);
 
-       v4l2_get_timestamp(&vb->vb.timestamp);
+       vb->vb.vb2_buf.timestamp = ktime_get_ns();
        vb->vb.sequence = vou_dev->sequence++;
        vb->vb.field = V4L2_FIELD_INTERLACED;
        vb2_buffer_done(&vb->vb.vb2_buf, VB2_BUF_STATE_DONE);
index b78aa0250b2a7ad3be8b4c64579ccd2eaebce552..c398b285180cda757ec291bb6cc0c004c3c27de4 100644 (file)
@@ -214,7 +214,7 @@ static irqreturn_t atmel_isi_handle_streaming(struct atmel_isi *isi)
                struct frame_buffer *buf = isi->active;
 
                list_del_init(&buf->list);
-               v4l2_get_timestamp(&vbuf->timestamp);
+               vbuf->vb2_buf.timestamp = ktime_get_ns();
                vbuf->sequence = isi->sequence++;
                vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
        }
index 8889b299a74205c03d54facacf1b0cfeefbbfc79..48dd5b7851b520ff0c5a5f8c67701f3e59dd0c91 100644 (file)
@@ -1345,7 +1345,7 @@ static void mx27_camera_frame_done_emma(struct mx2_camera_dev *pcdev,
                                vb2_get_plane_payload(vb, 0));
 
                list_del_init(&buf->internal.queue);
-               v4l2_get_timestamp(&vbuf->timestamp);
+               vb->timestamp = ktime_get_ns();
                vbuf->sequence = pcdev->frame_count;
                if (err)
                        vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
index bbe01e86a0cadf22d24588b00a360a9b3b335760..169ed11502265610fef99a6205f4c73456d64190 100644 (file)
@@ -155,7 +155,7 @@ static void mx3_cam_dma_done(void *arg)
                struct mx3_camera_buffer *buf = to_mx3_vb(vb);
 
                list_del_init(&buf->queue);
-               v4l2_get_timestamp(&vb->timestamp);
+               vb->vb2_buf.timestamp = ktime_get_ns();
                vb->field = mx3_cam->field;
                vb->sequence = mx3_cam->sequence++;
                vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE);
index b0043cd209aa794def2876a038ecb2f6c96cc240..b7fd695b9ed5187d2f8d2c356269ebe6fc1d26d4 100644 (file)
@@ -888,7 +888,7 @@ static irqreturn_t rcar_vin_irq(int irq, void *data)
 
                priv->queue_buf[slot]->field = priv->field;
                priv->queue_buf[slot]->sequence = priv->sequence++;
-               v4l2_get_timestamp(&priv->queue_buf[slot]->timestamp);
+               priv->queue_buf[slot]->vb2_buf.timestamp = ktime_get_ns();
                vb2_buffer_done(&priv->queue_buf[slot]->vb2_buf,
                                VB2_BUF_STATE_DONE);
                priv->queue_buf[slot] = NULL;
index 4e9bc04b92cbff316f5368e49a70b634d4fc6c0b..90c87f2b4ec075bbe96ee15201494f3dcc757753 100644 (file)
@@ -510,7 +510,7 @@ static irqreturn_t sh_mobile_ceu_irq(int irq, void *data)
                pcdev->active = NULL;
 
        ret = sh_mobile_ceu_capture(pcdev);
-       v4l2_get_timestamp(&vbuf->timestamp);
+       vbuf->vb2_buf.timestamp = ktime_get_ns();
        if (!ret) {
                vbuf->field = pcdev->field;
                vbuf->sequence = pcdev->sequence++;
index 81871d6ae823ac900e8e89911faeb771ee116111..d12a419c044a16a96991a26324a60078b34f3037 100644 (file)
@@ -191,7 +191,7 @@ static void bdisp_job_finish(struct bdisp_ctx *ctx, int vb_state)
        dst_vb = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
        if (src_vb && dst_vb) {
-               dst_vb->timestamp = src_vb->timestamp;
+               dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
                dst_vb->timecode = src_vb->timecode;
                dst_vb->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                dst_vb->flags |= src_vb->flags &
@@ -297,7 +297,7 @@ static int bdisp_get_bufs(struct bdisp_ctx *ctx)
        if (ret)
                return ret;
 
-       dst_vb->timestamp = src_vb->timestamp;
+       dst_vb->vb2_buf.timestamp = src_vb->vb2_buf.timestamp;
 
        return 0;
 }
index e8ed2652eb0775363894619713d41253dbb13684..1fa00c2cf3d798d4f3a41aceae4a80ce0b8650da 100644 (file)
@@ -1288,7 +1288,7 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
        d_vb = ctx->dst_vb;
 
        d_vb->flags = s_vb->flags;
-       d_vb->timestamp = s_vb->timestamp;
+       d_vb->vb2_buf.timestamp = s_vb->vb2_buf.timestamp;
 
        if (s_vb->flags & V4L2_BUF_FLAG_TIMECODE)
                d_vb->timecode = s_vb->timecode;
index 93e1d256b13a3168ed3f8078dfa94113ad2e7f46..418113c998013d5fabc083364b662dc17d259e79 100644 (file)
@@ -235,7 +235,7 @@ static int device_process(struct vim2m_ctx *ctx,
        out_vb->sequence =
                get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE)->sequence++;
        in_vb->sequence = q_data->sequence++;
-       out_vb->timestamp = in_vb->timestamp;
+       out_vb->vb2_buf.timestamp = in_vb->vb2_buf.timestamp;
 
        if (in_vb->flags & V4L2_BUF_FLAG_TIMECODE)
                out_vb->timecode = in_vb->timecode;
index 8c7a5ba87c9058e6e680a9db11fa3c979676c3de..751c1ba391e99f735f50dea3f1a8eb017ec8209b 100644 (file)
@@ -286,7 +286,7 @@ struct vivid_dev {
        bool                            dqbuf_error;
        bool                            seq_wrap;
        bool                            time_wrap;
-       __kernel_time_t                 time_wrap_offset;
+       u64                             time_wrap_offset;
        unsigned                        perc_dropped_buffers;
        enum vivid_signal_mode          std_signal_mode;
        unsigned                        query_std_last;
index 4ab7c4b6aaca035d68f417e8ff9dae6c4c73c73c..b98089c95ef52ff73d8a8a8ae50329e419fb6f3c 100644 (file)
@@ -954,7 +954,7 @@ static const struct v4l2_ctrl_config vivid_ctrl_has_scaler_out = {
 static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl)
 {
        struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming);
-       struct timeval tv;
+       u64 rem;
 
        switch (ctrl->id) {
        case VIVID_CID_DQBUF_ERROR:
@@ -993,8 +993,16 @@ static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl)
                        dev->time_wrap_offset = 0;
                        break;
                }
-               v4l2_get_timestamp(&tv);
-               dev->time_wrap_offset = -tv.tv_sec - 16;
+               /*
+                * We want to set the time 16 seconds before the 32 bit tv_sec
+                * value of struct timeval would wrap around. So first we
+                * calculate ktime_get_ns() % ((1 << 32) * NSEC_PER_SEC), and
+                * then we set the offset to ((1 << 32) - 16) * NSEC_PER_SEC).
+                */
+               div64_u64_rem(ktime_get_ns(),
+                       0x100000000ULL * NSEC_PER_SEC, &rem);
+               dev->time_wrap_offset =
+                       (0x100000000ULL - 16) * NSEC_PER_SEC - rem;
                break;
        }
        return 0;
index 83cc6d3b47841261c0a9663ea62680d34b538fca..9034281944a4c6f2d149bee922564894837c6c30 100644 (file)
@@ -441,7 +441,7 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
         * "Start of Exposure".
         */
        if (dev->tstamp_src_is_soe)
-               v4l2_get_timestamp(&buf->vb.timestamp);
+               buf->vb.vb2_buf.timestamp = ktime_get_ns();
        if (dev->field_cap == V4L2_FIELD_ALTERNATE) {
                /*
                 * 60 Hz standards start with the bottom field, 50 Hz standards
@@ -558,8 +558,8 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
         * the timestamp now.
         */
        if (!dev->tstamp_src_is_soe)
-               v4l2_get_timestamp(&buf->vb.timestamp);
-       buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+               buf->vb.vb2_buf.timestamp = ktime_get_ns();
+       buf->vb.vb2_buf.timestamp += dev->time_wrap_offset;
 }
 
 /*
index c2c46dcdbe95acb3b79c02004d7d38594c4d18a3..98eed5889bc17e96243a23b4e215460ff89169af 100644 (file)
@@ -95,8 +95,8 @@ static void vivid_thread_vid_out_tick(struct vivid_dev *dev)
                         */
                        vid_out_buf->vb.sequence /= 2;
                }
-               v4l2_get_timestamp(&vid_out_buf->vb.timestamp);
-               vid_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+               vid_out_buf->vb.vb2_buf.timestamp =
+                       ktime_get_ns() + dev->time_wrap_offset;
                vb2_buffer_done(&vid_out_buf->vb.vb2_buf, dev->dqbuf_error ?
                                VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
                dprintk(dev, 2, "vid_out buffer %d done\n",
@@ -108,8 +108,8 @@ static void vivid_thread_vid_out_tick(struct vivid_dev *dev)
                        vivid_sliced_vbi_out_process(dev, vbi_out_buf);
 
                vbi_out_buf->vb.sequence = dev->vbi_out_seq_count;
-               v4l2_get_timestamp(&vbi_out_buf->vb.timestamp);
-               vbi_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+               vbi_out_buf->vb.vb2_buf.timestamp =
+                       ktime_get_ns() + dev->time_wrap_offset;
                vb2_buffer_done(&vbi_out_buf->vb.vb2_buf, dev->dqbuf_error ?
                                VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
                dprintk(dev, 2, "vbi_out buffer %d done\n",
index 6eeeff9d1ae2fb98d417e6dcad84ca309e8f1eea..3d1604cb982f2cf525933c6d3dde8dc22fcf16f7 100644 (file)
@@ -117,8 +117,8 @@ static void vivid_thread_sdr_cap_tick(struct vivid_dev *dev)
        if (sdr_cap_buf) {
                sdr_cap_buf->vb.sequence = dev->sdr_cap_seq_count;
                vivid_sdr_cap_process(dev, sdr_cap_buf);
-               v4l2_get_timestamp(&sdr_cap_buf->vb.timestamp);
-               sdr_cap_buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+               sdr_cap_buf->vb.vb2_buf.timestamp =
+                       ktime_get_ns() + dev->time_wrap_offset;
                vb2_buffer_done(&sdr_cap_buf->vb.vb2_buf, dev->dqbuf_error ?
                                VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
                dev->dqbuf_error = false;
index d6d12e104aea077f020215712840181d67f7e342..cda45a582bfef3756766df64cb6c0a6e3cbeb242 100644 (file)
@@ -108,8 +108,7 @@ void vivid_raw_vbi_cap_process(struct vivid_dev *dev, struct vivid_buffer *buf)
        if (!VIVID_INVALID_SIGNAL(dev->std_signal_mode))
                vivid_vbi_gen_raw(&dev->vbi_gen, &vbi, vbuf);
 
-       v4l2_get_timestamp(&buf->vb.timestamp);
-       buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+       buf->vb.vb2_buf.timestamp = ktime_get_ns() + dev->time_wrap_offset;
 }
 
 
@@ -133,8 +132,7 @@ void vivid_sliced_vbi_cap_process(struct vivid_dev *dev,
                        vbuf[i] = dev->vbi_gen.data[i];
        }
 
-       v4l2_get_timestamp(&buf->vb.timestamp);
-       buf->vb.timestamp.tv_sec += dev->time_wrap_offset;
+       buf->vb.vb2_buf.timestamp = ktime_get_ns() + dev->time_wrap_offset;
 }
 
 static int vbi_cap_queue_setup(struct vb2_queue *vq,
index 1eebf58bbecb713fec5b4e4f05463082a58d42cb..45eb65fa23dbbc20b05f82c05948541c39ad0996 100644 (file)
@@ -582,7 +582,7 @@ vsp1_video_complete_buffer(struct vsp1_video *video)
        spin_unlock_irqrestore(&video->irqlock, flags);
 
        done->buf.sequence = video->sequence++;
-       v4l2_get_timestamp(&done->buf.timestamp);
+       done->buf.vb2_buf.timestamp = ktime_get_ns();
        for (i = 0; i < done->buf.vb2_buf.num_planes; ++i)
                vb2_set_plane_payload(&done->buf.vb2_buf, i, done->length[i]);
        vb2_buffer_done(&done->buf.vb2_buf, VB2_BUF_STATE_DONE);
index 8532cab2ec7799a6c1123f27a90165889b2077ac..722758f3392412ccc41f83ef4a221961bdd93ef5 100644 (file)
@@ -303,7 +303,7 @@ static void xvip_dma_complete(void *param)
 
        buf->buf.field = V4L2_FIELD_NONE;
        buf->buf.sequence = dma->sequence++;
-       v4l2_get_timestamp(&buf->buf.timestamp);
+       buf->buf.vb2_buf.timestamp = ktime_get_ns();
        vb2_set_plane_payload(&buf->buf.vb2_buf, 0, dma->format.sizeimage);
        vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE);
 }
index 518d511e49eeedd2b7da29eca6d4d3c0389a9e86..b5595ca8118969bd33824ae3f6846ed083e5e54b 100644 (file)
@@ -316,7 +316,7 @@ static void airspy_urb_complete(struct urb *urb)
                len = airspy_convert_stream(s, ptr, urb->transfer_buffer,
                                urb->actual_length);
                vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
-               v4l2_get_timestamp(&fbuf->vb.timestamp);
+               fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
                fbuf->vb.sequence = s->sequence++;
                vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
        }
index 427d58e6b85e9333200d4dafe723299733c03268..0a725a161dd6c0020b8304f3a3230ed6b37a1032 100644 (file)
@@ -314,7 +314,7 @@ static inline void buffer_filled(struct au0828_dev *dev,
                vb->sequence = dev->vbi_frame_count++;
 
        vb->field = V4L2_FIELD_INTERLACED;
-       v4l2_get_timestamp(&vb->timestamp);
+       vb->vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&vb->vb2_buf, VB2_BUF_STATE_DONE);
 }
 
index 235a03885198a87d88b85c298e2f1f527ba6b768..0e86ff423c499d196303da2999215e7454d3867f 100644 (file)
@@ -438,7 +438,7 @@ static inline void finish_buffer(struct em28xx *dev,
                buf->vb.field = V4L2_FIELD_NONE;
        else
                buf->vb.field = V4L2_FIELD_INTERLACED;
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
 
        vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
 }
index ae1cfa792c5891adaf32a15ec169ead42be874bb..05b1126f263ef234015261b010439f9fc6e75bc8 100644 (file)
@@ -466,7 +466,7 @@ static struct go7007_buffer *frame_boundary(struct go7007 *go, struct go7007_buf
        else
                go7007_set_motion_regions(go, vb, 0);
 
-       v4l2_get_timestamp(&vb->vb.timestamp);
+       vb->vb.vb2_buf.timestamp = ktime_get_ns();
        vb_tmp = vb;
        spin_lock(&go->spinlock);
        list_del(&vb->list);
index d0c416ddd5e7b2f8f37c2927f7d655c7f9d61cea..d7a3aa2029d2ff620cd156f7b4fba65bf602c3cb 100644 (file)
@@ -517,7 +517,7 @@ static void hackrf_urb_complete_in(struct urb *urb)
                    urb->transfer_buffer, len);
        vb2_set_plane_payload(&buffer->vb.vb2_buf, 0, len);
        buffer->vb.sequence = dev->sequence++;
-       v4l2_get_timestamp(&buffer->vb.timestamp);
+       buffer->vb.vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE);
 exit_usb_submit_urb:
        usb_submit_urb(urb, GFP_ATOMIC);
@@ -562,7 +562,7 @@ static void hackrf_urb_complete_out(struct urb *urb)
                           vb2_plane_vaddr(&buffer->vb.vb2_buf, 0), len);
        urb->actual_length = len;
        buffer->vb.sequence = dev->sequence++;
-       v4l2_get_timestamp(&buffer->vb.timestamp);
+       buffer->vb.vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&buffer->vb.vb2_buf, VB2_BUF_STATE_DONE);
 exit_usb_submit_urb:
        usb_submit_urb(urb, GFP_ATOMIC);
index e90e4946afafac17f6e94addbc8cdd39d806238c..086cf1c7bd7d19e0015950bd6af0d02c311bf090 100644 (file)
@@ -316,8 +316,7 @@ static void pwc_isoc_handler(struct urb *urb)
                        struct pwc_frame_buf *fbuf = pdev->fill_buf;
 
                        if (pdev->vsync == 1) {
-                               v4l2_get_timestamp(
-                                       &fbuf->vb.timestamp);
+                               fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
                                pdev->vsync = 2;
                        }
 
index 82bdd42f76b540ee2b50d19d5853c7e0327c29dd..9acdaa3716fbea1503ec90791fa09ad15d750da5 100644 (file)
@@ -574,7 +574,7 @@ static void s2255_got_frame(struct s2255_vc *vc, int jpgsize)
        buf = list_entry(vc->buf_list.next,
                         struct s2255_buffer, list);
        list_del(&buf->list);
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
        buf->vb.field = vc->field;
        buf->vb.sequence = vc->frame_count;
        spin_unlock_irqrestore(&vc->qlock, flags);
index 75654e676e80c9f9d716830c2802e20281305a18..46191d5262eb07f3efb9fdf87c75c0665abe6687 100644 (file)
@@ -99,7 +99,7 @@ void stk1160_buffer_done(struct stk1160 *dev)
        buf->vb.sequence = dev->sequence++;
        buf->vb.field = V4L2_FIELD_INTERLACED;
        buf->vb.vb2_buf.planes[0].bytesused = buf->bytesused;
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
 
        vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->bytesused);
        vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
index 05cbd2f4b4458d9cf9ccc0c84c70a31f12e5029b..4ebb33943f9a03a5922c408cfef628847a1053d7 100644 (file)
@@ -322,7 +322,7 @@ static void usbtv_image_chunk(struct usbtv *usbtv, __be32 *chunk)
 
                buf->vb.field = V4L2_FIELD_INTERLACED;
                buf->vb.sequence = usbtv->sequence++;
-               v4l2_get_timestamp(&buf->vb.timestamp);
+               buf->vb.vb2_buf.timestamp = ktime_get_ns();
                vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
                vb2_buffer_done(&buf->vb.vb2_buf, state);
                list_del(&buf->list);
index 2b276ab7764fc37ec0a2fc0cd5a31f8ac966a7d9..f126859ca848427afdb1eb901229da4bb8e95549 100644 (file)
@@ -694,19 +694,16 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
                ts.tv_nsec -= NSEC_PER_SEC;
        }
 
-       uvc_trace(UVC_TRACE_CLOCK, "%s: SOF %u.%06llu y %llu ts %lu.%06lu "
-                 "buf ts %lu.%06lu (x1 %u/%u/%u x2 %u/%u/%u y1 %u y2 %u)\n",
+       uvc_trace(UVC_TRACE_CLOCK, "%s: SOF %u.%06llu y %llu ts %llu "
+                 "buf ts %llu (x1 %u/%u/%u x2 %u/%u/%u y1 %u y2 %u)\n",
                  stream->dev->name,
                  sof >> 16, div_u64(((u64)sof & 0xffff) * 1000000LLU, 65536),
-                 y, ts.tv_sec, ts.tv_nsec / NSEC_PER_USEC,
-                 vbuf->timestamp.tv_sec,
-                 (unsigned long)vbuf->timestamp.tv_usec,
+                 y, timespec_to_ns(&ts), vbuf->vb2_buf.timestamp,
                  x1, first->host_sof, first->dev_sof,
                  x2, last->host_sof, last->dev_sof, y1, y2);
 
        /* Update the V4L2 buffer. */
-       vbuf->timestamp.tv_sec = ts.tv_sec;
-       vbuf->timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
+       vbuf->vb2_buf.timestamp = timespec_to_ns(&ts);
 
 done:
        spin_unlock_irqrestore(&stream->clock.lock, flags);
@@ -1034,9 +1031,7 @@ static int uvc_video_decode_start(struct uvc_streaming *stream,
 
                buf->buf.field = V4L2_FIELD_NONE;
                buf->buf.sequence = stream->sequence;
-               buf->buf.timestamp.tv_sec = ts.tv_sec;
-               buf->buf.timestamp.tv_usec =
-                       ts.tv_nsec / NSEC_PER_USEC;
+               buf->buf.vb2_buf.timestamp = timespec_to_ns(&ts);
 
                /* TODO: Handle PTS and SCR. */
                buf->state = UVC_BUF_STATE_ACTIVE;
index 1b5c695f6c5913327554c01f2b5251b96ed5fac7..bfd7e3474186e07564283be83b50a01692e5e221 100644 (file)
@@ -120,7 +120,7 @@ static int __set_timestamp(struct vb2_buffer *vb, const void *pb)
                 */
                if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) ==
                                V4L2_BUF_FLAG_TIMESTAMP_COPY)
-                       vbuf->timestamp = b->timestamp;
+                       vb->timestamp = timeval_to_ns(&b->timestamp);
                vbuf->flags |= b->flags & V4L2_BUF_FLAG_TIMECODE;
                if (b->flags & V4L2_BUF_FLAG_TIMECODE)
                        vbuf->timecode = b->timecode;
@@ -191,7 +191,7 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
 
        b->flags = vbuf->flags;
        b->field = vbuf->field;
-       b->timestamp = vbuf->timestamp;
+       b->timestamp = ns_to_timeval(vb->timestamp);
        b->timecode = vbuf->timecode;
        b->sequence = vbuf->sequence;
        b->reserved2 = 0;
@@ -308,8 +308,7 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
                                        "for an output buffer\n");
                return -EINVAL;
        }
-       vbuf->timestamp.tv_sec = 0;
-       vbuf->timestamp.tv_usec = 0;
+       vb->timestamp = 0;
        vbuf->sequence = 0;
 
        if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
index 77b4fc6fd2eeab243025f40e6e75c5652bddc416..adb2bc8811aba9ae96280db18e560db0a9eec759 100644 (file)
@@ -470,7 +470,7 @@ void vpfe_video_process_buffer_complete(struct vpfe_video_device *video)
 {
        struct vpfe_pipeline *pipe = &video->pipe;
 
-       v4l2_get_timestamp(&video->cur_frm->vb.timestamp);
+       video->cur_frm->vb.vb2_buf.timestamp = ktime_get_ns();
        vb2_buffer_done(&video->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE);
        if (pipe->state == VPFE_PIPELINE_STREAM_CONTINUOUS)
                video->cur_frm = video->next_frm;
index 17741e37a73c67e09b2d3c23ca3d6e231825ecfa..e9aeca08986f905ffd8cb32e5a65574592440be2 100644 (file)
@@ -433,7 +433,7 @@ struct iss_buffer *omap4iss_video_buffer_next(struct iss_video *video)
        list_del(&buf->list);
        spin_unlock_irqrestore(&video->qlock, flags);
 
-       v4l2_get_timestamp(&buf->vb.timestamp);
+       buf->vb.vb2_buf.timestamp = ktime_get_ns();
 
        /* Do frame number propagation only if this is the output video node.
         * Frame number either comes from the CSI receivers or it gets
index f5921989873d21accc33d0c9729948b6e7b020f5..912694f3d54ec807c6090336007067241b7649a4 100644 (file)
@@ -329,7 +329,7 @@ struct uvc_buffer *uvcg_queue_next_buffer(struct uvc_video_queue *queue,
 
        buf->buf.field = V4L2_FIELD_NONE;
        buf->buf.sequence = queue->sequence++;
-       v4l2_get_timestamp(&buf->buf.timestamp);
+       buf->buf.vb2_buf.timestamp = ktime_get_ns();
 
        vb2_set_plane_payload(&buf->buf.vb2_buf, 0, buf->bytesused);
        vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE);
index b47d1e2f4364abeb07b5b4421fe7ad57e90f6dd6..0774bf390719b78cca4de3785a4ef6011191e82d 100644 (file)
@@ -211,6 +211,7 @@ struct vb2_queue;
  * @num_planes:                number of planes in the buffer
  *                     on an internal driver queue
  * @planes:            private per-plane information; do not change
+ * @timestamp:         frame timestamp in ns
  */
 struct vb2_buffer {
        struct vb2_queue        *vb2_queue;
@@ -219,6 +220,7 @@ struct vb2_buffer {
        unsigned int            memory;
        unsigned int            num_planes;
        struct vb2_plane        planes[VB2_MAX_PLANES];
+       u64                     timestamp;
 
        /* private: internal use only
         *
index 5abab1e7c7e869225bd546b363e54400444fc1fe..110062ea9f0d0bad33fdf3964cea3a070db7db68 100644 (file)
@@ -28,7 +28,6 @@
  * @vb2_buf:   video buffer 2
  * @flags:     buffer informational flags
  * @field:     enum v4l2_field; field order of the image in the buffer
- * @timestamp: frame timestamp
  * @timecode:  frame timecode
  * @sequence:  sequence count of this frame
  * Should contain enough information to be able to cover all the fields
@@ -39,7 +38,6 @@ struct vb2_v4l2_buffer {
 
        __u32                   flags;
        __u32                   field;
-       struct timeval          timestamp;
        struct v4l2_timecode    timecode;
        __u32                   sequence;
 };
index 22afa26e34b2f69f9df1dbf26eb95cd78bfe5986..ee7754c6e4a1279e87974f62c8d9c7c3fa3d152c 100644 (file)
@@ -184,7 +184,7 @@ DECLARE_EVENT_CLASS(vb2_v4l2_event_class,
                __field(int, minor)
                __field(u32, flags)
                __field(u32, field)
-               __field(s64, timestamp)
+               __field(u64, timestamp)
                __field(u32, timecode_type)
                __field(u32, timecode_flags)
                __field(u8, timecode_frames)
@@ -205,7 +205,7 @@ DECLARE_EVENT_CLASS(vb2_v4l2_event_class,
                __entry->minor = owner ? owner->vdev->minor : -1;
                __entry->flags = vbuf->flags;
                __entry->field = vbuf->field;
-               __entry->timestamp = timeval_to_ns(&vbuf->timestamp);
+               __entry->timestamp = vb->timestamp;
                __entry->timecode_type = vbuf->timecode.type;
                __entry->timecode_flags = vbuf->timecode.flags;
                __entry->timecode_frames = vbuf->timecode.frames;
index bfeceeba37448d4ef2525deb8eeb23990e7fdd91..c1a22416ed0551b36f0467d320d511c8eb95dbf5 100644 (file)
@@ -18,6 +18,7 @@ DECLARE_EVENT_CLASS(vb2_event_class,
                __field(u32, index)
                __field(u32, type)
                __field(u32, bytesused)
+               __field(u64, timestamp)
        ),
 
        TP_fast_assign(
@@ -28,14 +29,16 @@ DECLARE_EVENT_CLASS(vb2_event_class,
                __entry->index = vb->index;
                __entry->type = vb->type;
                __entry->bytesused = vb->planes[0].bytesused;
+               __entry->timestamp = vb->timestamp;
        ),
 
        TP_printk("owner = %p, queued = %u, owned_by_drv = %d, index = %u, "
-                 "type = %u, bytesused = %u", __entry->owner,
+                 "type = %u, bytesused = %u, timestamp = %llu", __entry->owner,
                  __entry->queued_count,
                  __entry->owned_by_drv_count,
                  __entry->index, __entry->type,
-                 __entry->bytesused
+                 __entry->bytesused,
+                 __entry->timestamp
        )
 )