mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
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 <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
c139990e84
commit
2d7007153f
@@ -38,6 +38,7 @@
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-dev.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/videobuf2-v4l2.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
|
||||
/* read 512 bytes from endpoint 0x86 -> get header + blobs */
|
||||
@@ -163,7 +164,7 @@ struct sur40_state {
|
||||
};
|
||||
|
||||
struct sur40_buffer {
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
@@ -420,7 +421,7 @@ static void sur40_process_video(struct sur40_state *sur40)
|
||||
|
||||
dev_dbg(sur40->dev, "header acquired\n");
|
||||
|
||||
sgt = vb2_dma_sg_plane_desc(&new_buf->vb, 0);
|
||||
sgt = vb2_dma_sg_plane_desc(&new_buf->vb.vb2_buf, 0);
|
||||
|
||||
result = usb_sg_init(&sgr, sur40->usbdev,
|
||||
usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), 0,
|
||||
@@ -443,15 +444,15 @@ static void sur40_process_video(struct sur40_state *sur40)
|
||||
goto err_poll;
|
||||
|
||||
/* mark as finished */
|
||||
v4l2_get_timestamp(&new_buf->vb.v4l2_buf.timestamp);
|
||||
new_buf->vb.v4l2_buf.sequence = sur40->sequence++;
|
||||
new_buf->vb.v4l2_buf.field = V4L2_FIELD_NONE;
|
||||
vb2_buffer_done(&new_buf->vb, VB2_BUF_STATE_DONE);
|
||||
v4l2_get_timestamp(&new_buf->vb.timestamp);
|
||||
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);
|
||||
dev_dbg(sur40->dev, "buffer marked done\n");
|
||||
return;
|
||||
|
||||
err_poll:
|
||||
vb2_buffer_done(&new_buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
|
||||
/* Initialize input device parameters. */
|
||||
@@ -701,7 +702,7 @@ static void return_all_buffers(struct sur40_state *sur40,
|
||||
|
||||
spin_lock(&sur40->qlock);
|
||||
list_for_each_entry_safe(buf, node, &sur40->buf_list, list) {
|
||||
vb2_buffer_done(&buf->vb, state);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, state);
|
||||
list_del(&buf->list);
|
||||
}
|
||||
spin_unlock(&sur40->qlock);
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/videobuf2-v4l2.h>
|
||||
#include <media/videobuf2-vmalloc.h>
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
@@ -107,7 +108,8 @@ static const unsigned int NUM_FORMATS = ARRAY_SIZE(formats);
|
||||
|
||||
/* intermediate buffers with raw data from the USB device */
|
||||
struct rtl2832_sdr_frame_buf {
|
||||
struct vb2_buffer vb; /* common v4l buffer stuff -- must be first */
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
@@ -304,13 +306,13 @@ static void rtl2832_sdr_urb_complete(struct urb *urb)
|
||||
}
|
||||
|
||||
/* fill framebuffer */
|
||||
ptr = vb2_plane_vaddr(&fbuf->vb, 0);
|
||||
ptr = vb2_plane_vaddr(&fbuf->vb.vb2_buf, 0);
|
||||
len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer,
|
||||
urb->actual_length);
|
||||
vb2_set_plane_payload(&fbuf->vb, 0, len);
|
||||
v4l2_get_timestamp(&fbuf->vb.v4l2_buf.timestamp);
|
||||
fbuf->vb.v4l2_buf.sequence = dev->sequence++;
|
||||
vb2_buffer_done(&fbuf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
|
||||
v4l2_get_timestamp(&fbuf->vb.timestamp);
|
||||
fbuf->vb.sequence = dev->sequence++;
|
||||
vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
skip:
|
||||
usb_submit_urb(urb, GFP_ATOMIC);
|
||||
@@ -464,7 +466,7 @@ static void rtl2832_sdr_cleanup_queued_bufs(struct rtl2832_sdr_dev *dev)
|
||||
buf = list_entry(dev->queued_bufs.next,
|
||||
struct rtl2832_sdr_frame_buf, 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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->queued_bufs_lock, flags);
|
||||
}
|
||||
@@ -518,14 +520,15 @@ static int rtl2832_sdr_buf_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void rtl2832_sdr_buf_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
|
||||
struct rtl2832_sdr_frame_buf *buf =
|
||||
container_of(vb, struct rtl2832_sdr_frame_buf, vb);
|
||||
container_of(vbuf, struct rtl2832_sdr_frame_buf, vb);
|
||||
unsigned long flags;
|
||||
|
||||
/* Check the device has not disconnected between prep and queuing */
|
||||
if (!dev->udev) {
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/videobuf2-v4l2.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
|
||||
#include "m00233_video_measure_memmap_package.h"
|
||||
@@ -206,11 +207,12 @@ struct sg_dma_desc_info {
|
||||
#define COBALT_STREAM_FL_ADV_IRQ 1
|
||||
|
||||
struct cobalt_buffer {
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
static inline struct cobalt_buffer *to_cobalt_buffer(struct vb2_buffer *vb2)
|
||||
static inline
|
||||
struct cobalt_buffer *to_cobalt_buffer(struct vb2_v4l2_buffer *vb2)
|
||||
{
|
||||
return container_of(vb2, struct cobalt_buffer, vb);
|
||||
}
|
||||
|
||||
@@ -134,11 +134,12 @@ done:
|
||||
skip = true;
|
||||
s->skip_first_frames--;
|
||||
}
|
||||
v4l2_get_timestamp(&cb->vb.v4l2_buf.timestamp);
|
||||
v4l2_get_timestamp(&cb->vb.timestamp);
|
||||
/* TODO: the sequence number should be read from the FPGA so we
|
||||
also know about dropped frames. */
|
||||
cb->vb.v4l2_buf.sequence = s->sequence++;
|
||||
vb2_buffer_done(&cb->vb, (skip || s->unstable_frame) ?
|
||||
cb->vb.sequence = s->sequence++;
|
||||
vb2_buffer_done(&cb->vb.vb2_buf,
|
||||
(skip || s->unstable_frame) ?
|
||||
VB2_BUF_STATE_REQUEUEING : VB2_BUF_STATE_DONE);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ static int cobalt_buf_init(struct vb2_buffer *vb)
|
||||
const size_t bytes =
|
||||
COBALT_MAX_HEIGHT * max_pages_per_line * 0x20;
|
||||
const size_t audio_bytes = ((1920 * 4) / PAGE_SIZE + 1) * 0x20;
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->v4l2_buf.index];
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->index];
|
||||
struct sg_table *sg_desc = vb2_dma_sg_plane_desc(vb, 0);
|
||||
unsigned size;
|
||||
int ret;
|
||||
@@ -105,17 +105,18 @@ static int cobalt_buf_init(struct vb2_buffer *vb)
|
||||
static void cobalt_buf_cleanup(struct vb2_buffer *vb)
|
||||
{
|
||||
struct cobalt_stream *s = vb->vb2_queue->drv_priv;
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->v4l2_buf.index];
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->index];
|
||||
|
||||
descriptor_list_free(desc);
|
||||
}
|
||||
|
||||
static int cobalt_buf_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cobalt_stream *s = vb->vb2_queue->drv_priv;
|
||||
|
||||
vb2_set_plane_payload(vb, 0, s->stride * s->height);
|
||||
vb->v4l2_buf.field = V4L2_FIELD_NONE;
|
||||
vbuf->field = V4L2_FIELD_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -128,7 +129,7 @@ static void chain_all_buffers(struct cobalt_stream *s)
|
||||
|
||||
list_for_each(p, &s->bufs) {
|
||||
cb = list_entry(p, struct cobalt_buffer, list);
|
||||
desc[i] = &s->dma_desc_info[cb->vb.v4l2_buf.index];
|
||||
desc[i] = &s->dma_desc_info[cb->vb.vb2_buf.index];
|
||||
if (i > 0)
|
||||
descriptor_list_chain(desc[i-1], desc[i]);
|
||||
i++;
|
||||
@@ -137,10 +138,11 @@ static void chain_all_buffers(struct cobalt_stream *s)
|
||||
|
||||
static void cobalt_buf_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct vb2_queue *q = vb->vb2_queue;
|
||||
struct cobalt_stream *s = q->drv_priv;
|
||||
struct cobalt_buffer *cb = to_cobalt_buffer(vb);
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->v4l2_buf.index];
|
||||
struct cobalt_buffer *cb = to_cobalt_buffer(vbuf);
|
||||
struct sg_dma_desc_info *desc = &s->dma_desc_info[vb->index];
|
||||
unsigned long flags;
|
||||
|
||||
/* Prepare new buffer */
|
||||
@@ -284,7 +286,7 @@ static void cobalt_dma_start_streaming(struct cobalt_stream *s)
|
||||
&vo->control);
|
||||
}
|
||||
cb = list_first_entry(&s->bufs, struct cobalt_buffer, list);
|
||||
omni_sg_dma_start(s, &s->dma_desc_info[cb->vb.v4l2_buf.index]);
|
||||
omni_sg_dma_start(s, &s->dma_desc_info[cb->vb.vb2_buf.index]);
|
||||
spin_unlock_irqrestore(&s->irqlock, flags);
|
||||
}
|
||||
|
||||
@@ -381,7 +383,7 @@ static void cobalt_dma_stop_streaming(struct cobalt_stream *s)
|
||||
spin_lock_irqsave(&s->irqlock, flags);
|
||||
list_for_each(p, &s->bufs) {
|
||||
cb = list_entry(p, struct cobalt_buffer, list);
|
||||
desc = &s->dma_desc_info[cb->vb.v4l2_buf.index];
|
||||
desc = &s->dma_desc_info[cb->vb.vb2_buf.index];
|
||||
/* Stop DMA after this descriptor chain */
|
||||
descriptor_list_end_of_chain(desc);
|
||||
}
|
||||
@@ -416,7 +418,7 @@ static void cobalt_stop_streaming(struct vb2_queue *q)
|
||||
list_for_each_safe(p, safe, &s->bufs) {
|
||||
cb = list_entry(p, struct cobalt_buffer, list);
|
||||
list_del(&cb->list);
|
||||
vb2_buffer_done(&cb->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&cb->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&s->irqlock, flags);
|
||||
|
||||
|
||||
@@ -1155,17 +1155,19 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf =
|
||||
container_of(vb, struct cx23885_buffer, vb);
|
||||
container_of(vbuf, struct cx23885_buffer, vb);
|
||||
|
||||
return cx23885_buf_prepare(buf, &dev->ts1);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_free_buffer(dev, buf);
|
||||
@@ -1173,8 +1175,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_buf_queue(&dev->ts1, buf);
|
||||
@@ -1201,7 +1204,7 @@ static int cx23885_start_streaming(struct vb2_queue *q, unsigned int count)
|
||||
struct cx23885_buffer, queue);
|
||||
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
return ret;
|
||||
|
||||
@@ -427,12 +427,13 @@ static void cx23885_wakeup(struct cx23885_tsport *port,
|
||||
buf = list_entry(q->active.next,
|
||||
struct cx23885_buffer, queue);
|
||||
|
||||
v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
|
||||
buf->vb.v4l2_buf.sequence = q->count++;
|
||||
dprintk(1, "[%p/%d] wakeup reg=%d buf=%d\n", buf, buf->vb.v4l2_buf.index,
|
||||
v4l2_get_timestamp(&buf->vb.timestamp);
|
||||
buf->vb.sequence = q->count++;
|
||||
dprintk(1, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
|
||||
buf->vb.vb2_buf.index,
|
||||
count, q->count);
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
|
||||
int cx23885_sram_channel_setup(struct cx23885_dev *dev,
|
||||
@@ -1453,12 +1454,12 @@ int cx23885_buf_prepare(struct cx23885_buffer *buf, struct cx23885_tsport *port)
|
||||
{
|
||||
struct cx23885_dev *dev = port->dev;
|
||||
int size = port->ts_packet_size * port->ts_packet_count;
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb, 0);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb.vb2_buf, 0);
|
||||
|
||||
dprintk(1, "%s: %p\n", __func__, buf);
|
||||
if (vb2_plane_size(&buf->vb, 0) < size)
|
||||
if (vb2_plane_size(&buf->vb.vb2_buf, 0) < size)
|
||||
return -EINVAL;
|
||||
vb2_set_plane_payload(&buf->vb, 0, size);
|
||||
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
|
||||
|
||||
cx23885_risc_databuffer(dev->pci, &buf->risc,
|
||||
sgt->sgl,
|
||||
@@ -1503,7 +1504,7 @@ void cx23885_buf_queue(struct cx23885_tsport *port, struct cx23885_buffer *buf)
|
||||
if (list_empty(&cx88q->active)) {
|
||||
list_add_tail(&buf->queue, &cx88q->active);
|
||||
dprintk(1, "[%p/%d] %s - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
prev = list_entry(cx88q->active.prev, struct cx23885_buffer,
|
||||
@@ -1511,7 +1512,7 @@ void cx23885_buf_queue(struct cx23885_tsport *port, struct cx23885_buffer *buf)
|
||||
list_add_tail(&buf->queue, &cx88q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(1, "[%p/%d] %s - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
@@ -1530,9 +1531,10 @@ static void do_cancel_buffers(struct cx23885_tsport *port, char *reason)
|
||||
buf = list_entry(q->active.next, struct cx23885_buffer,
|
||||
queue);
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
dprintk(1, "[%p/%d] %s - dma=0x%08lx\n",
|
||||
buf, buf->vb.v4l2_buf.index, reason, (unsigned long)buf->risc.dma);
|
||||
buf, buf->vb.vb2_buf.index, reason,
|
||||
(unsigned long)buf->risc.dma);
|
||||
}
|
||||
spin_unlock_irqrestore(&port->slock, flags);
|
||||
}
|
||||
|
||||
@@ -110,18 +110,20 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_tsport *port = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf =
|
||||
container_of(vb, struct cx23885_buffer, vb);
|
||||
container_of(vbuf, struct cx23885_buffer, vb);
|
||||
|
||||
return cx23885_buf_prepare(buf, port);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_tsport *port = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_dev *dev = port->dev;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_free_buffer(dev, buf);
|
||||
@@ -129,8 +131,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_tsport *port = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_buf_queue(port, buf);
|
||||
|
||||
@@ -138,8 +138,9 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
unsigned lines = VBI_PAL_LINE_COUNT;
|
||||
@@ -161,7 +162,8 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_free_buffer(vb->vb2_queue->drv_priv, buf);
|
||||
@@ -190,8 +192,10 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
*/
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb, struct cx23885_buffer, vb);
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
struct cx23885_buffer *prev;
|
||||
struct cx23885_dmaqueue *q = &dev->vbiq;
|
||||
unsigned long flags;
|
||||
@@ -206,7 +210,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->queue, &q->active);
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
dprintk(2, "[%p/%d] vbi_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -217,7 +221,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2, "[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,7 +249,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q)
|
||||
struct cx23885_buffer, queue);
|
||||
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -104,12 +104,12 @@ void cx23885_video_wakeup(struct cx23885_dev *dev,
|
||||
buf = list_entry(q->active.next,
|
||||
struct cx23885_buffer, queue);
|
||||
|
||||
buf->vb.v4l2_buf.sequence = q->count++;
|
||||
v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
|
||||
dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf, buf->vb.v4l2_buf.index,
|
||||
count, q->count);
|
||||
buf->vb.sequence = q->count++;
|
||||
v4l2_get_timestamp(&buf->vb.timestamp);
|
||||
dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf,
|
||||
buf->vb.vb2_buf.index, count, q->count);
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
|
||||
int cx23885_set_tvnorm(struct cx23885_dev *dev, v4l2_std_id norm)
|
||||
@@ -329,9 +329,10 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf =
|
||||
container_of(vb, struct cx23885_buffer, vb);
|
||||
container_of(vbuf, struct cx23885_buffer, vb);
|
||||
u32 line0_offset, line1_offset;
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
int field_tff;
|
||||
@@ -401,7 +402,7 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
BUG();
|
||||
}
|
||||
dprintk(2, "[%p/%d] buffer_init - %dx%d %dbpp \"%s\" - dma=0x%08lx\n",
|
||||
buf, buf->vb.v4l2_buf.index,
|
||||
buf, buf->vb.vb2_buf.index,
|
||||
dev->width, dev->height, dev->fmt->depth, dev->fmt->name,
|
||||
(unsigned long)buf->risc.dma);
|
||||
return 0;
|
||||
@@ -409,7 +410,8 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
|
||||
cx23885_free_buffer(vb->vb2_queue->drv_priv, buf);
|
||||
@@ -438,8 +440,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
*/
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx23885_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx23885_buffer *buf = container_of(vb,
|
||||
struct cx23885_buffer *buf = container_of(vbuf,
|
||||
struct cx23885_buffer, vb);
|
||||
struct cx23885_buffer *prev;
|
||||
struct cx23885_dmaqueue *q = &dev->vidq;
|
||||
@@ -455,7 +458,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
if (list_empty(&q->active)) {
|
||||
list_add_tail(&buf->queue, &q->active);
|
||||
dprintk(2, "[%p/%d] buffer_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
prev = list_entry(q->active.prev, struct cx23885_buffer,
|
||||
@@ -463,7 +466,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->queue, &q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2, "[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
@@ -492,7 +495,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q)
|
||||
struct cx23885_buffer, queue);
|
||||
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ struct cx23885_riscmem {
|
||||
/* buffer for one video frame */
|
||||
struct cx23885_buffer {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head queue;
|
||||
|
||||
/* cx23885 specific */
|
||||
|
||||
@@ -130,10 +130,10 @@ 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.v4l2_buf.timestamp);
|
||||
buf->vb.v4l2_buf.sequence = dmaq->count++;
|
||||
v4l2_get_timestamp(&buf->vb.timestamp);
|
||||
buf->vb.sequence = dmaq->count++;
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
spin_unlock(&dev->slock);
|
||||
handled++;
|
||||
@@ -159,10 +159,11 @@ static int cx25821_queue_setup(struct vb2_queue *q, const struct v4l2_format *fm
|
||||
|
||||
static int cx25821_buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx25821_channel *chan = vb->vb2_queue->drv_priv;
|
||||
struct cx25821_dev *dev = chan->dev;
|
||||
struct cx25821_buffer *buf =
|
||||
container_of(vb, struct cx25821_buffer, vb);
|
||||
container_of(vbuf, struct cx25821_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
u32 line0_offset;
|
||||
int bpl_local = LINE_SIZE_D1;
|
||||
@@ -176,7 +177,7 @@ static int cx25821_buffer_prepare(struct vb2_buffer *vb)
|
||||
if (vb2_plane_size(vb, 0) < chan->height * buf->bpl)
|
||||
return -EINVAL;
|
||||
vb2_set_plane_payload(vb, 0, chan->height * buf->bpl);
|
||||
buf->vb.v4l2_buf.field = chan->field;
|
||||
buf->vb.field = chan->field;
|
||||
|
||||
if (chan->pixel_formats == PIXEL_FRMT_411) {
|
||||
bpl_local = buf->bpl;
|
||||
@@ -231,7 +232,7 @@ static int cx25821_buffer_prepare(struct vb2_buffer *vb)
|
||||
}
|
||||
|
||||
dprintk(2, "[%p/%d] buffer_prep - %dx%d %dbpp \"%s\" - dma=0x%08lx\n",
|
||||
buf, buf->vb.v4l2_buf.index, chan->width, chan->height,
|
||||
buf, buf->vb.vb2_buf.index, chan->width, chan->height,
|
||||
chan->fmt->depth, chan->fmt->name,
|
||||
(unsigned long)buf->risc.dma);
|
||||
|
||||
@@ -240,8 +241,9 @@ static int cx25821_buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void cx25821_buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx25821_buffer *buf =
|
||||
container_of(vb, struct cx25821_buffer, vb);
|
||||
container_of(vbuf, struct cx25821_buffer, vb);
|
||||
struct cx25821_channel *chan = vb->vb2_queue->drv_priv;
|
||||
struct cx25821_dev *dev = chan->dev;
|
||||
|
||||
@@ -250,8 +252,9 @@ static void cx25821_buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void cx25821_buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx25821_buffer *buf =
|
||||
container_of(vb, struct cx25821_buffer, vb);
|
||||
container_of(vbuf, struct cx25821_buffer, vb);
|
||||
struct cx25821_channel *chan = vb->vb2_queue->drv_priv;
|
||||
struct cx25821_dev *dev = chan->dev;
|
||||
struct cx25821_buffer *prev;
|
||||
@@ -300,7 +303,7 @@ static void cx25821_stop_streaming(struct vb2_queue *q)
|
||||
struct cx25821_buffer, queue);
|
||||
|
||||
list_del(&buf->queue);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/videobuf2-v4l2.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
|
||||
#include "cx25821-reg.h"
|
||||
@@ -127,7 +128,7 @@ struct cx25821_riscmem {
|
||||
/* buffer for one video frame */
|
||||
struct cx25821_buffer {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head queue;
|
||||
|
||||
/* cx25821 specific */
|
||||
|
||||
@@ -653,16 +653,18 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
return cx8802_buf_prepare(vb->vb2_queue, dev, buf);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -672,8 +674,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
cx8802_buf_queue(dev, buf);
|
||||
}
|
||||
@@ -721,7 +724,7 @@ fail:
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
return err;
|
||||
@@ -749,7 +752,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -518,11 +518,11 @@ void cx88_wakeup(struct cx88_core *core,
|
||||
|
||||
buf = list_entry(q->active.next,
|
||||
struct cx88_buffer, list);
|
||||
v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
|
||||
buf->vb.v4l2_buf.field = core->field;
|
||||
buf->vb.v4l2_buf.sequence = q->count++;
|
||||
v4l2_get_timestamp(&buf->vb.timestamp);
|
||||
buf->vb.field = core->field;
|
||||
buf->vb.sequence = q->count++;
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
|
||||
void cx88_shutdown(struct cx88_core *core)
|
||||
|
||||
@@ -99,16 +99,18 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
return cx8802_buf_prepare(vb->vb2_queue, dev, buf);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -118,8 +120,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
cx8802_buf_queue(dev, buf);
|
||||
}
|
||||
@@ -149,7 +152,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
|
||||
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
cx8802_start_dma(dev, q, buf);
|
||||
return 0;
|
||||
}
|
||||
@@ -225,13 +225,13 @@ int cx8802_buf_prepare(struct vb2_queue *q, struct cx8802_dev *dev,
|
||||
struct cx88_buffer *buf)
|
||||
{
|
||||
int size = dev->ts_packet_size * dev->ts_packet_count;
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb, 0);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb.vb2_buf, 0);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
int rc;
|
||||
|
||||
if (vb2_plane_size(&buf->vb, 0) < size)
|
||||
if (vb2_plane_size(&buf->vb.vb2_buf, 0) < size)
|
||||
return -EINVAL;
|
||||
vb2_set_plane_payload(&buf->vb, 0, size);
|
||||
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
|
||||
|
||||
rc = cx88_risc_databuffer(dev->pci, risc, sgt->sgl,
|
||||
dev->ts_packet_size, dev->ts_packet_count, 0);
|
||||
@@ -259,7 +259,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
|
||||
dprintk( 1, "queue is empty - first active\n" );
|
||||
list_add_tail(&buf->list, &cx88q->active);
|
||||
dprintk(1,"[%p/%d] %s - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -268,7 +268,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
|
||||
list_add_tail(&buf->list, &cx88q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk( 1, "[%p/%d] %s - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ static void do_cancel_buffers(struct cx8802_dev *dev)
|
||||
while (!list_empty(&q->active)) {
|
||||
buf = list_entry(q->active.next, struct cx88_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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock,flags);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ int cx8800_restart_vbi_queue(struct cx8800_dev *dev,
|
||||
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
cx8800_start_vbi_dma(dev, q, buf);
|
||||
return 0;
|
||||
}
|
||||
@@ -125,8 +125,9 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
unsigned int lines;
|
||||
unsigned int size;
|
||||
@@ -149,8 +150,9 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -160,8 +162,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *prev;
|
||||
struct cx88_dmaqueue *q = &dev->vbiq;
|
||||
|
||||
@@ -174,7 +177,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
cx8800_start_vbi_dma(dev, q, buf);
|
||||
dprintk(2,"[%p/%d] vbi_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -182,7 +185,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2,"[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +216,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@ static int restart_video_queue(struct cx8800_dev *dev,
|
||||
if (!list_empty(&q->active)) {
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
start_video_dma(dev, q, buf);
|
||||
}
|
||||
return 0;
|
||||
@@ -444,9 +444,10 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_core *core = dev->core;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
|
||||
buf->bpl = core->width * dev->fmt->depth >> 3;
|
||||
@@ -489,7 +490,7 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
break;
|
||||
}
|
||||
dprintk(2,"[%p/%d] buffer_prepare - %dx%d %dbpp \"%s\" - dma=0x%08lx\n",
|
||||
buf, buf->vb.v4l2_buf.index,
|
||||
buf, buf->vb.vb2_buf.index,
|
||||
core->width, core->height, dev->fmt->depth, dev->fmt->name,
|
||||
(unsigned long)buf->risc.dma);
|
||||
return 0;
|
||||
@@ -497,8 +498,9 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -508,8 +510,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *prev;
|
||||
struct cx88_core *core = dev->core;
|
||||
struct cx88_dmaqueue *q = &dev->vidq;
|
||||
@@ -522,7 +525,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
if (list_empty(&q->active)) {
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
dprintk(2,"[%p/%d] buffer_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -530,7 +533,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2, "[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -560,7 +563,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_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);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
||||
@@ -321,7 +321,7 @@ struct cx88_riscmem {
|
||||
/* buffer for one video frame */
|
||||
struct cx88_buffer {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head list;
|
||||
|
||||
/* cx88 specific */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user