| .. | .. |
|---|
| 58 | 58 | * @queue: vb2 video capture queue |
|---|
| 59 | 59 | * @qlock: spinlock controlling access to buf_list and sequence |
|---|
| 60 | 60 | * @buf_list: list of buffers queued for DMA |
|---|
| 61 | + * @field: the field (TOP/BOTTOM/other) of the current buffer |
|---|
| 61 | 62 | * @sequence: frame sequence counter |
|---|
| 62 | 63 | */ |
|---|
| 63 | 64 | struct skeleton { |
|---|
| .. | .. |
|---|
| 80 | 81 | }; |
|---|
| 81 | 82 | |
|---|
| 82 | 83 | struct skel_buffer { |
|---|
| 83 | | - struct vb2_buffer vb; |
|---|
| 84 | + struct vb2_v4l2_buffer vb; |
|---|
| 84 | 85 | struct list_head list; |
|---|
| 85 | 86 | }; |
|---|
| 86 | 87 | |
|---|
| 87 | | -static inline struct skel_buffer *to_skel_buffer(struct vb2_buffer *vb2) |
|---|
| 88 | +static inline struct skel_buffer *to_skel_buffer(struct vb2_v4l2_buffer *vbuf) |
|---|
| 88 | 89 | { |
|---|
| 89 | | - return container_of(vb2, struct skel_buffer, vb); |
|---|
| 90 | + return container_of(vbuf, struct skel_buffer, vb); |
|---|
| 90 | 91 | } |
|---|
| 91 | 92 | |
|---|
| 92 | 93 | static const struct pci_device_id skeleton_pci_tbl[] = { |
|---|
| .. | .. |
|---|
| 139 | 140 | spin_lock(&skel->qlock); |
|---|
| 140 | 141 | list_del(&new_buf->list); |
|---|
| 141 | 142 | spin_unlock(&skel->qlock); |
|---|
| 142 | | - v4l2_get_timestamp(&new_buf->vb.v4l2_buf.timestamp); |
|---|
| 143 | | - new_buf->vb.v4l2_buf.sequence = skel->sequence++; |
|---|
| 144 | | - new_buf->vb.v4l2_buf.field = skel->field; |
|---|
| 143 | + new_buf->vb.vb2_buf.timestamp = ktime_get_ns(); |
|---|
| 144 | + new_buf->vb.sequence = skel->sequence++; |
|---|
| 145 | + new_buf->vb.field = skel->field; |
|---|
| 145 | 146 | if (skel->format.field == V4L2_FIELD_ALTERNATE) { |
|---|
| 146 | 147 | if (skel->field == V4L2_FIELD_BOTTOM) |
|---|
| 147 | 148 | skel->field = V4L2_FIELD_TOP; |
|---|
| 148 | 149 | else if (skel->field == V4L2_FIELD_TOP) |
|---|
| 149 | 150 | skel->field = V4L2_FIELD_BOTTOM; |
|---|
| 150 | 151 | } |
|---|
| 151 | | - vb2_buffer_done(&new_buf->vb, VB2_BUF_STATE_DONE); |
|---|
| 152 | + vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); |
|---|
| 152 | 153 | } |
|---|
| 153 | 154 | #endif |
|---|
| 154 | 155 | return IRQ_HANDLED; |
|---|
| .. | .. |
|---|
| 212 | 213 | */ |
|---|
| 213 | 214 | static void buffer_queue(struct vb2_buffer *vb) |
|---|
| 214 | 215 | { |
|---|
| 216 | + struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); |
|---|
| 215 | 217 | struct skeleton *skel = vb2_get_drv_priv(vb->vb2_queue); |
|---|
| 216 | | - struct skel_buffer *buf = to_skel_buffer(vb); |
|---|
| 218 | + struct skel_buffer *buf = to_skel_buffer(vbuf); |
|---|
| 217 | 219 | unsigned long flags; |
|---|
| 218 | 220 | |
|---|
| 219 | 221 | spin_lock_irqsave(&skel->qlock, flags); |
|---|
| .. | .. |
|---|
| 232 | 234 | |
|---|
| 233 | 235 | spin_lock_irqsave(&skel->qlock, flags); |
|---|
| 234 | 236 | list_for_each_entry_safe(buf, node, &skel->buf_list, list) { |
|---|
| 235 | | - vb2_buffer_done(&buf->vb, state); |
|---|
| 237 | + vb2_buffer_done(&buf->vb.vb2_buf, state); |
|---|
| 236 | 238 | list_del(&buf->list); |
|---|
| 237 | 239 | } |
|---|
| 238 | 240 | spin_unlock_irqrestore(&skel->qlock, flags); |
|---|
| .. | .. |
|---|
| 877 | 879 | vdev->tvnorms = SKEL_TVNORMS; |
|---|
| 878 | 880 | video_set_drvdata(vdev, skel); |
|---|
| 879 | 881 | |
|---|
| 880 | | - ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1); |
|---|
| 882 | + ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1); |
|---|
| 881 | 883 | if (ret) |
|---|
| 882 | 884 | goto free_hdl; |
|---|
| 883 | 885 | |
|---|